theorie1_egal_if_fr

Base UNE : "="

English here!


Allez sur repl.it python3 ou bien ouvrez Wing 101 (téléchargeable sur le site de Wing).

Les variables permettent de stocker une valeur dans la mémoire de l'ordinateur :

a = 5
print(a)
a = 6
print(a)

# en python 2, les parenthèses n'étaient pas nécessaires

On peut faire des maths :

b = a + 1        # b vaut maintenant a + 1 = 7
c = a + b * 2    # priorité des opérations
d = (a + b) * 2  # mettre des parenthèses si nécessaire !
print(b)         # b n'a pas changé depuis qu'on a fait "b ="
print(c)
print(d)

On peut modifier une variable existante :

a = a + 1        # on calcule "a + 1", puis on met le résultat dans a
print(a)         # La variable "a" a donc été augmentée de 1"

Pour afficher du texte, il faut le mettre entre guillemets :

print("fin")

Pour afficher plusieurs choses on écrit une virgule:

print("J'ai", a, "patates")  # en python 2, les parenthèses n'étaient pas obligatoires

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.

Petite, question, quelle est la différence entre print(a) et print("a") ?

Base DEUX : "if"

English here!

Qu'affiche ce programme ?


a = 7

if a < 10:
    print("Coucou")
    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("Coucou")
    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("Coucou")
print("Hello")  # DIFF
    

Correction:

Et celui-là ?


a = 12  # DIFF

if a < 10:
    print("Coucou")
print("Hello")  # DIFF
    

Correction: ...

Le bloc if de ce programme va afficher Coucou puis Hello seulement si a est plus petit que 10, sinon, il saute le bloc et donc, ne fait rien. Essayez avec d'autres valeurs de a, comme a = 12 ou a = 10 par exemple.

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("Coucou")
    print("Hello")
else:               # NEW
    print("Tadaa")  # NEW

Si a < 10: le programme affiche Coucou puis Hello, sinon il affiche Tadaa.

Diagrammes et exemple réels !

Un autre exemple, on veut donner 50 points de vie à un personnage, sans dépasser 100...

vie = 75
vie = vie + 50
if vie > 100:
    vie = 100

Pour afficher plusieurs choses on écrit une virgule:

print("Votre vie est de", vie)  # en python 2, les parenthèses n'étaient pas obligatoires

Voici une représentation en diagramme de ce if :

On peut faire un else, le code ira dans le else si la condition est fausse:

if vie == 100:
    print("Rempli!")
else:
    print("Potions!")

Ainsi le code précédent affiche "Rempli!" si vie vaut 100, sinon il affiche "Potions!".

Voici un diagramme de ce if/else :

Les opérateurs de comparaison

Les opérateurs de comparaison sont "<", ">", "<=", ">=", "==", "!=" (différent).

Attention, pour comparer deux valeurs il faut utiliser "==". 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 ?

Petit exercice, essaie de réécrire le code précédent en utilisant l'opérateur "!=" (différent).

Récapitulons

Dans un if, on peut mettre n'importe quel code, comme un "=", un "print", ou... un autre "if"!


if a == 5:
    a = 2
    print("Yo")
    if b == 5:
        print("Hello")
    else:
        print("Tada")
else:
    print("Hum")
   
print(a)

Essaie ce programme avec plusieurs valeurs et vois ce qu'il se passe :

Fais maintenant l'exercice 0 et regarde la correction sur pythontutor. Pour cet exercice, quels sont les cas à tester ? J'en vois au moins deux !

J'ai également fait une vidéo sur cette page de théorie.

Pour continuer la théorie, place à la théorie 2!

Mais avant ça, je conseille de faire les exercices 1 à 4.

Tu peux aussi lire la section ci-dessous qui parle de "and/or" car elle peut t'être utile pour les exercices 3 et 4.

Les conditions combinées avec and et or

On peut écrire des conditions combinées avec "and" et "or", par exemple :


if a == 1 and b == 2:
    print("Yo")
else:
    print("Da")

Ce programme affiche "Yo" si a est égal à 1 et b est égal à 2, sinon "Da". Les deux conditions doivent être vraies. Il est appelé le et logique. 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.

On peut également utiliser "or" :


if a == 1 or b == 2:
    print("Yo")
else:
    print("Da")

Ce programme affiche "Yo" si a est égal à 1 ou b est égal à 2. Au moins une des deux conditions doit être vraie. Il est appelé le ou logique. 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.

Attention, si tu mélanges des and et des or, utilise des parenthèses pour bien préciser l'ordre des opérations :


if a == 2 or b == 2 and c == 2:  # qui du "or" ou du "and" a la priorité ?
    print("Yo")

# cette ligne est équivalente à la précédente : or est "comme" un +, and est "comme" un *
if a == 2 or (b == 2 and c == 2):
    print("Yo")
    
if (a == 2 or b == 2) and c == 2:
    print("Yo")
    

Pour en savoir plus

English here!

=


# des raccourcis pour incrémenter/décrémenter !

a = a + 1
a += 1  # raccourci pour a = a + 1
a -= 1  # raccourci pour a = a - 1
a *= 2  # a = a * 2
# etc.

# floats (nombre à virgule, notez que "entier" se dit "integer" en anglais, souvent abbrégé en "int")
a = 2.5
a = 2.5e6  # la notation "e" crée toujours un float, ici 2.5 * 10^6 = 2.5 millions
a = 2e6   # 2000000.0, un float

# exposant
a = 2 ** 5       # 2 exposant 5 = 32, int ** int = int
a = 2.1 ** 2     # float ** int = float
a = 10 ** 0.5    # number ** float = float
a = 2 * 10 ** 6  # 2000000, un int, remarquez que l'exposant a priorité sur le "*"

# si on divise 14 par 4 on a 3.5
a = 14 / 4         # 3.5 (attention ! En python 2, 14 / 4 = 3)
a = 14 / 4.0       # 3.5 (même en python 2)
a = 14 / float(4)  # 3.5 (float(4) fait la conversion int → float)

# l'opérateur de division entière "//" et l'opérateur de "reste" % (aussi appelé "modulo")

# si on divise 14 par 4 on a 3 avec un reste de 2 (comme à l'école primaire !) et donc sait que 14 = 3 * 4 + 2.
d = 14 // 4  # 3, la partie entière
m = 14 % 4   # 2, le reste (on dira "14 modulo 4 = 2")

# modulo négatifs (python is cool !), observez le 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

plusieurs lignes


# si on ouvre une parenthèse, on peut passer à la ligne autant que l'on veut
x = (5 + 2 * 3
       + 7 * 2
       + 1
       - 2)

écrire en binaire ou hexadécimal


print(0b100)     # 4
print(0xa2)      # 162
print(hex(162))  # 0xa2
print(bin(4))    # 0b100
print(int('100', 2))  # 4
print(int('a2', 16))  # 162

comparaisons multiple


if 2 <= a <= 5:  # 2 <= a and a <= 5
    print("a est entre 2 et 5")

if a == b == 0:  # a == b and b == 0
    print("a et b valent 0")

not: "inverser" une condition


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é :

Les deux dernières lois sont souvent appelées lois de De Morgan.


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")

elif

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")

bool

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.

if fonctionnel

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 !