by cent20 » 27 Feb 2020, 13:48
Bisam wrote:Quelques commentaires sur le script :
- Pourquoi utiliser
- Code: Select all
int(i/100)
au lieu de - Code: Select all
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: Select all
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: Select all
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: Select all
if (v-42)%100 == 0: gps(x,y,0)
else: gps(x,y,9)
. J'aurais plutôt écrit : - Code: Select all
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: Select all
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: Select all
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: Select all
if v:
qui traite v comme un booléen !
3.
- Code: Select all
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 !