Skip to main content

Python : modèle de Bohr

Ce programme crée le graphique du diagramme de Bohr en fonction d'un nombre d'électrons donnés, et enregistre sous forme de .png

 


import numpy as np
import matplotlib.pyplot as plt
			
def Config():
	Z=int(input("Combien d'electrons ?"))
	orbitales = ["1s", "2s", "2p", "3s", "3p", "4s","3d", "4p", "5s", "4d", "5p", "6s","4f", "5d", "6p", "7s", "5f", "6d", "7p"]
    
	max_elec = {"s": 2,"p": 6,"d": 10,"f": 14}
    
	config = []
	reste = Z
    
	for orb in orbitales:
		l = orb[-1]  # type de sous-couche: s, p, d, f
		n = min(max_elec[l], reste)
		config.append([f"{orb}^",n])
		reste -= n
		if reste <= 0:
			break
    
	print('Configuration électronique :',config)
	return config,Z

def traceur() :
	orbits,Z = Config()
	population = [0 for i in range(7)]
	for orb in orbits : 
		n = int(orb[0][0])
		population[n-1]+=orb[1]
	print('Population :',population)
	
	fig, ax = plt.subplots()
	rayons=np.linspace(1,7,7,dtype=int)

	for r, n_e in zip(rayons, population):
		if n_e!=0 :
    	
			cercle = plt.Circle((0, 0), r, fill=False)
			ax.add_patch(cercle)

    
			angles = np.linspace(0, 2*np.pi, n_e, endpoint=False)
			x = r * np.cos(angles)
			y = r * np.sin(angles)

			ax.scatter(x, y, s=50)  # s=taille du point


	nucleus = plt.Circle((0, 0), 0.2, color=(0,0,1))
	ax.add_patch(nucleus)

	ax.set_aspect('equal', 'box')
	plt.axis('off')
	ax.set_xlim(-max(rayons)-1, max(rayons)+1)
	ax.set_ylim(-max(rayons)-1, max(rayons)+1)
	ax.set_xticks([])
	ax.set_yticks([])
	plt.savefig(f'orb_{Z}')
	plt.show()
	
	
	

	
traceur()