Bonjour,
tu as des idées fausses au départ sur la signification générale de la syntaxe Python
et de la programmation en général.
def pop () définit (def) une fonction que l'on a choisi de nommer pop
une fonction prend généralement des paramètres en entrées
ces paramètres sont ce que l'on met entre les parenthèses
chaque fois qu'on appellera (utilisera) la fonction, elle fera ses opérations à partir des valeurs des paramètres qu'on lui a donné à ce moment là (au moment de l'appel)
ici cette fonction n'a aucune entrée donc on ne met rien dans les parenthèses
tout ce dont elle a besoin pour fonctionner est fabriqué de toute pièces par la fonction elle même dans le "corps" de la fonction
avec d'autres langages (en C par exemple) le corps de la fonction est matérialisé par des accolades, voire dans d'autres langages encore par des mots clés "debut" "fin" explicites
en Python, c'est défini par les deux point qui suivent le def pop() et par le jeu de l'indentation (les espaces en début de ligne) :
def pop():
bla
bla
bla
dernière opération de la fonction
ce qui suit (sans espaces devant) est en dehors de la définition de la fonction
que fait cette fonction (que fera-t-elle chaque fois qu'on l'appellera)
ell définit et met des valeurs dans ses propres variables à elle :
n = 0
M = 0
elle exécute une boucle (for= pour) dans laquelle elle va répéter des opérations effectuées successivement avec autant de valeurs qu'il faut de la variable qu'elle crée qui a été appelée i (choix de celui qui a décidé de l'appeler comme ça, i comme "indice" dans la boucle)
pour chacune de ces valeurs de i dans l'intervalle (range) de 0 à 24
donc successivement avec i valant 0, puis 1, puis 2 etc
on va effectuer ce qui suit, qui là encore est "délimité" par le jeu de l'indentation
donc des espaces supplémentaires
def pop():
n=0
M=0
for .. :
if ....
etc
en dehors du for
ce qui suit (sans espaces devant) est en dehors de la définition de la fonction
et de même pour le "if " (si) :
ce qui doit être fait si la condition est vraie à cet instant (rappelons que c'est répété pour chacune des valeurs de i !)
est encore une fois délimité par une indentation supplémentaire
etc
parmi les calculs effectués par la fonction pop(), se trouve un ou des appels à la fonction P(k)
celle là elle prend un paramètre d'appel, une valeur d'entrée qui est ce qu'on mettra à la place de k lors de l'appel
bien comprendre la différence fondamentale entre la définition d'une fonction et l'appel de cette fonction, son utilisation
et quand on appelle P(i) la fonction P(k) calculera ce qu'elle doit calculer avec comme valeur de sa variable k la valeur de i à cet instant
donc successivement 0, 1, 2 etc au fur et à mesure des appels successifs
elle fait son calcul dans une variable y qui lui est propre
et renvoie comme résultat (return) la valeur de cette varoable y à cet instant
bref P(i) est cette valeur
en espérant avoir clarifié certains points, ceux qui ont amené à des erreurs fondamentales comme la simple idée de vouloir écrire pop(i) ou y à l'extérieur de la fonction P(x) et la codufos entre i (variable interne de la fonction pop() et k (désignation du paramètre d'entrée de la fonction P(k))
nota :
tel quel ce programme ne fait donc rien du tout : il se contente de définir des fonctions, ce qu'il faudra faire.
pour en faire quelque chose il faut donc appeler (invoquer, exécuter) la fonction pop()
en tapant pop() en ligne de commande de la console Python