… pour apprendre des nouveaux concepts, un nouveau vocabulaire, et une nouvelle syntaxe
(normalement)
(Indice: pas le français)
😨
(Indice 2: pas le néerlandais)
ou langage machine
Comment faire?
Instructions 🇳🇱
Interprète
😌
Instructions 🇬🇧
Je peux exécuter les instructions!
🧑🦰
Instructions (langage compréhensible)
Interpréteur (Python)
💻
1000010110111111011101101010110111111101011110010
Instructions (code machine / binaire)
L'ordinateur exécute les instructions
name = input("Quel est ton nom?")
print("Salut " + name + "!")
print("Bienvenue dans mon premier programme.")
name = input("Quel est ton nom?")
print("Salut " + name + "!")
print("Bienvenue dans mon premier programme.")
Interpréteur
10000101 10111111 01110110
10101101 11111101 01111001
(comme les langues!)
😱
(comme les langues!)
Enfin, le voilà! Le livre que vous cherchiez tant, le Necronomicon,
placé entre "Nettoyer sa maison avec le bicarbonate de soude" et
"Naturellement naturel: renouer avec la nature à l’aide de son smartphone".
Alors que vous tentez de sortir l’ouvrage du rayon, vous entendez un déclic,
l’étagère coulisse d’une quarantaine de centimètres, laissant deviner un
couloir obscur dans le mur. Personne autour de vous ne semble avoir remarqué
quoi que ce soit.
a) Observer le couloir
b) Vous faufiler dans le couloir
c) Vous rendre à l’accueil pour signaler le comportement suspect de ce rayon
Que souhaitez-vous faire? c
Vous prenez place derrière la file composée d’une douzaine de personnes.
Vous apercevez d’où vous vous trouvez l’ouverture dans le mur. Vous ne la
quittez pas des yeux. Après dix longues minutes d’attente, remarquant que la
file n’avance pas, vous décidez de retourner voir l’ouverture.
a) Observer le couloir
b) Vous faufiler dans le couloir
Que souhaitez-vous faire?
Avec ce langage vous pourrez créer:
print("Salut!")
print("C'est mon premier programme!")
https://repl.it/@sephii/intro#exercice_1.py
Fonction
Paramètre
print("Hello world")
Fonction
Paramètre
avancer_de(3 pas)
Fonction
Paramètres
max(3, -5, 8)
max(5, 2, 8, 1, -2)
Si la valeur renvoyée n’est pas utilisée, elle finit à la poubelle !
print(max(5, 2, 8, 1, -2))
8
Niveau d’abstraction
Avancer de X pas
Générer un signal électrochimique
Transporter un signal jusqu’au muscle
Contracter un muscle
Assurer l’équilibre du corps
Bouger un membre
Niveau d’abstraction
Danser la Carioca
Générer un signal électrochimique
Transporter un signal jusqu’au muscle
Contracter un muscle
Assurer l’équilibre du corps
Bouger un membre
Avancer de X pas
Faire X pas de côté
Niveau d’abstraction
Réserver un espace mémoire
Interagir avec le système d’affichage
check_password
send_mail
print_error
reset_user_password
validate_order
def greet(name):
return "Salut " + name + "!"
print(greet("Sylvain"))
print(greet("Julie"))
print(greet("Harold"))
def signifie define
nom de la fonction
paramètre
corps de la fonction
(avec renvoi de valeur)
exécution de la fonction greet
def nom_de_la_fonction(parametre1, parametre2): ... return ...
Créez une fonction scene_1 pour décrire la première scène de votre jeu d’aventure avec des instructions print, puis exécutez-la. Par exemple:
print("Vous vous trouvez...")
https://repl.it/@sephii/intro#exercice_2.py
Servent à garder une information pour plus tard
my_name = "Julie"
print("Salut " + my_name + "!")
Salut Julie!
my_name = "Julie"
print("Salut " + "my_name" + "!")
Salut my_name!
❌
nom_variable = valeur
Modifiez votre fonction scene_1 pour demander le nom du joueur ou de la joueuse, puis affichez-le (par exemple un personnage interpelle le joueur ou la joueuse).
Indices
Un type sert à catégoriser des valeurs. Chaque valeur a un type.
Exemples de catégories dans le monde réel:
Les types sont importants pour définir le comportement des valeurs
nombre1 = "3"
nombre2 = "10"
print("3 est-il plus grand que 10?")
print(nombre1 > nombre2)
❌
Qu’affiche ce programme ? Pourquoi ?
Il affiche True (vrai), parce qu’il s’agit d’une comparaison textuelle
Les types sont importants pour définir le comportement des valeurs
nombre1 = 3
nombre2 = 10
print("3 est-il plus grand que 10?")
print(nombre1 > nombre2)
On compare bien des nombres !
✅
3 types de base importants :
print(1 + 1)
2
print("Salut " + "Sylvain")
Salut Sylvain
print(2 * 2)
4
print("Sylvain" * 2)
SylvainSylvain
Opérateurs arithmétiques: +, -, *, /
print(1 > 1)
False
print("Sylvain" == "sylvain")
False
print(1 + 1 == 3)
False
print("Sylvain" != "Georges")
True
Opérateurs de comparaison: >, <, ==, !=
print("J'ai " + 34 + " ans")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
print("J'ai " + "34" + " ans")
J'ai 34 ans
✅
❌
print(1 + 1 = 2)
File "<stdin>", line 1
SyntaxError: cannot assign to operator
print(1 + 1 == 2)
True
print(12 != 12)
False
✅
❌
== : est égal à
!= : est différent de
Trame linéaire
import datetime
name = input("Comment vous appelez-vous?")
print("Salut " + name + "!")
print("Aujourd'hui nous sommes " +
datetime.date.today().strftime("j")
)
Trame non linéaire
Trame non linéaire
Conditions
Si nom vaut "Sylvain"
Afficher "On se connaît!"
Afficher "Merci d’utiliser mon programme!"
name = input("Comment vous appelez-vous? ")
if name == "Sylvain":
print("On se connaît!")
print("À bientôt!")
print("Merci d’utiliser mon programme!")
Bloc d’instructions (espaces!)
Condition
Afficher "À bientôt!"
Demander le nom
En dehors du bloc (pas d'espaces)
Si nom == "Sylvain"
Afficher "On se connaît!"
Afficher "Merci d’utiliser mon programme!"
name = input("Comment vous appelez-vous? ")
if name == "Sylvain":
print("On se connaît!")
print("À bientôt!")
else:
print("Merci d’utiliser mon programme!")
Bloc d’instructions (espaces!)
Comparaison
Afficher "À bientôt!"
Demander le nom
Sinon
Si nom == "Sylvain"
Afficher "On se connaît!"
Afficher "Salut Julie!"
name = input("Comment vous appelez-vous? ")
if name == "Sylvain":
print("On se connaît!")
print("À bientôt!")
elif name == "Julie":
print("Salut Julie!")
else:
print("Merci d’utiliser mon programme!")
Afficher "À bientôt!"
Demander le nom
Sinon
Si nom == "Julie"
Afficher "Merci d’utiliser mon programme!"
Bloc exécuté seulement si on est entré dans aucune autre branche
Ajoutez un choix après la description de votre première scène. Par exemple en proposant au joueur ou à la joueuse de faire une action (se déplacer, interagir avec un objet, etc).
Indices
a) regarder si les personnes autour de vous ont remarqué cette lueur
b) appuyer sur des touches de votre clavier en espérant que cela fasse disparaître cette lueur étrange
Faites un choix:
Créez une fonction get_choice dans votre programme, qui demande de faire un choix avec le texte "Que souhaitez-vous faire? ", et qui renvoie le choix. Remplacez les appels à la fonction input dans votre programme par get_choice.
Indices
Organisez les post-it pour représenter le programme suivant:
Afficher "Présentation de scene_1"
Demander choix et stocker dans variable "choice"
Exécuter scene_2
Exécuter scene_3
Si choix vaut "a"
Sinon, si choix vaut "b"
scene_1
Afficher "Présentation de scene_2"
scene_2
Afficher "Présentation de scene_3"
scene_3
def scene_1():
...
print("a) Ouvrir la porte")
print("b) Coller l’oreille contre la porte")
choice = input("Faites un choix: ")
if choice == "a":
print("...")
elif choice == "b":
print("...")
else:
print("Veuillez entrer un choix valide!")
Le programme se termine si le choix n’est pas valide!
Demander choix et stocker dans la variable "choice"
Afficher "..."
Afficher "..."
Afficher "Veuillez entrer un choix valide!"
Fin du programme
Si choix vaut "a"
Sinon, si choix
vaut "b"
Sinon
Demander choix et stocker dans la variable "choice"
Afficher "..."
Afficher "..."
Afficher "Veuillez entrer un choix valide!"
Si choix vaut "a"
Sinon, si choix
vaut "b"
Sinon
Initialiser choice = ""
Si choix vaut
"a" ou "b"
Fin du programme
Sinon
* ce schéma est plus complexe que le code
print("a) Ouvrir la porte")
print("b) Coller l’oreille contre la porte")
choice = ""
while choice != "a" and choice != "b":
choice = input("Faites un choix: ")
if choice == "a":
print("...")
elif choice == "b":
print("...")
else:
print("Veuillez entrer un choix valide!")
def get_choice(options):
choice = input("Faites un choix: ")
if choice not in options:
print("Ce choix n’est pas valide!")
else:
print("Vous avez choisi " + choice)
get_choice(["a", "b", "c"])
Nouveau type de données ! Elles permettent de regrouper des données. Les éléments d’une liste sont placés entre [] et séparés par des virgules
Cette liste a 3 éléments: "a", "b" et "c"
Ajoutez un paramètre options à votre fonction get_choice. Faites en sorte qu’elle empêche d’entrer un choix qui ne fait pas partie de la liste options.
Indices
def get_choice(options):
choice = input("Faites un choix: ")
if choice not in options:
print("Ce choix n’est pas valide!")
else:
print("Vous avez choisi " + choice)
get_choice(["a", "b", "c"])
from typing import List
def get_average(numbers: List[int]) -> int:
"""
Renvoie la moyenne de tous les nombres de la liste `numbers`,
arrondie vers l’entier le plus bas.
La moyenne est définie par la somme des nombres divisée par
le nombre de nombres
"""
...
assert get_average([5, 8, 8, 10]) == 7
assert get_average([]) == 0
from typing import List
def count_by(number: int, times: int) -> List[int]:
"""
Renvoie les premiers `times` nombres du "livret" `number`.
Par exemple:
>>> count_by(2, 5)
[2, 4, 6, 8, 10]
"""
...
assert count_by(2, 5) == [2, 4, 6, 8, 10]
assert count_by(5, 3) == [5, 10, 15]
from typing import List
def count_by(number: int, times: int) -> List[int]:
"""
Renvoie les premiers `times` nombres du "livret" `number`.
Par exemple:
>>> count_by(2, 5)
[2, 4, 6, 8, 10]
"""
# Approche classique
numbers = []
for i in range(1, times + 1):
numbers.append(number * i)
return numbers
# Compréhension de liste
# return [number * i for i in range(1, times + 1)]
assert count_by(2, 5) == [2, 4, 6, 8, 10]
assert count_by(5, 3) == [5, 10, 15]
def untroll(text: str) -> str:
"""
Renvoie la chaîne `text` sans les voyelles.
"""
...
assert untroll("PYTHON SAI NULLE") == "PTHN S NLL"
def untroll(text: str) -> str:
"""
Renvoie la chaîne `text` sans les voyelles.
"""
vowels = set("aeiouy")
# Approche classique
filtered_text = ""
for letter in text:
if letter.lower() not in vowels:
filtered_text += letter
return filtered_text
# Compréhension de liste
# return "".join(letter for letter in text if letter.lower() not in vowels)
assert untroll("PYTHON SAI NULLE") == "PTHN S NLL"
def multiple_sum(number: int) -> int:
"""
Renvoie la somme des nombres inférieurs à `number` et qui
sont des multiples de 3 ou de 5.
"""
...
assert multiple_sum(10) == 23
assert multiple_sum(11) == 33
def multiple_sum(number: int) -> int:
"""
Renvoie la somme des nombres inférieurs à `number` et qui
sont des multiples de 3 ou de 5.
"""
# Approche classique
number_sum = 0
for i in range(1, number):
if i % 3 == 0 or i % 5 == 0:
number_sum += i
return number_sum
# Compréhension de liste
return sum(i for i in range(1, number) if i % 3 == 0 or i % 5 == 0)
assert multiple_sum(10) == 23
assert multiple_sum(11) == 33
from typing import List
def like_this(names: List[str]) -> str:
"""
Renvoie un texte indiquant les personnes qui "aiment ça".
"""
...
assert like_this([]) == "Personne n’aime ça"
assert like_this(["Georges"]) == "Georges aime ça"
assert like_this(
["Georges", "Paul-Alain"]
) == "Georges et Paul-Alain aiment ça"
assert like_this(
["Georges", "Paul-Alain", "Charles-Henri"]
) == "Georges, Paul-Alain et Charles-Henri aiment ça"
assert like_this(
["Georges", "Paul-Alain", "Charles-Henri", "Robert"]
) == "Georges, Paul-Alain et 2 autres aiment ça"
from typing import List
def like_this(names: List[str]) -> str:
"""
Renvoie un texte indiquant les personnes qui "aiment ça".
"""
if not names:
return "Personne n’aime ça"
if len(names) == 1:
return f"{names[0]} aime ça"
if len(names) == 2:
return f"{names[0]} et {names[1]} aiment ça"
if len(names) == 3:
return ", ".join(names[:2]) + f" et {names[2]} aiment ça"
return ", ".join(names[:2]) + f" et {len(names) - 2} autres aiment ça"
assert like_this([]) == "Personne n’aime ça"
assert like_this(["Georges"]) == "Georges aime ça"
assert like_this(
["Georges", "Paul-Alain"]
) == "Georges et Paul-Alain aiment ça"
assert like_this(
["Georges", "Paul-Alain", "Charles-Henri"]
) == "Georges, Paul-Alain et Charles-Henri aiment ça"
assert like_this(
["Georges", "Paul-Alain", "Charles-Henri", "Robert"]
) == "Georges, Paul-Alain et 2 autres aiment ça"
import json
from typing import List
from urllib.request import urlopen
def get_starships(character_name: str) -> List[str]:
"""
Renvoie la liste des noms des vaisseaux du personnage `character_name`.
cf. https://swapi.dev/documentation#people
"""
response = urlopen("https://swapi.dev/api/people/")
response_data = response.read()
...
print(get_starships("Luke Skywalker"))
import json
from typing import List
from urllib.request import urlopen
def get_starships(character_name: str) -> List[str]:
"""
Renvoie la liste des noms des vaisseaux du personnage `character_name`.
cf. https://swapi.dev/documentation#people
"""
response = urlopen("https://swapi.dev/api/people/")
response_data = response.read()
json_data = json.loads(response_data)
starships = []
for result in json_data["results"]:
if result["name"] == character_name:
for starship_url in result["starships"]:
starship_data = json.loads(urlopen(starship_url).read())
starships.append(starship_data["name"])
return starships
print(get_starships("Luke Skywalker"))
🥳
🎉
✨
Sylvain Fankhauser (@roflmaokthxbye)
Génies du code (@geniesducode)