Correction des exercices du Chapitre 5, Tout se complique....
On remarquera dans ce programme l'utilisation de procédures et fonctions :
Elles ne sont pas là pour éviter de répêter le même code à plusieurs endroits du programme (chaque fonction ou procédure n'est utilisée qu'une fois), ce qui est une des principales raisons possibles de leur utilisation.
Ici elles sont utilisées pour rendre le code plus clair :
le corps
du programme est plus
facile à lire et à comprendre, car il est plus court.
Vous pouvez comparer avec la version suivante, sans fonction ni procédure, mono-bloc et plus difficile à analyser :
import curses
ecran = curses.initscr()
curses.noecho()
ecran.keypad(1)
ecran.clear()
ymax,xmax = ecran.getmaxyx()
x = 20
y = 20
while 1:
if x > xmax-1 : x = xmax-1
if x < 0 : x=0
if y > ymax-1 : y = ymax-1
if y < 0 : y=0
ecran.move(y,x)
c = ecran.getch()
if c == ord('q') : break
elif c == ord(' ') :
if ecran.inch(y,x) == ord(' '):
ecran.addch (y,x,'*')
else:
ecran.addch (y,x,' ')
ecran.move (y,x)
else :
if c == curses.KEY_DOWN : y += 1
elif c == curses.KEY_UP : y -= 1
elif c == curses.KEY_LEFT : x -= 1
elif c == curses.KEY_RIGHT : x += 1
curses.echo()
curses.endwin()
|
Cette version reste encore presque facile à comprendre (ce programme n'est pas très long), mais on commence à avoir du mal à y trouver une décomposition logique, alors que c'était immédiat dans la première version.
import random
import curses
import math
ecran = curses.initscr()
curses.noecho()
ecran.nodelay(1)
tirages=0
disque=0
while 1:
if ecran.getch() == ord('q') : break
x = random.random()
y = random.random()
tirages += 1
if x*x+y*y <= 1:
disque += 1
monpi = 4.0*disque/tirages
ecran.clear()
ecran.addstr(5,5,str(tirages)+" tirages")
ecran.addstr(6,5,"pi="+str(monpi))
ecran.addstr(7,5,"ecart="+str(abs(monpi-math.pi)))
curses.echo()
curses.endwin()
|