You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Je me suis rendue compte que la version de snake.py (avec les modifications du retour du serpent) que j'avais commit茅 脿 la fin de la s茅ance de mercredi ne fonctionnait pas. Je l'ai donc modifi茅 et j'ai re commit tout 脿 l'heure.
Mon souci, c'est que pour que cela fonctionne, j'ai d没 ajouter "global snake", "global fruit", "global direction" au d茅but de presque chaque fonction (ce qui est tr猫s moche j'imagine).
Les programmeurs Python n'aiment effectivement pas beaucoup utiliser le mot-cl茅 global quand il est possible de faire autrement. Cela implique que leurs fonctions ont des effets de bords (馃嚭馃嚫 side-effects ; cf Wikipedia) sur le reste du programme et il peut 锚tre difficile de comprendre et de tester un tel code.
Comment puis-je faire autrement ? Est-ce que c'est parce que je n'initialise pas snake, fruit et direction au bon endroit dans le code ?
Non, ce n'est pas li茅 au lieu d'initialisation des variables a priori. Plusieurs variantes possibles :
鈩癸笍 Remarque. On modifie la valeur de la variable state dans move_snake, mais pas son identit茅. Il est donc inutile de d茅clarer state globale.
鈿狅笍 Dans ce code, la fonction snake a toujours un effet de bord sur le contenu des variables globales (ici snake) ; il faut lire attentivement le code pour s'en rendre compte (d'autant que maintenant, il n'y a m锚me plus le mot-cl茅 global pour nous faciliter le rep茅rage de l'effet de bord !!!).
Style de programmation fonctionnel
On peut choisir de stocker tout l'茅tat du jeu dans une unique variable globale non (n茅cessairement) modifiable, par exemple un n-uplet, de le passer explicitement comme argument 脿 la fonction move_snake et de r茅cup茅rer la valeur mise 脿 jour en sortie :
Dans ce code, la fonction move_snake n'a aucun effet de bord ; sa seule action est de calculer une nouvelle valeur de l'茅tat qu'elle fournit comme valeur de retour.
Pour des raisons de lisibilit茅, il peut 锚tre int茅ressant de substituer un "n-uplet nomm茅" (namedtuple) au n-uplet qui d茅crit l'茅tat, cf par exemple https://realpython.com/python-namedtuple/.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
@clemence64300 茅crit
(cf. https://github.com/clemence64300/TP-AP/blob/6339cd32b549402c379db4a07014f060a965d3a6/snake.py)
Les programmeurs Python n'aiment effectivement pas beaucoup utiliser le mot-cl茅
globalquand il est possible de faire autrement. Cela implique que leurs fonctions ont des effets de bords (馃嚭馃嚫 side-effects ; cf Wikipedia) sur le reste du programme et il peut 锚tre difficile de comprendre et de tester un tel code.Non, ce n'est pas li茅 au lieu d'initialisation des variables a priori. Plusieurs variantes possibles :
Changement cosm茅tique
Sans rien changer d'autre, on peut r茅duire
en
Aggr茅gation
On peut choisir de stocker tout l'茅tat du jeu dans une unique variable globale modifiable, par exemple un dictionnaire :
puis transformer
en
鈩癸笍 Remarque. On modifie la valeur de la variable
statedansmove_snake, mais pas son identit茅. Il est donc inutile de d茅clarerstateglobale.snakea toujours un effet de bord sur le contenu des variables globales (icisnake) ; il faut lire attentivement le code pour s'en rendre compte (d'autant que maintenant, il n'y a m锚me plus le mot-cl茅globalpour nous faciliter le rep茅rage de l'effet de bord !!!).Style de programmation fonctionnel
On peut choisir de stocker tout l'茅tat du jeu dans une unique variable globale non (n茅cessairement) modifiable, par exemple un n-uplet, de le passer explicitement comme argument 脿 la fonction
move_snakeet de r茅cup茅rer la valeur mise 脿 jour en sortie :La fonction
move_snakedevientet la boucle g茅n茅rale d'ex茅cution quelque chose comme
鈩癸笍 Remarques
Dans ce code, la fonction
move_snaken'a aucun effet de bord ; sa seule action est de calculer une nouvelle valeur de l'茅tat qu'elle fournit comme valeur de retour.Pour des raisons de lisibilit茅, il peut 锚tre int茅ressant de substituer un "n-uplet nomm茅" (
namedtuple) au n-uplet qui d茅crit l'茅tat, cf par exemple https://realpython.com/python-namedtuple/.All reactions