L'intérêt d'un programme est d'utiliser différentes données pour effectuer un même traitement. Il faudra donc fournir des données variables.
Il est naturel d'envisager un échange avec un utilisateur, le programme pose une question et traite la donnée. C'est la manière dont vous utilisez les programmes avec des interfaces graphiques.
Python propose une fonction basique pour cela, input()
. La fonction input
attend une saisie de l'utilisateur et retourne cette saisie comme une donnée de type chaine de caractères. Pensez donc à la transtyper au besoin.
name = input('Quel est votre langage favori ? ')
print(name)
year = int(input('Quand a-t-il été créé ? ')
print(year)
Cette fonction permet donc de créer une interface dans un terminal (invite de commandes). Nous ne nous attarderons pas sur l'utilisation de cette fonction. Pour exécuter un programme avec différentes valeurs dans le cadre de Jupyter, il est plus simple de dédier une cellule à la déclaration des variables et modifier les valeurs avant chaque exécution.
Ainsi, cette première cellule déclare les données paramètres du programme
In [ ]:
name = "Python"
year = 1989
Et la ou les cellule(s) suivante(s) traitent ces données (les dates seront vues ultérieurement).
In [ ]:
import datetime as dt
print(f"{name} a été créé en {year}")
print(f"C'était il y a {dt.datetime.now().year - year} ans")
Notez qu'ainsi, vous pouvez écrire un programme dans un Notebook, le paramétrer au besoin et l'exécuter entièrement grâce à l'entrée du menu Cell/Run all
.
Jusqu'ici, nous n'avons affiché que la donnée générée mais il est souvent plus adapté de la mettre en forme dans une chaine de caractères. L'outil le plus efficace est la méthode format()
des chaines de caractères :
pref_string = "Mon langage favori est {}"
print(pref_string.format(name))
Les accolades permettent de mettre en forme les données à afficher. Le microlangage étant assez complexe, je vous invite à consulter la documentation pour les fonctionnalités exhaustives.
On retiendra les plus courantes :
{1}
permet d'afficher le second élément de la liste des données.{:.2f}
permet d'afficher la donnée sous forme de réel avec deux chiffres après la virgule{:10}
réserve 10 espaces pour afficher la donnée{:10.2f}
réserve 10 espaces pour afficher un réel avec deux chiffres après la virgule{1:10.2f}
réserve 10 espaces pour afficher sous forme de réel avec deux chiffres après la virgule le second élément de la liste des données
### Exercices
Reprenons l'exercice sur la vitesse calculée précédemment et améliorons l'affichage en imposant deux chiffres après le point décimal.
In [ ]:
temps = 6.892
distance = 19.7
print("{:.2F}".format(distance / temps))
Affichez une phrase mettant en forme les noms et âge ( exemple : Yoda a 800 ans
) en utilisant les données saisies précédemment (n'oubliez pas que les variables affectées précédemment sont accessibles dans cette cellule).
In [ ]:
print("{} a {} ans".format(name, age))
Nous allons maintenant combiner traitement de données et affichage.
Il me reste 3 épisodes de 53 minutes de Jessica Jones à regarder.
In [ ]:
TIME_REMAINING = 'Il reste {}h{} à visionner.'
END_HOURE = 'Vous aurez fini de regarder vos émission à {}h{}'
EPISODE_DURATION = 53
total_time = 3 * EPISODE_DURATION
total_hours = total_time // 60
total_minutes = total_time % 60
print(TIME_REMAINING.format(total_hours, total_minutes))
end_hour = 20 * 60 + 42 + total_time
end_hour, end_minutes = divmod(end_hour, 60)
print(END_HOURE.format(end_hour, end_minutes))
Mais nous pouvons également utiliser les fonctions que nous avons créé jusqu'ici
In [ ]:
import wblib.helpers as h
total_time = h.duration_for(3, unit_duration=53)
total_hours, total_minutes = divmod(total_time, 60)
print(TIME_REMAINING.format(total_hours, total_minutes))
end_hour, end_minutes = divmod(h.to_minutes(20, 42) + total_time, 60)
print(END_HOURE.format(end_hour, end_minutes))
In [ ]: