Allez sur repl.it python3 ou bien ouvrez Wing 101 (téléchargeable sur le site de Wing).
Variables are useful to store a value in the memory of the computer:
"="
allows you to change the value of a variable print()
allows you to see on screen the value of a variable a = 5
print(a)
a = 6
print(a)
# in python 2, the parenthesis were not mandatory
We can do maths:
b = a + 1 # b is now a + 1 = 7
c = a + b * 2 # priority of operations
d = (a + b) * 2 # put parenthesis if needed!
print(b) # b didn't change since the time we did "b ="
print(c)
print(d)
We can modify an existing variable:
a = a + 1 # calculate "a + 1", then put the result in a
print(a) # The variable "a" is then incremented by 1.
To print text, one must put in between quotes:
print("end")
To display more than one thing, one must write a comma:
print("I have", a, "potatoes") # in python 2, the parenthesis were not mandatory
Essayez ce code sur pythontutor ! Cliquez sur Visualize execution puis cliquez sur Forward pour exécuter chaque ligne ou sur Last pour voir uniquement le résultat final. Le résultat imprimé en raison de "print"
est affiché dans le cadre Print output.
A little question, what's the difference between print(a)
and print("a")
?
What does this program print?
a = 7
if a < 10:
print("Kookoo")
print("Hello")
Le code se dit est-ce que a < 10 ? Oui! et donc il affiche Coucou, puis Hello.
Remplace maintenant a = 7
par a = 12
et relance le programme, quelle va être la difference ?
a = 12 # DIFF
if a < 10:
print("Kookoo")
print("Hello")
Quand a = 12
, le code se dit est-ce que a < 10 ? Non! il saute le if
et ne fait rien.
Et celui là ?
a = 7 # DIFF
if a < 10:
print("Kookoo")
print("Hello") # DIFF
Correction:
Et celui-là ?
a = 12 # DIFF
if a < 10:
print("Kookoo")
print("Hello") # DIFF
Correction: ...
The if-block in this program will display "Kookoo" then "Hello" only if a is smaller than 10, otherwise, the block is jumped and then, nothing is done. Try with other values of a
, like a = 12
ou a = 10
for example.
Mais si on veut quand même faire quelque chose quand la condition est fausse ? C'est là que vient le else
:
if a < 10:
print("Kookoo")
print("Hello")
else: # NEW
print("Tadaa") # NEW
Si a < 10: le programme affiche Kookoo puis Hello, sinon il affiche Tadaa.
Another example, one wants to give 50 life points (hp) to a character, without going over 100...
life = 75
life = life + 50
if life > 100:
life = 100
To display more than one thing, one must write a comma:
print("your life is", life) # in python 2, the parenthesis were not mandatory
Here is a diagram representation of that if :
One can do a else
, the code will go in the else
if the condition is false:
if life == 100:
print("Full!")
else:
print("Potions!")
Therefore the previous code displays "Full!"
if the life is 100, else it displays "Potions!"
.
Here is a diagram of this if/else :
The comparison operators are "<", ">", "<=", ">=", "==", "!="
(different).
Beware, to compare two values, one must use "=="
. et non "="
. Autrement dit, si un "="
est dans un if, il doit avoir être doublé.
On se rappelle que a = 5
veut dire imposer que a vaut 5 alors que a == 5
veut dire est-ce que a vaut 5 ?
As an exercice, try to re-write the previous code by using the "!="
(different) operator.
In a if
, one can put any code, like a "="
, a "print"
, or... another "if"
!
if a == 5:
a = 2
print("Yo")
if b == 5:
print("Hello")
else:
print("Tada")
else:
print("Hum")
print(a)
Try this program with mutliple values and see what's going on:
Do now the exercice number 0 and look at the correction on pythontutor. For that exercise, which case must I test ? I see at least two interesting cases!
J'ai également fait une vidéo sur cette page de théorie.
Pour continuer la théorie, place à la théorie 2!
But before doing that, I suggest to do exercices 1 to 4.
you can also read the the section below about "and/or"
that can be useful for the exercices 3 and 4.
One can write combined conditions with "and"
and "or"
, for example:
if a == 1 and b == 2:
print("Yo")
else:
print("Da")
This program displays "Yo"
if a is equal to 1 and b is equal to 2, "Da"
otherwise. both conditions must be true. It's called the logical and. Voici une représentation en diagramme d'un exemple de "and"
:
Essayez de changer les valeurs de a et b pour vérifier que les flèches corespondent bien au code.
We can also use "or"
:
if a == 1 or b == 2:
print("Yo")
else:
print("Da")
This program displays "Yo"
if a is equal to 1 or b is equal to 2. At least one condtion must be true. It's called the logical or. Voici une représentation en diagramme d'un exemple de "or"
:
Essayez de changer les valeurs de a et b pour vérifier que les flèches corespondent bien au code.
Beware, if you mix and
and or
, use parenthesis to be clear on the order you want to use:
if a == 2 or b == 2 and c == 2: # Who has the greater priority? The "and" or the "or"?
print("Yo")
# this line is equivalent to the previous one: or is "like" a +, and is "like" a *
if a == 2 or (b == 2 and c == 2):
print("Yo")
if (a == 2 or b == 2) and c == 2:
print("Yo")
# some shortcuts for increment/decrement
a = a + 1
a += 1 # shortcut for a = a + 1
a -= 1 # shortcut for a = a - 1
a *= 2 # a = a * 2
# etc.
# floats (floating/decimal numbers)
a = 2.5
a = 2.5e6 # the "e" notation
a = 2e6 # 2000000.0, a float
# power
a = 2 ** 5 # 2 power 5 = 32, int ** int = int
a = 2.1 ** 2 # float ** int = float
a = 10 ** 0.5 # number ** float = float
a = 2 * 10 ** 6 # 2000000, a int, let's notice that power has priority on "*"
# when 14 is divided by 4, one obtains 3.5
a = 14 / 4 # 3.5 (beware! In python 2, 14 / 4 = 3)
a = 14 / 4.0 # 3.5 (even in python 2)
a = 14 / float(4) # 3.5 (float(4) do the conversion int → float)
# l'opérateur de division entière "//" et l'opérateur de "reste" % (aussi appelé "modulo")
# when 14 is divided by 4, one obtains 3 with a rest of 2 (remember primary school!) therefore we know that 14 = 3 * 4 + 2.
d = 14 // 4 # 3, the integer part
m = 14 % 4 # 2, the rest (we'll say "14 modulo 4 = 2")
# (negative modulos (python is cool !), observe the cycle 0 1 2 3 4:
n = -2 % 5 # 3 car -2 = -1 * 5 + 3
n = -1 % 5 # 4 car -1 = -1 * 5 + 4
n = 0 % 5 # 0
n = 1 % 5 # 1
n = 2 % 5 # 2
n = 3 % 5 # 3
n = 4 % 5 # 4
n = 5 % 5 # 0
n = 6 % 5 # 1
# if one opens a parenthesis, one can go to the next line until the parenthesis is closed
x = (5 + 2 * 3
+ 7 * 2
+ 1
- 2)
print(0b100) # 4
print(0xa2) # 162
print(hex(162)) # 0xa2
print(bin(4)) # 0b100
print(int('100', 2)) # 4
print(int('a2', 16)) # 162
if 2 <= a <= 5: # 2 <= a and a <= 5
print("a is between 2 and 5")
if a == b == 0: # a == b and b == 0
print("a and b are equal to 0")
if a == 5: # si a == 5...
pass # ne rien faire
else:
print("a n'est pas égal à 5")
# équivalent à
if not(a == 5):
print("a n'est pas égal à 5")
else:
pass # ne rien faire
# équivalent à
if not(a == 5):
print("a n'est pas égal à 5")
# "sinon ne rien faire" est une opération inutile, on peut donc l'enlever
# équivalent à
if a != 5:
print("a n'est pas égal à 5")
En effet, au choix du programmeur, le not peut être simplifié :
not(a == b) ↔ a != b
not(a < b) ↔ a >= b
(ATTENTION : plus grand ou ÉGAL) not(X and Y) ↔ (not X) or (not Y)
(ATTENTION : OR) not(X or Y) ↔ (not X) and (not Y)
if not(a == 5 and b < 7):
print("not(a == 5 and b < 7)")
if a != 5 or b >= 7: # équivalent au précédent
print("a != 5 or b >= 7")
En règle générale, quand on a un if / else quelconque on peut, au choix, inverser la condition en mettant un not
. Je conseille de faire ça quand vous avez un long if
et un court else
:
if a != 5 and a > 0:
print("yoyo")
print("tada")
print("truc")
if a == 4:
print("da")
else:
print("yo")
else: # ce "else" est court et oublié :(
print("coucou")
# on peut (au choix) l'inverser en "not(X)" sa condition :
if not(a != 5 and a > 0): # appliquez les lois de De Morgan si vous voulez
print("coucou") # aaah, l'ancien else est mis en avant :)
else:
print("yoyo")
print("tada")
print("truc")
if a == 4:
print("da")
else:
print("yo")
Parfois, on a un else
qui ne contient qu'une seule instruction, qui est un if
:
if a < 5:
print("petit")
else:
if a < 10:
print("moyen")
else:
if a < 15:
print("grand")
else:
print("graaaand")
Il existe un raccourci : elif
(else if) :
if a < 5: # si a < 5
print("petit")
elif a < 10: # sinon... si a < 10
print("moyen")
elif a < 15:
print("grand")
else:
print("graaaand")
Les conditions peuvent être mises dans des variables, cette variable sera de type "bool" (booléen), il vaut Vrai ou Faux (True or False)
condition = (a < 5)
if condition == True:
print("Plus petit !")
else:
print("Plus grand ou égal")
Le if
attend un bool, on peut donc enlever == True
.
condition = a < 5 # parenthèse non nécessaires
if condition: # == True enlevé
print("Plus petit")
else:
print("Plus grand ou égal")
# on peut donc faire des "opérations" sur les bool
x = True
y = False
z = x or y # z = True or False = True
n = not x # n = not True = False
g = a < 5 and z
Nous verrons que manipuler des bool sera plus pratique quand nous apprendront les fonctions.
Parfois, on a un if/else
qui ne fait qu'assigner une variable, et rien d'autre !
if a == 5:
b = 8
else:
b = 3
Il existe un raccourci: le if/else
dit en une ligne, ou encore appelé, le if fonctionnel ou l'opérateur ternaire :
b = (8 if a == 5 else 3) # même code qu'au dessus
b = 8 if a == 5 else 3 # parenthèses non nécessaires
b = (8 if a == 5 else
3) # deux lignes c'est plus clair !
c = (8 if a == 5 else
4 if a == 2 else
1 if a < 0 else
0) # longue chaine !