Quelques compléments

Pour développer un projet en autonomie, je vous encourage à revenir sur la méthode de Zelle exposée dans le (1.1).

Reste la question non abordée jusque là des intéractions de l’utilisateur avec votre programme. Ce que tout développeur doit prendre en considération.

Il existe de multiples façons de réaliser ces intéractions: un clique de souris, l’appui d’une touche du clavier, une réponse à une question posée … Dans la suite, je n’aborderai que ce dernier point.

La fonction input()

Sans plus attendre …

a) Dans la console Python, recopier et exécuter ce qui suit :

1
2
3
4
5
6
7
8
>>> prenom = input("Quel est votre prénom ?\n")
...
>>> age = input('Quel est votre âge ? Donner un nombre entier.\n')
...
>>> age += 1  # ceci est équivalent d'écrire: age = age + 1 (à privilégier)
>>> message = 'Bienvenue, {}. Tu vas donc avoir {} ans !'.format(prenom, age)
>>> print(message)
...

En tant qu’utilisateur lambda, vous n’avez pas commis aucune erreur, mais en tant qu’utilisateur plus aguerri, oui ! Avez vous repéré le point qui a provoqué ce message d’erreur ? La réponse est dans le message d’erreur ! La fonction input() retourne une chaîne de caractères (string), donc age (ligne 3) est donc une chaîne de caractères. Il est alors impossible par la suite de lui ajouter 1. On y apportera une correction pas la suite. Soyez patient !

C’est le travail du développeur (ici votre professeur préféré ! Plus tard, ce sera vous !) qui incombe de prévoir le bon usage que va faire l’utilisateur de son programme. Vous pensez peut être à l’instruction assert ? Essayons !

b) Dans la console Python, recopier et exécuter ce qui suit :

3
4
5
6
>>> age = input('Quel est votre âge ? Donner un nombre entier.\n')
...
>>> assert age in {int}
>>> age += 1

En tant qu’utilisateur lambda, cela vous plairez qu’un programme affiche un joli message d’erreur et s’interrompte brusquement ? L’instruction assert doit être réservé au développeur lors du développement d’un programme: l’utilisateur ne doit pas être considéré comme un bêta testeur sauf si cela est prévu.

Utilisons la fonction (déjà vue et utilisée) int() qui retourne le paramètre d’entrée sous la forme d’un nombre entier.

c) Dans la console Python, recopier et exécuter ce qui suit :

1
2
3
4
5
6
7
8
>>> prenom = input("Quel est votre prénom ?\n")
...
>>> age = int(input('Quel est votre âge ? Donner un nombre entier.\n'))  # ajout de int() 
...
>>> age += 1
>>> message = 'Bienvenue, {}. Tu vas donc avoir {} ans !'.format(prenom, age)
>>> print(message)
...

Les blocs try et except

d) Dans la console Python, exécuter de nouveau les mêmes instructions que précédemment mais cette fois avec 17 ans comme réponse à la première demande.
Oui ! Je vous demande de ne pas tenir compte pour une fois de la consigne donnée dans le texte présent dans le input(). Ce n’est pas bien !

Comme attendu, cela provoque une erreur du fait de non respect de l’usage attendu par l’utilisateur (est ce entièrement sa faute ?). Là encore, c’est au développeur de prévoir le non respect (volontaire ou non) de la consigne.

C’est là que vont intervenir le try et except en remplaçant la ligne 3 par ce qui suit. Noter la présence de : en fin de ligne pour ouvrir les blocs.

try:
    age = int(input('Quel est votre âge ? Donner un nombre entier.\n'))
except:
    print('Veuillez à donner un nombre entier.')
    age = int(input('Quel est votre âge ? Donner un nombre entier.\n'))

ou mieux encore en spécifiant l’erreur rencontrée si on le souhaite.

try:
    age = int(input('Quel est votre âge ? Donner un nombre entier.\n'))
except ValueError:
    print('Veuillez à donner un nombre entier.')
    age = int(input('Quel est votre âge ? Donner un nombre entier.\n'))

On pourrait envisager plusieurs blocs except différents en tenant compte de du type d’erreur recontrée par l’utilisateur.

Finalement les instructions à recopier et à exécuter au fur et à mesure sont:

>>> prenom = input("Quel est votre prénom ?\n")
...
>>> try:
...     age = int(input('Quel est votre âge ? Donner un nombre entier.\n'))
... except ValueError:
...     print('Veuillez à donner un nombre entier.')
...     age = int(input('Quel est votre âge ? Donner un nombre entier.\n'))

...
>>> age += 1
>>> message = 'Bienvenue, {}. Tu vas donc avoir {} ans !'.format(prenom, age)
>>> print(message)
...

À retenir (pour le futur développeur que vous êtes ou serez)
Il ne doit pas être nécessaire pour l’utilisateur final de connaître toutes les fonctions qui se trouvent dans votre programme ou de connaître leurs éventuels restrictions d’usage.
Désormais vous êtes le développeur ! À vous de tout prévoir !