Programmer en Python en 2nde

Saisie au clavier et affichage sur écran

Les valeurs saisies au clavier par l'utilisateur et les résultats affichés à l'écran sont très utiles pour tester diverses entrées et/ou visualiser la valeur produite lors de la programmation d'un algorithme. Le document ressources 2017 semble cependant vouloir insister sur la non-équivalence "entrée d'algorithme - saisie clavier" et "valeur retournée par l'algorithme - affichage écran" :

On notera que les notions d’entrées-sorties input() et print() ne sont pas développées dans ce document : elles ne relèvent pas de la pensée algorithmique et l’accent mis par le programme sur la notion de fonction permet de s’en libérer complètement.

Au cours de cette formation, nous ferons donc bien la distinction entre :

  • la valeur renvoyée par un algorithme (la sortie de l'algorithme);
  • et un résultat (ou un message) affiché par un programme informatique.

Saisie clavier : input()

Saisir une chaîne de caractères

La fonction input() permet de demander à l'utilisateur de saisir une chaîne de caractères au clavier. Il ne faut pas oublier d'affecter la valeur ainsi saisie à une variable.

Testez le programme suivant :


nom = input("Tapez votre nom : ")
print("Bonjour ", nom, " !")

La première ligne affiche le message "Tapez votre nom : " à l'écran puis stocke la chaîne entrée par l'utilisateur dans la variable nom.

La seconde ligne affiche alors "Bonjour " suivi du nom et d'un point d'exclamation.

Saisir un entier

On utilise également input() pour que l'utilisateur saisisse un entier au clavier. Mais comme input() renvoie nécessairement une chaîne, il faut utiliser une instruction de conversion de type.

Exemple :


n = int(input("Saisissez un entier : "))
print("Le type de la variable n :", type(n)))

Grâce à la fonction int(), n est bien un entier.

Il faut bien sûr que l'utilisateur saisisse effectivement un entier (écrit avec des chiffres). S'il rentre par exemple le mot deux, cela générera une erreur.

Saisir un réel

De façon analogue, on utilisera la fonction de conversion de type float() :


x = float(input("Saisissez un flottant : "))
print("Le type de la variable x :", type(x))
print(x)

Si l'utilisateur tape 2 sur le clavier, vous pourrez constater que la dernière ligne (print(x)) affichera 2.0 à l'écran. Le contenu de la variable x est bien de type float.

Saisir une opération

Si l'utilisateur saisit par exemple 3/4 ou 3+4, il ne s'agit plus d'un float ou d'un int (bien que le résultat de l'opération soit un float ou un int).

Dans ce cas, on pourra utiliser la fonction eval().


x = eval(input("Saisir par exemple 3/4 : "))
print("Le type de la variable x :", type(x))
print(x)

On obtient :

Entrez par exemple 3/4 : 3/4
Le type de la variable x : <class 'float'>
0.75

Affichage à l'écran : print()

Pour afficher un résultat ou un message à l'écran, on utilise la fonction print().

print() et virgule

On peut utiliser la virgule pour alterner message et valeur de variable.


nom = input("Tapez votre nom : ")
age = int(input("Saisissez votre âge : "))
taille = float(input("Saisissez votre taille (en mètres) : "))

print("Vous vous appelez ", nom, ". Vous avez ", age, " ans et vous mesurez ", taille, " m.")

print() et .format()

On peut utiliser la fonction .format() qui permet d'écrire un texte moins haché en insérant le contenu des variables dans le texte à afficher :


nom = input("Tapez votre nom : ")
age = int(input("Saisissez votre âge : "))
taille = float(input("Saisissez votre taille (en mètres) : "))

print("Vous vous appelez {}. Vous avez {} ans et vous mesurez {} m.".format(nom, age, taille))

La première accolade contient la valeur du premier paramètre de la fonction format() (ici nom), la seconde accolade affichera la valeur du second paramètre, ...

On peut également indiquer des références explicites :


nom = input("Tapez votre nom : ")
age = int(input("Saisissez votre âge : "))
taille = float(input("Saisissez votre taille (en mètres) : "))

print("Vous vous appelez {1}. Vous avez {0} ans et vous mesurez {2} m.\nAu revoir {1}.".format( age, nom, taille))

L'accolade {0} sera remplacée par la valeur du premier paramètre (ici age), l'accolade {1} sera remplacée par la valeur du second paramètre (ici nom). Et la valeur d'une même variable peut être utilisée plusieurs fois.

Documentation python sur la fonction format().

print() et f-string

À partir de la version 3.6 de Python, on dispose également des f-strings qui permettent des affichages de résultat encore plus lisibles.

Un exemple :


age = 48
nom = "Schmoll"
profession = "voyageur dans le temps"

print(f"{nom} est âgé de {age} ans et exerce la profession de {profession}.")
print(f"... il a maintenant rajeuni et son âge est {age/6} ans.")

On obtient :

Schmoll est âgé de 48 ans et exerce la profession de voyageur dans le temps.
... il a maintenant rajeuni et son âge est 8.0 ans.

Si l'exécution de ce code ne fonctionne pas sur votre machine, vérifiez votre version de Python.

  • print() et concaténation Plus tard !

On peut également concaténer des chaînes (en transformant en chaîne, grâce à la fonction str(), les variables qui n'en sont pas).


nom = input("Tapez votre nom : ")
age = int(input("Saisissez votre âge : "))
 
print("Vous vous appelez " + nom + ". Vous avez " + str(age) + " ans.")

Moyenne

Guido aimerait écrire un script lui permettant d'actualiser la moyenne de ses notes.

A chaque nouvelle note de contrôle, son script doit :

  1. Demander la moyenne avant cette nouvelle note (que Guido connaît puisqu'il calcule sa nouvelle moyenne à chaque nouvelle note).
  2. Demander le nombre de notes avant cette nouvelle note.
  3. Demander la nouvelle note.
  4. Afficher la nouvelle moyenne.

Écrire un tel script Python.

  • Une solution

n = int(input("Saisir le nombre de notes précédentes : "))
m = float(input("Saisir la moyenne avec ces notes : "))
nv = float(input("Saisir la nouvelle note : "))

nv_moyenne = (n*m + nv)/(n+1)
print("La nouvelle moyenne est {:.2f}.".format(nv_moyenne))

:.2f permet un formatage (deux décimales) de l'affichage du résultat.

Des secondes aux heures, minutes, secondes

Écrire un script Python demandant à l'utilisateur un nombre entier de secondes et transformant le résultat en heures, minutes, secondes.

  • Algorithme
  • Une solution

s désigne un nombre entier de secondes.


h ← quotient de la division euclidienne de s par 3600
s ← reste de la division euclidienne de s par 3600
m ← quotient de la division euclidienne de s par 60
s ← reste de la division euclidienne de s par 60

En fin d'algorithme, h est le nombre entier d'heures contenues dans le nombre de secondes initial, m est le nombre entier de minutes contenu dans le nombre initial de secondes (après retrait des h heures) et s désigne le nombre entier de secondes restantes.


s = int(input("Saisir un nombre entier de secondes : "))

h = s//3600
s = s%3600
m = s//60
s = s%60

print(" {} h, {} min et {} s.".format(h, m, s))