Aller au contenu

Posez des questions à l'utilisateur

Maintenant, on aimerait bien avoir des programmes qui ne s'exécutent pas toujours de la même manière, mais réagissent à ce que leur dit l'utilisateur. Et bien on va voir comment faire ça tout de suite !

Le mot clé input

La ligne de code nom = input("Quel est votre nom ? ") pose la question "Quel est votre nom ? " à l'utilisateur, interromp le programme jusqu'à ce qu'il appuie sur entrée, puis stocke dans la variable nom la valeur tapée par l'utilisateur.

Copiez-collez donc ce code sur votre pc, exécutez le et regardez ce qu'il se passe.

nom = input("Quel est votre nom ? ")
print(f"Vous vous appelez {nom}.")
Un exemple d'exécution est par exemple

Quel est votre nom ? Gertrude
Vous vous appelez Gertrude.

Conversion de types

Ok, mais maintenant imaginons qu'on veuille coder un programme qui demande son age à l'utilisateur, puis lui dit l'age qu'il aura dans 5 ans.

La manière la plus simple de le faire serait la suivante :

age = input("Quel est votre age ? ")
print(f"Dans 5 ans, vous aurez {age+5} ans.")

Mais, si vous exécutez ce programme, vous serez alors confrontés à l'erreur suivante :

TypeError: can only concatenate str (not "int") to str

Pas de panique à bord, c'est complètement normal.

En effet, pour le programme, le résultat d'un input est toujours un string (càd une chaîne de caractère), peu importe que l'on ait rentré ce qui à nos yeux devrait être un nombre.

Heureusement, on peut convertir un string en int, en utilisant int(string_a_convertir).

Ce qui nous donne donc le programme suivant, qui devrait s'exécuter normalement.

age = int(input("Quel est votre age ? "))   #age est maintenant un int et plus un string
print(f"Dans 5 ans, vous aurez {age+5} ans.")

De manière générale, on peut (essayer de) convertir n'importe quel type de base dans n'importe quel autre type de base à l'aide des fonctions suivantes :

Fonction Description Exemple Résultat
int(x) Convertit x en entier (si possible) int("42") 42
float(x) Convertit x en nombre à virgule float("3.14") 3.14
str(x) Convertit x en chaîne de caractères str(42) "42"
bool(x) Convertit x en booléen bool(0) / bool(5) / bool("") False / True / False

Remarquez que la fonction bool a l'air d'avoir des résultats un peu étranges. On en reparlera plus tard...

Quizz

Voici un programme Python

a = input()
b = int(input())
print(a+b)
Le programme s'exécute-t-il sans erreurs ?
- Oui
- *Non
> Comme a est de type string et b de type int, on ne peut pas les additioner, et donc Python renvoie une erreur.

Exercice pratique

Codez un programme qui demande à un utilisateur combien il a de pommes, poires et carottes, puis qui écrit combien il a de fruit en tout.

Attention ! La carotte n'est pas un fruit.

En résumé

Vous savez maintenant

  • Poser des questions à l'utilisateur avec input()
  • Convertir ses réponses en entier si nécessaire

Mais nos programmes restent assez simples et linéaires dans leurs exécutions. On va bientôt changer tout ça !