Afficher la chaîne "Bonjour" dans la console
print("Bonjour")
Bonjour
Remarques:
print est le nom de la fonction, et elle est déjà définie dans Python, c'est pour ça qu'on peut l'utiliser directement sans
avoir à la définir nous-même. Python contient de nombreuses fonctions pré-définies très utiles.
print() (avec les parenthèses en plus) est un appel de la fonction. print tout court, sans parenthèses, est
juste le nom de la fonction, c'est un identifiant, mais pas un appel
str. C'est aussi le paramètre EFFECTIF (concret) de l'appel à
print(). Les paramètres ne sont dits "formels" que lors de la définition d'une fonction (avec le mot-clé
def). Lors de l'appel on lui passe forcément des paramètres dits "effectifs".
Afficher le int 100 dans la console
print(100)
100
Remarques:
100 est une valeur littérale de type int.print() accepte comme paramètre une valeur de n'importe quel type de donnée, elle affichera toujours quelque
chose dans la console lors de l'éxécution du programme. Pour les types simples tels que str ou int, print()
affiche leur valeur littérale. Pour les valeurs de types plus complexes, comme ceux qu'on définira plus tard par exemple,
print() affichera une représentation moins utile par défaut.
Afficher la chaîne "Bonjour" suivie du int 100, sur la même ligne, avec un seul appel à la fonction print(). On veut deux façons de faire (deux versions) différentes.
print("Bonjour", 100)
print("Bonjour " + str(100))
Bonjour 100
Bonjour 100
Remarques:
print(), qui est un exemple de fonction qui accepte un nombre variable
de paramètres (0, 1, 2...).
print(). Il s'agit d'une expression constituée de l'opérateur de
concaténation de chaînes +, entouré donc de 2 str de chaque côté.
str et str, il faut donc convertir le int 100 en str
grâce à la fonction str(), qui prend un paramètre de n'importe quel type, et retournera sa valeur sous forme de
str.
"Bonjour ", entre le r et ", pour ne pas avoir le 100 collé au Bonjour
à l'affichage. Le premier "Bonjour" n'a pas besoin de cet espace car par défaut print() ajoute un espace à
l'affichage entre chaque paramètre.
Créer une fonction vide, puis l'exécuter 3 fois de suite.
def ma_fonction():
pass
ma_fonction()
ma_fonction()
ma_fonction()
L'instruction pass permet d'avoir un bloc de code vide, le corps d'une fonction étant un bloc de code, il doit au moins avoir
une ligne à l'intérieur, c'est une obligation de la syntaxe de Python.
Une erreur très fréquente que font les débutants et ceux qui ne comprennent pas le fonctionnement des fonctions est d'appeler
systématiquement la fonction print() en lui passant pour paramètre un appel à notre fonction, c'est à dire print(ma_fonction()).
Dans ce cas, vous ne comprenez pas qu'un appel de fonction n'a rien à voir avec l'affichage grâce à print(). L'affichage sert à
voir des choses apparaître dans la console, mais il peut se passer de nombreuses choses dans un programme qu'on n'a pas besoin d'afficher
tout le temps, par exemple l'appel d'une fonction.
Créer une fonction qui AFFICHE "Bonjour" et ne renvoie rien, puis l'exécuter 3 fois de suite de façon à voir affiché
dans la console 3x Bonjour.
Que se passe-t'il si on affiche le résultat d'un appel à la fonction? Pourquoi?
def ma_fonction():
print("Bonjour")
ma_fonction()
ma_fonction()
ma_fonction()
Bonjour
Bonjour
Bonjour
Remarquez qu'encore une fois on ne fait pas print(ma_fonction()) puisque la fonction contient déjà un appel à
print(). Si on fait quand même print(ma_fonction()) on verra d'abord s'afficher Bonjour, parce que
l'appel de la fonction est évalué en premier, puis la fonction retourne None, rappelez-vous une fonction retourne toujours un
et un seul objet. Si la fonction ne contient aucune instruction return, par défaut elle retourne l'objet None. Et
donc c'est cet objet que print() va afficher, on verra ainsi affiché None dans la console sous le
Bonjour précédent.
Créer une fonction qui ne fait que RETOURNER "Bonjour", puis l'exécuter 3 fois de suite de façon à voir affiché dans la
console 3x Bonjour.
def ma_fonction():
return "Bonjour"
print(ma_fonction())
print(ma_fonction())
print(ma_fonction())
Bonjour
Bonjour
Bonjour
Cette fois-ci, la fonction n'affiche rien lors de son exécution, donc on DOIT faire print(ma_fonction()). Il ne faut pas
confondre AFFICHER et RETOURNER, ce sont deux choses qui n'ont ABSOLUMENT rien à voir. Afficher affiche tout simplement, vous affichez ce
que vous voulez, en passant des paramètres à la fonction print(). Tandis que "retourner" est un mécanisme des fonctions qui
leur permet de se terminer tout en donnant un résultat au code qui l'a appelée. Ce code peut ensuite faire ce qu'il veut de ce résultat, des
nouveaux calculs dessus: le stocker dans une base de données, dans un fichier, l'envoyer par le réseau, ou dans le cas de cet exercice
l'afficher.
Créer une fonction qui RETOURNE "Bonjour" suivi d'un prénom qui sera passé en paramètre sous forme de str,
puis l'exécuter 3 fois de suite avec 3 prénoms différents de façon à voir affiché dans la console 3x Bonjour et un prénom différent à
chaque fois.
def ma_fonction(prénom):
return "Bonjour " + prénom
print(ma_fonction("Alice"))
print(ma_fonction("Toto"))
print(ma_fonction("Bidule"))
Bonjour Alice
Bonjour Toto
Bonjour Bidule
return n'est pas une fonction, mais une instruction, donc remarquez qu'on n'écrit pas return() avec des
parenthèses.
Une fonction retourne TOUJOURS UN et UN SEUL objet lorsqu'elle a fini son execution par return. Si aucun return
n'est présent dans son code, la fonction fait quand même return None par défaut implicitement après qu'elle a exécuté sa
dernière ligne de code. Cela implique que ce qui suit return est une expression qui peut être aussi longue qu'on veut, elle
s'évalue à un seul objet au final, et c'est cet objet que return va retourner. Dans cet exercice il s'agira de l'objet de type
str résultat de la concaténation entre deux autres objets str ("Bonjour " et l'objet passé en
paramètre).
On n'utilise plus de fonctions pour les questions suivantes, donc elles se font en dehors de toute fonction.
Demander à l'utilisateur d'entrer du texte dans la console, en lui affichant un message explicatif. Une seule ligne de code est suffisante. L'affichage doit se faire sur une seule ligne.
input("Entrez du texte: ")
Entrez du texte: Toto
Remarques:
input() est bloquant, ça signifie que le programme est en pause et input()
ne se termine pas, tant que l'utilisateur n'a pas appuyé sur la touche "Entrée".
input() est le message qui est affiché dans la console avant de laisser l'utilisateur écrire au
clavier, sur la même ligne.
"Entrez du texte: " sont nécessaires pour que le texte
de l'utilisateur ne soit pas collé au message explicatif, comme ceci par exemple Entrez du texteToto.
Même question, mais en plus affichez ensuite sur une seconde ligne dans la console, ce que l'utilisateur aura entré au clavier. Avant d'afficher le texte de l'utilisateur, on veut lire sur la même ligne: "Vous avez écrit:"
texte_utilisateur = input("Entrez du texte: ")
print("Vous avez écrit:", texte_utilisateur)
Entrez du texte: Toto
Vous avez écrit: Toto
Remarques:
texte_utilisateur est une variable, on la crée à la première ligne, et on l'initialise avec la valeur que retourne input().
input() est toujours de type str, et est le texte que l'utilisateur a entré au clavier.
Même question que la précédente, mais au lieu d'entrer du texte, demandez à l'utilisateur d'entrer un nombre entier. Affichez ce nombre ensuite. On ne considère pas les cas d'erreur où l'utilisateur ne rentrerait pas un nombre.
texte_utilisateur = input("Entrez un nombre: ")
nb_utilisateur = int(texte_utilisateur)
print("Votre nombre:", nb_utilisateur)
Entrez un nombre: 5
Votre nombre: 5
Remarques:
int est utilisé comme fonction, et permet de convertir le paramètre passé sous forme de
str, en int comme valeur de retour.
int() peut provoquer une erreur si on ne donne pas un NOMBRE sous forme de str, en paramètre.
nb_utilisateur contient le texte de l'utilisateur mais converti en int.Une version plus courte aurait pu être:
texte_utilisateur = input("Entrez un nombre: ")
print("Votre nombre:", int(texte_utilisateur))
Ou encore plus courte:
print("Votre nombre:", int(input("Entrez un nombre: ")))
Mais il faut trouver un équilibre entre la lisibilité du code et sa longueur. Un code trop long ou trop court est difficile à lire, donc à comprendre. Un code difficile à comprendre est susceptible de contenir davantage de bugs, il faut donc favoriser la lisibilité du code.
Même question que la précédente, mais cette fois en cas d'erreur, on affiche un message à l'utilisateur, et le programme s'arrête. Si aucune erreur, le programme fait la même chose que le précédent.
texte_utilisateur = input("Entrez un nombre: ")
try:
nb_utilisateur = int(texte_utilisateur)
print("Votre nombre:", nb_utilisateur)
except ValueError:
print(texte_utilisateur, "n'est pas un nombre.")
Entrez un nombre: 5
Votre nombre: 5
>
Entrez un nombre: u
u n'est pas un nombre.
Remarques:
try: et except:.
Dans un bloc try: dès qu'une ligne de code provoque une exception, le reste du try: est ignoré, et c'est le
bloc except: qui commence alors à être exécuté. Ainsi la ligne 4 ne s'excute QUE SI la ligne 3 s'exécute correctement, ce
qui est très important, car si la ligne 3 ne s'exécute pas correctement la variable nb_utilisateur n'existerait pas, et on
ne pourrait donc y faire référence à la ligne 4, on aurait une erreur de type NameError.
Donc on ne DOIT PAS faire ceci:
texte_utilisateur = input("Entrez un nombre: ")
try:
nb_utilisateur = int(texte_utilisateur)
# on a déplacé la ligne ici à la fin ↓
except ValueError:
print(texte_utilisateur, "n'est pas un nombre.")
# ERREUR la ligne dessous est toujours exécutée,
# car située après le try-except.
# Hors elle dépend du bon déroulement de la 3 :(
print("Votre nombre:", nb_utilisateur)
Même question que la précédente, mais cette fois on demande DEUX nombres à l'utilisateur, puis on affiche leur somme. On ignore les erreurs pour le moment (utilisateur n'entre pas un nombre).
nb1 = int(input("Ecrire nombre 1: "))
nb2 = int(input("Ecrire nombre 2: "))
somme = nb1 + nb2
print("Somme:", somme)
Ecrire nombre 1: 4
Ecrire nombre 2: 3
Somme: 7
Remarques:
👿 J'ai vu plusieurs étudiants faire ce genre de chose dans leurs programmes:
# OMG 😱
nb1 = input("Entrez nombre 1: ") and nb2 = input("Entrez nombre 2: ")
Le problème ici est l'utilisation du and qui ne sert CERTAINEMENT PAS à enchaîner les actions. Le mot "and" signifie
"et" an anglais certes, mais vous vous laissez piéger car vous l'interprétez comme "faire ceci ET PUIS faire cela ET PUIS faire
ça...".
Pour faire des actions supplémentaires, il suffit de sauter une ligne: une ligne une action.
# Mieux 😌
nb1 = input("Entrez nombre 1: ")
nb2 = input("Entrez nombre 2: ")
and est un opérateur booléen, tout comme or, not, ==, <,
>, etc... Révisez-les si vous les avez oubliés.
int() directement sur la valeur de retour de input(), sans stocker le texte de l'utilisateur
dans une variable intermédiaire comme dans les questions précédentes. C'est plus court et concis, mais vous pouvez utiliser la version
que vous préférez.
Version plus courte:
nb1 = int(input("Ecrire nombre 1: "))
nb2 = int(input("Ecrire nombre 2: "))
print("Somme:", nb1 + nb2)
Si on utilise plutôt la concaténation dans le print():
nb1 = int(input("Ecrire nombre 1: "))
nb2 = int(input("Ecrire nombre 2: "))
print("Somme: " + str(nb1 + nb2))
On peut tout faire sur une seule ligne de code, mais ce genre d'écriture n'est PAS récommandée, c'est trop peu lisible:
print("Somme:", int(input("Ecrire nombre 1: ")) + int(input("Ecrire nombre 2: ")))
Même question que la précédente, en prenant en compte les erreurs. Si l'utilisateur n'entre pas un nombre pour le 1er ou 2ème nombre, on affiche un message et le programme s'arrête. Si aucune erreur, le programme fait la même chose que le précédent: affiche la somme.
try:
nb1 = int(input("Ecrire nombre 1: "))
nb2 = int(input("Ecrire nombre 2: "))
somme = nb1 + nb2
print("Somme:", somme)
except ValueError:
print("Un des deux nombres n'est pas correct.")
Ecrire nombre 1: 4
Ecrire nombre 2: 3
Somme: 7
Ecrire nombre 1: a
Un des deux nombres n'est pas correct.
Ecrire nombre 1: 5
Ecrire nombre 2: a
Un des deux nombres n'est pas correct.
Remarques:
somme. La ligne 4 dépend des lignes 3 et 2 par les variables nb1 et
nb2. Donc elles doivent toutes être dans le try:.
Partant de la correction de l'exercice précédent, demander en plus à l'utilisateur l'opération qu'il / elle souhaite réaliser sur ses deux nombres: addition, soustraction, multiplication ou division. Afficher le résultat de l'opération demandée sous la forme suivante: valeur du nombre 1, suivie de l'opération (+, -, / ou *), suivie de la valeur du nombre 2, =, et enfin la valeur du résultat. Exemples: 5 - 3 = 2 ou encore 30 / 3 = 10. Toujours prendre en compte les erreurs (utilisateur n'a pas entré un nombre pour le 1er ou le 2eme nombre).
try:
nb1 = int(input("Entrez nombre 1: "))
nb2 = int(input("Entrez nombre 2: "))
op = input("Operation? (+,-,*,/): ")
if op == "+":
print(nb1, op, nb2, "=", nb1 + nb2)
elif op == "-":
print(nb1, op, nb2, "=", nb1 - nb2)
elif op == "*":
print(nb1, op, nb2, "=", nb1 * nb2)
elif op == "/":
print(nb1, op, nb2, "=", nb1 / nb2)
else:
print("Opération inconnue: ", op)
except ValueError:
print("Un des 2 nombres est incorrect.")
Entrez nombre 1: 4
Entrez nombre 2: 3
Operation? (+,-,*,/): +
4 + 3 = 7
Entrez nombre 1: 4
Entrez nombre 2: 3
Operation? (+,-,*,/): -
4 - 3 = 1
Entrez nombre 1: 4
Entrez nombre 2: 3
Operation? (+,-,*,/): *
4 * 3 = 12
Entrez nombre 1: 4
Entrez nombre 2: 3
Operation? (+,-,*,/): /
4 / 3 = 1.3333333333333333
Entrez nombre 1: 4
Entrez nombre 2: 3
Operation? (+,-,*,/): m
Opération inconnue: m
Entrez nombre 1: 5
Entrez nombre 2: m
Un des 2 nombres est incorrect.
Remarques:
👿 Il ne faut pas confondre = et ==, ils n'ont rien à voir!!!
= est une instruction, c'est une action, elle sert à affecter une valeur sous forme d'expression (forcément à droite du
=) à un identifiant/une variable (forcément à gauche du =).
Exemple: ma_variable = (5 + 8) * 4
= ne retourne AUCUNE valeur, ce n'est PAS une expression et donc ne peut PAS apparaître dans une expression.
== est un opérateur binaire booléen, qui compare si la valeur de l'opérande de gauche (une expression de n'importe quel
type) est égale à la valeur de l'opérande de droite (également une expression de n'importe quel type).
Exemple: (5+2) == (6+1)
Si les deux valeurs sont égales, alors l'opérateur == vaut True, sinon il vaut False. == forme donc une
expression, et peut ainsi apparaître dans des expressions plus grandes.
On utilise elif au lieu de else: suivi de if:. Cette écriture convient bien quand on a des
else-if à la suite comme dans cet exemple. Avec des else-if classiques les indentations successives et les sauts de ligne rendent la
lecture du code difficile.
Voici ce que ça donnerait avec des else-if classiques, l'écriture est plus longue mais les deux programmes font exactement la même chose:
try:
nb1 = int(input("Entrez nombre 1: "))
nb2 = int(input("Entrez nombre 2: "))
op = input("Operation? (+,-,*,/): ")
if op == "+":
print(nb1, op, nb2, "=", nb1 + nb2)
else:
if op == "-":
print(nb1, op, nb2, "=", nb1 - nb2)
else:
if op == "*":
print(nb1, op, nb2, "=", nb1 * nb2)
else:
if op == "/":
print(nb1, op, nb2, "=", nb1 / nb2)
else:
print("Opération inconnue: ", op)
except ValueError:
print("Un des 2 nombres est incorrect.")