Flash cards mise au point

Exercices sur la mise au point d'un programme

Flash card 1

script 1


a = 1
for i in range(3):
  print("i = {}, a = {}".format(i, a)
  a = 2 * a 

message d'exception

Pour le script 1 précédent:
Quel message d'exception est levé?

Choisir:
A- SyntaxError
B- IndentationError
C- NameError
D- AttributeError
E- IndexError

Réponse

Reponse A : SyntaxError
(à la ligne 3, il manque une parenthèse)

Flash card 2

script 2


v = 1
while v < 100:
  if v% 7 == 0:
    print(v, "est un multiple de 7")
    else:
    print(v, "n’est pas un multiple de 7")
  v = v + 1 

message d'exception

Pour le script 2 précédent:
Quel message d'exception est levé?

Choisir:
A- SyntaxError
B- IndentationError
C- NameError
D- AttributeError
E- IndexError

Réponse

Reponse B : IndentationError
(à la ligne 5)

Flash card 3

script 3


f = [0, 1, 0, 0, 0, 0, 0, 0, 0]
for i in range(0, 9):
  if i>0: f[i + 1] = f[i] + f[i - 1]  
print(f) 

message d'exception

Pour le script 1 précédent:
Quel message d'exception est levé?

Choisir:
A- SyntaxError
B- IndentationError
C- NameError
D- AttributeError
E- IndexError
F- il n'y a aucun message d'exception qui est levé.

Réponse

Reponse E : IndexError
(à la ligne 3, on ne pourra pas calculer f[i+1] pour i=8 car il n'y a pas de rang 9)

Flash card 4

Pour chacune des propositions, choisir VRAI ou FAUX.

Vrai/Faux

A- Une assertion échoue si l’expression booléenne qui suit le mot clé assert est fausse. Si elle est vraie, l’exécution continue sans erreur.
B- `assert div!=0, 'division par zero'` va stopper le programme et afficher 'division par zero' si div est différent de zero.
C- Le module unittest permet de vérifier si les exemples mis dans le docstring de la fonction sont justes, en les testant.
D- Dans un test du module unittest, lorsque l'on veut tester si 2 valeurs sont égales, on utilise la fonction assertEqual

Réponse

A- Vrai
B- Faux. Le programme stoppe si div est EGAL à zero.
C- Faux. C'est le module doctest qui peut le faire, pas unittest
D- Vrai

Flash card 5

script 4


def divise(a,b):
    return a/b
Si on execute l'instruction suivante: divise(10,0), la console affiche:

ZeroDivisionError      Traceback (most recent call last)
<ipython-input-30-8044e08140eb> in <module>
----> 1 print(divise(10,0))

<ipython-input-29-8590a608aa42> in divise(a, b)
      1 def divise(a,b):
----> 2     return a/b

ZeroDivisionError: division by zero
On procède différement: on appele maintenant cette fonction divise avec un mecanisme try-except:

mécanisme d'exception

Qu'est ce qui est affiché dans la console lorsque l'on execute le script suivant?

try:
   print(divise(10,0))
except ZeroDivisionError as err:
   print('Handling run-time error:', err)

Réponse

Handling run-time error: division by zero
Car l'exception est capturée et c'est le bloc except qui est executé.

Flash card 6

script 5


annee = input() # L'utilisateur saisit l'année

annee = int(annee) # On tente de convertir l'année

if annee<=0:
    raise ValueError("l'année saisie est négative ou nulle")
print('ca continu')

Levée d'exception avec RAISE

1. Dans la boite input, l'utilisateur entre la valeur -4. Le programme s'arrête t-il?
2. Quel est le message affiché en console ?

Réponses

1. Oui, le programme s'arrête: Raise lève une exception.
2. ValueError: l'année saisie est négative ou nulle

Flash card 7

script 6


annee = input() # L'utilisateur saisit l'année
try:
    annee = int(annee) # On tente de convertir l'année
    if annee<=0:
        raise ValueError("année saisie est négative ou nulle")
except ValueError:
    print("Valeur saisie invalide (l'année est peut-être négative, ou nulle).")

raise try except: Priorité?

1. Dans la boite input, l'utilisateur entre la valeur -9. Le programme s'arrête t-il?
2. Quel est le message affiché en console ?

Réponses

1. Non, le programme continue. Le mécanisme try-except capture l'exception et execute le bloc except. Puis continue.
2. Valeur saisie invalide (l'année est peut-être négative).

Relire le cours

Lien vers la page mise au point d'un programme