Dans cet article, nous allons réellement nous attaquer à la programmation, en découvrant les concepts de base de Python. Si vous êtes totalement débutant et que vous ne savez pas ce que sont une variable et une fonction, ou bien que vous n'avez pas encore installé Python sur votre ordinateur, je vous invite à consulter mon premier article dans lequel je vous détaille tout ça : https://propython.fr/post/bases-de-python-1. Evidemment, vous pouvez également consulter cet article sans avoir Python d'installé, mais la pratique fonctionne toujours mieux que la théorie pour apprendre.
En Python, les blocs de code n'ont pas d'instructions ou de symboles définissant explicitement le début ou la fin d'un bloc. On utilise plutôt l'indentation. Cela consiste à utiliser des espaces pour séparer les blocs d'instructions. Par exemple :
if is_red:
print("Red !")
Voici une instruction if
que nous verrons en détail dans la suite de cet article. On remarque qu'à la fin de cette instruction if
, on met ":", on retourne à la ligne et on utilise une tabulation (caractère remplaçant plusieurs espaces). C'est la syntaxe classique d'un bloc de code en Python. Si vous faites autrement, votre programme ne fonctionnera pas.
if is_red: # Cela ne fonctionnera pas, il faut respecter l'indentation !
print("Red !")
Également, si on utilise des tabulations inutilement, par exemple lorsqu'il n'y a pas de blocs de code à séparer, cela ne fonctionnera pas non plus.
print("Hello Word !")
print("Goodbye !") # Cette ligne générera une erreur à cause de la mauvaise indentation
Ce sont des bouts de code qui sont ignorés par l'ordinateur, qui ne sont pas exécutés.
Mais quelle utilité d'écrire du code que l'ordinateur ignore ?
En fait, les commentaires permettent d'expliquer votre code, ou d'y ajouter des remarques ou des informations que toute personne lisant votre code pourra voir et utiliser, y compris vous. Par exemple, si vous avez réalisé une fonction compliquée, il peut être utile de commenter cette fonction pour expliquer son fonctionnement, pour que lorsque vous reviendrez voir votre code, vous ne perdez pas de temps pour comprendre ce que vous aviez écrit.
Voici comment écrire un commentaire en Python :
# Ceci est un commentaire sur une ligne
"""
Ceci est un commentaire également,
mais sur plusieurs lignes
"""
'''
On peut également utiliser des apostrophes,
et non pas des guillemets
'''
Voilà donc deux façons d'écrire un commentaire, la première permet d'écrire un commentaire sur une ligne, il vous suffit pour cela de commencer la ligne par un dièse ("#").
Et la seconde vous permet d'écrire un commentaire sur plusieurs lignes, pour cela vous commencez le commentaire par trois guillemets (""") ou trois apostrophes ('''), et vous finissez par trois guillemets si vous avez commencé par des guillemets, ou trois apostrophes si vous avez commencé par des apostrophes.
À noter que les commentaires peuvent s'insérer n'importe où dans votre code, même en fin de ligne ou dans un bloc d'instructions, ex :
print("Hello World") # Affiche "Hello World"
if age >= 18:
"""
Condition validée si vous êtes majeur.
"""
print("Vous êtes majeur")
En Python, l'initialisation d'une variable et sa déclaration se font en même temps. De plus, on n'a pas besoin de préciser le type d'une variable lors de sa déclaration car Python est un langage à typage dynamique, et détecte le type lui-même.
x = 10 # Attribue la valeur 10 à x
x = 15 + 8 # Attribue la valeur 23 à x
x = None # N'attribue aucune valeur à x
Comme vous pouvez le remarquer, on peut effectuer des opérations lors de l'initialisation. On peut également déclarer une variable sans lui assigner de valeur, pour cela on utilise le mot-clé None
lors de l'initialisation.
Mais pourquoi ne pas assigner de valeur à une variable ?
Peut-être que vous avez besoin que cette variable existe tout de suite, mais que vous n'avez pas de valeur à lui assigner. Alors au lieu de lui assigner une valeur aléatoire, ce qui n'aurait pas vraiment de sens, on se contente d'initialiser une variable sans lui donner de valeur.
Le type d'une variable est en fait sa "nature", ce qu'elle représente. Par exemple, une variable peut-être un entier, un nombre décimal, un complexe, une chaine de caractère, un booléen... Pour connaître le type d'une variable, on utilise l'instruction type
. Par exemple :
x = 3 # Un entier
y = 6.94 # Un nombre décimal
name = "John" # Une chaine de caractères
is_red = True # Un booléen
a = None # "Rien"
type(x) # <class 'int'>
type(y) # <class 'float'>
type(name) # <class 'str'>
type(is_red) # <class 'bool'>
type(a) # <class 'NoneType'>
Quoi ?! Même "a" qui ne possède aucune valeur possède un type ?
En effet. D'ailleurs, c'est imprécis et incorrect de parler de type, que ce soit pour un int
, un float
, un str
, etc... On parle de classe. En fait, en Python, tout ce qui existe est une classe, ou une instance (une instance est une occurence d'une classe). Ici, a
est une instance de la classe NoneType
, utilisée pour les variables sans valeur, tout comme x
est une instance de la classe int
, utilisée pour les entiers.
Remarquez aussi la syntaxe pour chaque type de base. Ainsi, un nombre décimal s'initialise avec un "." en guise de virgule, une chaine de caractère commence et finit par des guillemets (ou des apostrophes, au choix), un booléen s'initialise par True
ou False
, etc...
Mais, c'est quoi un booléen ?
Un booléen est une variable qui stocke un état, soit "vrai", soit "faux" (ici True
ou False
). Il est utilisé pour les conditions logiques, nous en reparlerons après.
En Python, un nom de variable peut être composé de lettres minuscules, lettres majuscules, de chiffres, ou du caractère souligné (_
). Vous ne pouvez pas utiliser d'espaces dans un nom de variable, donc pour des noms en plusieurs mots, utilisez plutôt le caractère souligné pour séparer les mots. Ex : nombre_de_joueurs
. Sachez également que certains mots sont réservés par Python, et qu'il faut donc éviter de nommer ses variables ainsi, par exemples les mots if
, type
, print
, etc... Aussi, Python est sensible à la casse, c'est à dire qu'il fait la différence entre les majuscules et les minuscules, donc prenom
, PRENOM
et pReNoM
sont 3 variables différentes.
Mais il y a aussi des conventions, des règles implicites, à respecter le plus possible pour le nommage des variables, afin de se faire comprendre par les autres programmeurs et d'avoir un code clair :
a
mais age
.Les opérations sont ce qu'on peut réaliser avec nos variables, en utilisant des opérateurs. Pour les types numériques, on dispose des opérateurs de base : +
, -
, *
...
Ils s'utilisent simplement :
>>> 3 + 4
7
>>> 3 - 4
-1
>>> 4 * 6
24
>>> 5 / 2
2.5
>>> 5 // 2 # Opérateur division entière (renvoie le quotient de la division euclidienne)
2
>>> 5 % 2 # Opérateur modulo (renvoie le reste de la division entière)
3
>>> 5**3 # Opérateur puissance
125
Remarquez la syntaxe que j'utilise dans le bloc de code : les >>>
correspondent à ceux dans votre interpréteur, j'écris donc le code comme si je l'écrivais dans l'interpréteur. Si vous ne savez pas ce qu'est l'interpréteur, je vous invite à consulter cet article.
On peut également utiliser des opérateurs avec d'autres types. Attention cependant, il faut que cela ait du sens. Essayons par exemple avec des chaînes de caractères.
>>> "Hello" + "World"
'HelloWorld'
>>> "Hello" * 3
'HelloHelloHello
>>> "Hello" / "World" # Aucun sens, on ne divise pas deux chaînes de caractères, cela génère donc une erreur
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'str' and 'str'
Il existe également des opérateurs raccourcissant des opérations basiques, les voici :
>>> a = 10
>>> a += 2 # a = a + 2 : 12
>>> a -= 2 # a = a - 2 : 10
>>> a *= 3 # a = a * 3 : 30
>>> a /= 3 # a = a / 3 : 10.0
Imaginons que je veuille récupérer la partie entière d'un nombre décimal. Cela est faisable simplement avec la conversion de types. Il s'agit en fait de changer le type d'une variable. Attention, encore une fois, il faut que cette conversion ait du sens ! On ne change pas une chaîne de caractères du type "Hello"
en entier… En revanche, on peut changer une chaîne de caractères comme "10"
en entier. De même, on peut changer un entier en chaîne de caractères. Voyons comment faire avec quelques exemples :
>>> int(3.4) # Conversion d'un float en int
3
>>> int("10") # Conversion d'un str en int
10
>>> str(10) # Conversion d'un int en str
'10'
>>> str(True) # Conversion d'un bool en str
'True'
La syntaxe est très simple, on utilise le nom du type dans lequel on veut convertir notre valeur, et on passe notre valeur en argument.
Vous connaissez maintenant les bases des variables en Python, passons maintenant aux conditions.
Il s'agit des expressions utilisées pour tester si une condition est vérifiée ou non. On dispose pour cela d'opérateurs de comparaison.
Les opérateurs de comparaison
Un opérateur de comparaison est un opérateur qui permet de comparer deux valeurs. En Python, on dispose des opérateurs suivants :
== # égal
!= # différent
> # supérieur
< # inférieur
>= # supérieur ou égal
<= # inférieur ou égal
Vous pouvez tester ces différents opérateurs dans votre interpréteur Python, comme ci-dessous :
>>> 3 == 2
False
>>> 3 > 2
True
>>> 3 != 2
True
Remarquez qu'une expression conditionnelle renvoie un booléen : soit True
si la condition testée est vrai, soit False
si elle est fausse.
On peut aussi utiliser ceci avec des variables :
>>> x = 3
>>> y = 2
>>> x == y
False
>>> x >= y
True
>>> result = x <= y # On peut aussi stocker le résultat (True ou False) dans une variable
>>> result
False
>>> x is y # Equivalent à l'opérateur ==
False
>>> x is not y # Equivalent à l'opérateur !=
True
Comme vous remarquez, on a utilisé des mots-clés : is
et is not
. Ces deux mots-clés peuvent être utilisés respectivement comme ==
ou !=
, mais attention à ne les utiliser uniquement pour comparer deux variables, regardez ce code :
>>> 3 is not 2
<stdin>:1: SyntaxWarning: "is not" with a literal. Did you mean "!="?
True
L'interpréteur vous génère une erreur, car 3
et 2
ne sont pas des variables, donc n'utilisez ces mots-clés que pour des variables !
C'est la condition de base en Python. Elle se traduit comme "si", pour les allergiques à l'anglais. Voici sa syntaxe :
if (condition):
# instructions...
"condition" désigne une expression conditionnelle comme celles que nous avons vu plus haut, avec les opérateurs, ou simplement un booléen. En effet, comme une expression conditionnelle renvoie un booléen, ce qui est dans le if
correspond à ce qu'a renvoyé l'expression conditionnelle. De plus, notez les :
à la fin de la ligne du if
, et l'indentation à la ligne suivante. Il faut bien respecter cette syntaxe, sinon votre code ne compilera pas. Regardez le code suivant pour comprendre :
if 10 > 5:
print("10 > 5")
# 10 > 5
10 est bien supérieur à 5, donc la condition s'exécute et on affiche le message. Mais on aurait pu également faire autrement :
result = 10 > 5
if result:
print("10 > 5")
# 10 > 5
Cela revient exactement au même, sauf que comme je vous disais, on peut passer un booléen dans une condition if
. En fait, ce code est traduit comme tel, car result
est égal à True
:
if True:
print("10 > 5")
# 10 > 5
Ce qui est toujours vrai, donc nos instructions s'exécute.
C'est une condition qui va de pair avec le if
. Quoique pas forcément, mais nous en parlerons plus tard. Elle se traduit comme "sinon". Elle va de pair avec if
, puisqu'elle permet d'exécuter des instructions dans le cas où le if
ne ce serait pas exécuté. Exemple :
color = "red"
if color is "blue":
print("blue !")
else:
print("not blue !")
Dans notre exemple, color
n'est pas égale à blue
donc le if
ne s'exécute pas, ce qui implique que le else
s'exécute. Cela se traduit par "si color est blue, alors print("blue !"), sinon print("not blue !)" Notez d'ailleurs la syntaxe, au passage, toute simple et similaire à celle du if
.
C'est un mélange en quelque sorte entre else
et if
. On traduit ça par "sinon si". Elle s'exécute si un bloc if
ou un bloc elif
avant ne s'est pas exécuté et que sa condition est valide. Exemple :
color = "red"
if color is "blue":
print("blue !")
elif color is "green":
print("green !")
elif color is "yellow":
print("yellow")
else:
print("an other color !")
Si color
est blue
, alors...
Sinon si color
est green
, alors...
Sinon si color
est yellow
, alors...
etc...
C'est tout pour les conditions, nous allons maintenant voir en quoi elles peuvent nous être utiles pour les boucles.
Ce sont des instructions qui se répètent selon une condition. Il existe plusieurs types de boucles, nous allons commencer par la boucle for
.
Avant de vous parler de vous parler de cette boucle, nous allons découvrir la fonction range
. C'est en fait une fonction qui vous permet d'itérer dessus.
Hein ? Que veut dire itérer ?
Itérer, c'est parcourir chaque élément 1 par 1. Et c'est ce que permet la boucle for
. En fait, la fonction range
génère un itérateur entre deux entiers, et la boucle for
vous permet donc de parcourir ces valeurs une par une. Voici la syntaxe :
for i in range(5):
print(i)
# 0, 1, 2, 3, 4
C'est quoi i ?
i
, c'est ce qu'on appelle une variable d'itération. C'est à dire que c'est une variable prenant successivement les valeurs d'un itérateur. Ici, notre itérateur range
nous génère chaque entier entre 0 et 5 (exclu), donc i
va prendre successivement les valeurs 0, 1, 2, 3, 4. De même, on peut changer les bornes de range
, pour par exemple prendre des valeurs entre 10 et 20 :
for i in range(10, 20):
print(i)
# 10, 11, 12, 13, ..., 18, 19
Le premier argument est la valeur où commencer, et le second est la valeur où finir. On peut également rajouter un pas, regardez :
for i in range(10, 20, 2):
print(i)
# 10, 12, 14, 16, 18
En précisant un pas de 2 (le troisième argument), on parcoure les valeurs de 2 en 2.
Nous verrons d'autres utilisations de la boucle for
dans le prochain chapitre, passons maintenant à la boucle while
.
Cette boucle vous permet de répéter des instructions tant qu'une condition est valide. Par exemple, si je veux demander à l'utilisateur de choisir une couleur tant que celle qu'il choisit n'est pas le vert, je peux le faire avec une boucle while
. Voici la syntaxe :
while (condition):
# instructions ...
Exemple :
i = 0
while i != 5:
print(i)
i += 1 # i = i + 1, rappelez vous des opérateurs raccourcis
Ces instructions s'exécutent jusqu'à ce que i
soit égal à 5.
La première fonction que vous avez vu. Cette fonction vous permet d'afficher du texte en sortie. Elle ne renvoie rien, elle se contente juste d'afficher du texte. Vous lui passez en argument ce qu'il faut afficher.
Plusieurs possibilités pour cela. La première consiste à concaténer votre variable avec la chaîne de caractères, pour cela, on utilise l'opérateur +
. Par exemple :
>>> phrase = "J'aime la couleur"
>>> couleur = "rouge"
>>> print(phrase + " " + couleur)
J'aime la couleur rouge
Ici, on concatène 3 chaînes de caractères car j'en ai rajouté une entre les deux qui nous intéressent pour les espacer, sinon les deux chaînes auraient été collées sans espace.
Une deuxième méthode, est d'utiliser les fstring. Ce sont des chaînes formatées, qui vous permettent donc d'insérer des variables à l'intérieur. Voici la syntaxe :
>>> couleur = "rouge"
>>> print(f"J'aime la couleur {couleur}")
J'aime la couleur rouge
Notez bien qu'on insère un f
avant les guillemets ouvrants pour dire que c'est une fstring. Ensuite, on affiche les variables qu'on veut à l'intérieur en ouvrant des accolades et en indiquant le nom de la variable qu'on souhaite afficher.
Cette fonction ressemble à la fonction print
, la différence étant qu'elle demande à l'utilisateur d'entrer une valeur, et qu'elle renvoie donc cette valeur. Voici comment s'en servir :
>>> age = input("Quel âge avez-vous ?")
Quel âge avez-vous ? 32
>>> age
'32'
>>> type(age)
<class 'str'>
Vous stockez simplement le retour de cette fonction dans une variable. Notez bien que le type de la valeur retournée est toujours un str
peu importe la valeur de l'utilisateur. A vous de convertir cette valeur en un type qui vous intéresse ensuite, par exemple en entier si vous souhaitez faire des calculs avec cette variable.
Voilà, vous avez maintenant les bases syntaxiques de Python, et vous connaissez quelques fonctions. Cela est suffisant pour commencer à créer des petits programmes, je n'ai donc qu'un seul conseil : entraînez-vous.
Si c'est article vous a plus, si vous avez besoin de précisions, ou si vous avez des suggestions de choses à rajouter dans cet article, n'hésitez pas à laisser un commentaire, ou à me contacter par mail : contact@propython.fr
Merci à tous d'avoir lu, on se retrouve prochainement pour la suite de votre apprentissage de Python !