de cent20 » 27 Fév 2020, 13:48
Bisam a écrit:Quelques commentaires sur le script :
- Pourquoi utiliser
- Code: Tout sélectionner
int(i/100)
au lieu de - Code: Tout sélectionner
i//100
?
Le deuxième est plus précis, puisque ne passant pas par les nombres réels et demande probablement moins de mémoire également (car les entiers considérés dans le script sont petits) ! - On peut avantageusement remplacer
- Code: Tout sélectionner
i = m[x][y] - m[x][y]%100
m[x][y] = i + 42
if i >= 100: v = int(i/100); t(str(v),13+20*(x),23+20*(y),c[v],c[0])
par - Code: Tout sélectionner
v=m[x][y]//100
m[x][y] = 100*v + 42
if v: t(str(v),13+20*(x),23+20*(y),c[v],c[0])
- Plus loin, on trouve
- Code: Tout sélectionner
if (v-42)%100 == 0: gps(x,y,0)
else: gps(x,y,9)
. J'aurais plutôt écrit : - Code: Tout sélectionner
gps(x,y, 0 if v%100 == 42 else 9)
à la place de ces deux lignes. - Tu peux utiliser la fonction d'unpacking de Python pour simplifier certaines lignes. Combiné avec les remarques ci-dessus,
- Code: Tout sélectionner
def survol():
x, y = p[1][0], p[1][1]
v = m[x][y]
gps(x,y)
# t(str(int(v/100)),20,2)
x, y = p[0][0], p[0][1]
v = m[x][y]
if p[1][0]!=x or p[1][1]!=y:
if (v-42)%100==0:gps(x,y,0)
else:gps(x,y,9)
del p[0]
deviendrait
- Code: Tout sélectionner
def survol():
x, y = p[1]
v = m[x][y]
gps(x,y)
# t(str(v//100),20,2)
x, y = p[0]
v = m[x][y]
if p[1]!=(x,y):
gps(x,y,0 if v%100==42 else 9)
del p[0]
- On peut certainement remplacer la liste p de positions par deux ou trois couples de nombres : cela prendrait BEAUCOUP moins de place en mémoire.
Voilà, c'est tout pour les remarques qui ne témoignent que du fait que tu ne penses pas à utiliser le "sucre syntaxique" de Python... mais absolument pas de la réflexion et du boulot formidable qu'il y a derrière ce script.
Par ailleurs, l'explication sur ton site est plutôt remarquable et très pédagogique.
1. Parce que je n'ai jamais utilisé l'opérateur // jusqu'à maintenant, mais oui il est évident que c'est plus propre.
2. Jolie astuce
- Code: Tout sélectionner
if v:
qui traite v comme un booléen !
3.
- Code: Tout sélectionner
0 if v%100 == 42 else 9
ça m'impressionne toujours cette souplesse que permet python.
4. là encore, je ne connaissais pas cette fonction d'unpacking faute de l'avoir exploité précédemment.
5. Vu que ma liste ne contient jamais plus de 2 élément, je pensais que c'était neutre en utilisation mémoire mais au vu de la discussion qui a suivi je comprend qu'ajouter / enlever des élèments dans une liste est une mauvaise idée.
Bref j'intègre toutes ses modifications dans quelques minutes.
Merci de tes explications pointues et précise !