configuration électronique Python

Messages : 30

Inscription : 28 mai 2020 08:56

Profil de l'utilisateur : Élève de lycée

configuration électronique Python

Message par Alizee76 » 08 nov. 2020 13:26

Bonjour,
je dois "écrire un programme affichant les sous-couches (n,l) classées par énergie croissante pour n+l≤8".
D'après la question précédente, on définit la variable symbole_l='spdf'

On sait que d'après la règle de Klechkowski, l'énergie des orbitales atomiques croît par n+l croissant puis par n croissant.
Il faut alors utiliser les conditions "if,else" dans le programme je le sais.
J'ai aussi utilisé une boucle "while n+l≤8".
Voici mon programme mais je sais qu'il est incomplet or je suis bloquée. EDIT: Je viens de de remarquer qu'il faut utiliser "ind" pour l'indice correspondant à l.

n=0
k=n+l
ind=0
symbole_l='spdf'
l=symbol_l[0]
while n+l<8:
for i in range(0,len(symbole_l)):
if ind<k:
n=k
l=symbole_l
else:
n=n+1
print(n,symbol_l[l])

Messages : 294

Inscription : 27 oct. 2017 10:55

Profil de l'utilisateur : Professionnel

Re: configuration électronique Python

Message par Hibiscus » 08 nov. 2020 20:59

tu as vu, du coup, l'oubli de l'utilisation de l' "ind", dans ton precedent code, l'as-tu deja modifie ?

Je suis d'accord avec la boucle while, compte tenu de l'enonce, mais tu ne sembles pas initialiser $ \ell $, avec un nombre, ce qui ne plaira pas trop a k, ni a ton "n+l<8".
(si tu veux effectivement faire ca, il faut faire un peu de travail en amont, en definissant une classe d'objets)
Tu as aussi quelques inconsistances sur le e de symbole, pour ta liste symbol(e)_l.
Ca, c'etait pour la forme.

Pour le fond, je ne comprends pas trop ce que tu fais dans ton if.
Tu dis, si ind<k, i.e, le nombre quantique secondaire est plus petit que k (sachant que k=n+l, c'est bizarre), alors n=k ? Ca n'est pas ce que dit le principe de l'Aufbau.
Tu dois ajouter petit a petit les orbitales par n+l croissants, et augmenter petit a petit les valeurs de l, et n, en gardant en tete leurs encadrements.

Donc, tu gardes

Code : Tout sélectionner

while n+l<8: 
en partant du bas si tu preferes, donc n=1, l=0 (attention, n=0 n'existe pas !)
Et tu print petit a petit, le cas
n+l=1, (1,0),
n+l=2, (2,0),
n+l=3, (2,1), (3,0),
n+l=4, (3,1), (4,0),
n+l=5, (3,2), (4,1), (5,0)
et ainsi de suite.
SPOILER:
C'est a dire, que tu print, pour une valeur de n donnee, la plus haute valeur de l acceptable et qu'ensuite tu augmentes n, tu regardes si tu as un (ou plus) l qui correspond, si oui, c'est pareil qu'avant, sinon tu repasses une nouvelle fois dans la boucle.
Et, au lieu d'afficher la valeur de l, ici le second chiffre dans les couples, tu affiches l'element qui porte ce numero dans ta liste symbole_l.


(PS: c'est aussi faisable tres proprement dans l'autre sens, en faisant des output.append() et en diminuant les valeurs de n+l. )
Masséna (PC*) -- X15 -- Spatial.

Messages : 9679

Inscription : 30 juil. 2008 16:59

Profil de l'utilisateur : Élève de lycée

Re: configuration électronique Python

Message par fakbill » 09 nov. 2020 16:58

Voici mon programme mais je sais qu'il est incomplet or je suis bloquée
Ce genre de remarque nous aide peu pour t'aider.
il te faut décrire un peu ce qui coince et ce que tu as essayé.
Par ex :"je dois faire une boucle, j'ai essayé telle syntaxe mais ça fait ça au lieu de ça et je ne comprends pas pourquoi".
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Messages : 30

Inscription : 28 mai 2020 08:56

Profil de l'utilisateur : Élève de lycée

Re: configuration électronique Python

Message par Alizee76 » 09 nov. 2020 21:35

Alors quand j’exécutais mon programme a la fin il m’affichait « l is not defined » mais sinon grâce à l’explication de Hibiscus plus haut je comprends mieux mes erreurs dans ma boucle. C’était pour cela que je n’aboutissais à rien enfin que mon programme ne fonctionnait pas. Merci !

Messages : 9679

Inscription : 30 juil. 2008 16:59

Profil de l'utilisateur : Élève de lycée

Re: configuration électronique Python

Message par fakbill » 10 nov. 2020 14:57

a la fin il m’affichait « l is not defined »
Pas exactement ;)
Il plantait en affichant non seulement le fait que l n'était pas défini mais aussi le numéro de la ligne ou le problème se situait.
l n'est pas défini? ok donc je regarde si mon programme parle de 'l' avant la ligne en question. Si la réponse est "non" alors le problème est clair (certains experts diront qu'avec eval ou exec on peut...mais ce n'est pas la question à ce niveau ;) !)
Si la réponse est "oui" alors c'est que la ligne ou on parle de l plus haut n'est pas exécutée.
Tu peux soit rajouter des print pour comprendre ce qui se passe (après avoir relu le code) soit, si ça t'aide, lancer le debugger et suivre l'execution de ton programme pas à pas.
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Messages : 30

Inscription : 28 mai 2020 08:56

Profil de l'utilisateur : Élève de lycée

Re: configuration électronique Python

Message par Alizee76 » 11 nov. 2020 10:13

Hibiscus a écrit :
08 nov. 2020 20:59
SPOILER:
C'est a dire, que tu print, pour une valeur de n donnee, la plus haute valeur de l acceptable et qu'ensuite tu augmentes n, tu regardes si tu as un (ou plus) l qui correspond, si oui, c'est pareil qu'avant, sinon tu repasses une nouvelle fois dans la boucle.

Je ne comprends pas avec quelles instructions afficher la plus haute valeur de l acceptable? Enfin je pense que je ne vois pas quelles conditions utiliser! Pour moi on doit utiliser

symbole_l=‘spdf  ‘
m=symbole_l[0]
ind=0
l=ind
n=1
While n+l<8:
-— For i in range (0,len(symbole_l)):
———-if n+l==n: 
—————-m=symbole_l
-—————Print (n,m)
————-—n=n+1
———-Else:
???



Et lorsque j’exécute mon programme, il affiche le première ligne et me dit « expected an indented block ». Ça veut dire que j’ai un problème d’indentation mais j’ai oublié aucune indentation selon moi je ne comprends pas.

Messages : 294

Inscription : 27 oct. 2017 10:55

Profil de l'utilisateur : Professionnel

Re: configuration électronique Python

Message par Hibiscus » 11 nov. 2020 11:40

- A quoi sert d'avoir "m" pour la lettre de la couche spdf, l pour le numero de l'indice de la couche (0,1,2,3), i.e, pour le nombre quantique secondaire, et "ind" en plus ? Ca en fait un de trop.

Ta premiere branche dans ta boucle for est visiblement de verifier que n+l=n, i.e, que l=0.
c'est vrai au debut, puisque tu initialises l a 0.
Et ensuite, tu augmentes n, avec ta ligne n=n+1.
Et l, dans tout ca ? Il ne peut pas rester a 0 perpetuellement.

J'ai l'impression que c'est moins un probleme de programmation, mais d'algorithmique/logique, qui te gene.
A part le "n+l croissants, puis n croissants", as-tu bien compris la regle de klechkowski ?
Le pourquoi et comment, l'ordre attendu est 1s2s2p3s3p4s3d4p, etc..
Masséna (PC*) -- X15 -- Spatial.

Messages : 30

Inscription : 28 mai 2020 08:56

Profil de l'utilisateur : Élève de lycée

Re: configuration électronique Python

Message par Alizee76 » 11 nov. 2020 11:55

Oui je pense que c’est un problème de logique/algorithmique que j’ai car j’ai essayé dans un premier temps de faire un programme affichant (n,l) c’est à dire (1,0),(2,0),(2,1) en ne faisant pas apparaître la liste pour ensuite dans un deuxième temps utiliser la liste ‘spdf’ mais je n’y arrive même pas!
Mais sinon oui j’ai compris le pourquoi et comment de l’ordre des sous couches , j’ai même regardé plusieurs vidéos sur YouTube pour voir si j’avais bien compris mais rien n’y fait! Je suis perdue!

Messages : 30

Inscription : 28 mai 2020 08:56

Profil de l'utilisateur : Élève de lycée

Re: configuration électronique Python

Message par Alizee76 » 11 nov. 2020 15:19

Un grand merci à tout le monde pour vos réponses, après maintes et maintes reprises dans mon programme j’ai enfin réussi à aboutir !!!

Répondre