Rappls de Python¶
Cette section fait un tour rapide du langage python.
Caractéritiques¶
- Caractéritiques de Python: interprêté, typage dynamique, typage implicite, fortement typé, orienté objet et fonctionnel
- Interprêté: le script est exécuté directement par un interprêteur sans le transformer préalablement en code machine. Exemple: JavaScript et PHP.
- Typage dynamique: le type d'une variable peut changer dans le temps
- Typage implicite: le type d'une variable esr inféré par l'interprêteur et le développeur n'a pas besoin de le préciser
- Fortement typé: Les variables ont un type qui est pris en compte lors des opérations
- On suit par défaut la convention du snake case
In [1]:
Copied!
cat = "miaou"
print(cat)
print("Hello")
print(len(cat))
print('1 == "1"', 1 == "1")
print('1 == True', 1 == True)
print('0 == False', 0 == False)
print('2 == True ->', 2 == True, '2 == False ->', 2 == False)
x = 4
#"toto" + x # échoue en python
cat = "toto" + str(x)
print(cat)
print(4 + 1.5)
# On peut assigner deux variables à la fois
plat, dessert = "Soupe", "Pomme"
print(plat, dessert)
# Permet de permuter deux variables en une ligne de code
plat, dessert = dessert, plat
print(plat, dessert)
cat = "miaou"
print(cat)
print("Hello")
print(len(cat))
print('1 == "1"', 1 == "1")
print('1 == True', 1 == True)
print('0 == False', 0 == False)
print('2 == True ->', 2 == True, '2 == False ->', 2 == False)
x = 4
#"toto" + x # échoue en python
cat = "toto" + str(x)
print(cat)
print(4 + 1.5)
# On peut assigner deux variables à la fois
plat, dessert = "Soupe", "Pomme"
print(plat, dessert)
# Permet de permuter deux variables en une ligne de code
plat, dessert = dessert, plat
print(plat, dessert)
miaou Hello 5 1 == "1" False 1 == True True 0 == False True 2 == True -> False 2 == False -> False toto4 5.5 Soupe Pomme Pomme Soupe
In [2]:
Copied!
# Chaîne de caractères interpolée
a = 10
text = f"a: {a}. Fin du texte"
print(text)
long_text = f"""
<html>
<head></head>
<body>hello {a}</body>
</html>
"""
print(long_text)
# Chaîne de caractères interpolée
a = 10
text = f"a: {a}. Fin du texte"
print(text)
long_text = f"""
hello {a}
"""
print(long_text)
a: 10. Fin du texte <html> <head></head> <body>hello 10</body> </html>
Fonctions¶
In [3]:
Copied!
def add(x, y):
return x + y
# Appel de fonction
print(add(5, 6))
# En python, on suit par défaut la convention du snake_case
def add_and_multiply(x, y):
return x + y, x * y
a, b = add_and_multiply(10, 4)
print(a, b)
def add(x, y):
return x + y
# Appel de fonction
print(add(5, 6))
# En python, on suit par défaut la convention du snake_case
def add_and_multiply(x, y):
return x + y, x * y
a, b = add_and_multiply(10, 4)
print(a, b)
11 14 40
- Python supporte la programmation fonctionnelle.
- Fonction comme élément de première classe: les fonctions peuvent être manipulées comme des varaibles. C'est-à-dire qu'on peut assigner une fonction à une variable ou un argument.
- On peut définir des fonction anonymes qu'on appelle des lambdas. On peut directement les assigner à une variable ou un argument.
In [4]:
Copied!
g = add
g = 10
print(g)
g = add
print(g(10, -1))
def compute(f):
"""Appelle l'argument f et retour son résultat"""
x = f(0, -1)
return f(x, -7)
print(compute(add))
print(compute(g))
print(compute(lambda a, b: a - b))
lam = lambda u, v: u - v
print(compute(lam))
g = add
g = 10
print(g)
g = add
print(g(10, -1))
def compute(f):
"""Appelle l'argument f et retour son résultat"""
x = f(0, -1)
return f(x, -7)
print(compute(add))
print(compute(g))
print(compute(lambda a, b: a - b))
lam = lambda u, v: u - v
print(compute(lam))
10 9 -8 -8 8 8
Structure de contrôle¶
- Instruction: ligne de code
- Expression tout ce qui a une valeur. Exemples d'expression:
- 2
- 2 % 10
- x + 7
- add(3, 5)
- selon les langages, l'affectation est une expression: 3 + (x = 6) . Ce n'est pas le cas en Python à priori.
- print -> None
In [5]:
Copied!
res = print(2)
print(res)
print(print(2 * 10))
res = print(2)
print(res)
print(print(2 * 10))
2 None 20 None
In [6]:
Copied!
x = 4
if x == 4:
print("vrai")
elif x == 6:
print("c'est égal à 6")
else:
print("faux")
annee = 2008
typeAnnee = "non bissextile" if annee % 4 != 0 else "bissextile"
print(typeAnnee)
if x == 5:
pass
else:
print("dans le else")
x = 4
if x == 4:
print("vrai")
elif x == 6:
print("c'est égal à 6")
else:
print("faux")
annee = 2008
typeAnnee = "non bissextile" if annee % 4 != 0 else "bissextile"
print(typeAnnee)
if x == 5:
pass
else:
print("dans le else")
vrai bissextile dans le else
In [7]:
Copied!
# boucle while
count = 0
while count < 2:
print('The count is:', count)
count += 1
# boucle while
count = 0
while count < 2:
print('The count is:', count)
count += 1
The count is: 0 The count is: 1
In [8]:
Copied!
# Listes (le nom des tableaux en python)
items = [42, 55]
preums, deus = items
print("preums et deus", preums, deus)
items = [42, 55, "Hello", -10]
print(items[0])
print(items[1])
print(items[2])
print(items[3])
# For each
for item in items:
print(item)
# Listes (le nom des tableaux en python)
items = [42, 55]
preums, deus = items
print("preums et deus", preums, deus)
items = [42, 55, "Hello", -10]
print(items[0])
print(items[1])
print(items[2])
print(items[3])
# For each
for item in items:
print(item)
preums et deus 42 55 42 55 Hello -10 42 55 Hello -10
In [9]:
Copied!
# range permet de générer une séquence de nombres
# Séquence d'entier de 0 à 10 exclu avec un pas de 1 [0, 10[
r = range(10)
print(r, list(r))
# Séquence d'entiers de 0 à 10 exclu avec un pas de 2
r = range(0, 10, 2)
print(r, list(r))
# Séquence d'entiers de 11 à 203 exclu avec un pas de 5
r = range(11, 203, 5)
print(r, list(r))
for i in range(4):
print(i)
print("range avec intervalle (borne inf, borne sup, pas)")
for i in range(1, 3):
print(i)
for i in range(1000, -48):
print(i)
for i in [0, 1, 2, 3]:
print(i)
for i in range(4):
print("avec range", i)
# Parcours via les indices
# range retourne une séquence (ou suite) d'entiers qui commence à 0
items = [42, 55, "Hello", -10]
for i in range(len(items)):
print(i, "->", items[i])
# range permet de générer une séquence de nombres
# Séquence d'entier de 0 à 10 exclu avec un pas de 1 [0, 10[
r = range(10)
print(r, list(r))
# Séquence d'entiers de 0 à 10 exclu avec un pas de 2
r = range(0, 10, 2)
print(r, list(r))
# Séquence d'entiers de 11 à 203 exclu avec un pas de 5
r = range(11, 203, 5)
print(r, list(r))
for i in range(4):
print(i)
print("range avec intervalle (borne inf, borne sup, pas)")
for i in range(1, 3):
print(i)
for i in range(1000, -48):
print(i)
for i in [0, 1, 2, 3]:
print(i)
for i in range(4):
print("avec range", i)
# Parcours via les indices
# range retourne une séquence (ou suite) d'entiers qui commence à 0
items = [42, 55, "Hello", -10]
for i in range(len(items)):
print(i, "->", items[i])
range(0, 10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] range(0, 10, 2) [0, 2, 4, 6, 8] range(11, 203, 5) [11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86, 91, 96, 101, 106, 111, 116, 121, 126, 131, 136, 141, 146, 151, 156, 161, 166, 171, 176, 181, 186, 191, 196, 201] 0 1 2 3 range avec intervalle (borne inf, borne sup, pas) 1 2 0 1 2 3 avec range 0 avec range 1 avec range 2 avec range 3 0 -> 42 1 -> 55 2 -> Hello 3 -> -10
Collections¶
- Une collection est une structure de données qui permet de gérer un ensemble d'éléments
- Python propose des types de collections de base: listes, tuples, dictionnaires et ensembles
- Des méthodes et fonctions communes sont disponibles comme
len
,append
,pop
etpush
.
In [10]:
Copied!
# listes: eléments ordonnées identifés par leur indice
messages = ["J'aime", "le", "langage", "Python"]
print(messages, "- item count: ", len(messages))
messages.append("2022")
print("after append", messages)
last_message = messages.pop()
print("after pop", last_message, messages, messages[-1])
messages.pop(2)
print("after pop [2]", messages)
print("messages[1]->", messages[1], "- messages[-1]->", messages[-1])
print("messages[-2]->", messages[-2], "- messages[-3]->", messages[-3])
print("messages[0:2]->", messages[0:2], "- messages[:2]->", messages[:2])
print("messages[1:]->", messages[1:], "- (copie) messages[:]->", messages[:])
print(type(messages))
message = "Bonjour"
print(message[1:5]) # [1:5[
# listes: eléments ordonnées identifés par leur indice
messages = ["J'aime", "le", "langage", "Python"]
print(messages, "- item count: ", len(messages))
messages.append("2022")
print("after append", messages)
last_message = messages.pop()
print("after pop", last_message, messages, messages[-1])
messages.pop(2)
print("after pop [2]", messages)
print("messages[1]->", messages[1], "- messages[-1]->", messages[-1])
print("messages[-2]->", messages[-2], "- messages[-3]->", messages[-3])
print("messages[0:2]->", messages[0:2], "- messages[:2]->", messages[:2])
print("messages[1:]->", messages[1:], "- (copie) messages[:]->", messages[:])
print(type(messages))
message = "Bonjour"
print(message[1:5]) # [1:5[
["J'aime", 'le', 'langage', 'Python'] - item count: 4 after append ["J'aime", 'le', 'langage', 'Python', '2022'] after pop 2022 ["J'aime", 'le', 'langage', 'Python'] Python after pop [2] ["J'aime", 'le', 'Python'] messages[1]-> le - messages[-1]-> Python messages[-2]-> le - messages[-3]-> J'aime messages[0:2]-> ["J'aime", 'le'] - messages[:2]-> ["J'aime", 'le'] messages[1:]-> ['le', 'Python'] - (copie) messages[:]-> ["J'aime", 'le', 'Python'] <class 'list'> onjo
In [11]:
Copied!
# Tuples: une liste immuable (ou immutable)
menu_items = ("File", "Open", "Save", "Close")
print(menu_items, menu_items[1:3])
print(type(menu_items))
# menu_items[0] = "Help" # erreur car le tuple est en lecture seule
# Tuples: une liste immuable (ou immutable)
menu_items = ("File", "Open", "Save", "Close")
print(menu_items, menu_items[1:3])
print(type(menu_items))
# menu_items[0] = "Help" # erreur car le tuple est en lecture seule
('File', 'Open', 'Save', 'Close') ('Open', 'Save') <class 'tuple'>
In [12]:
Copied!
# dictionnaire (map en java): collection de valeurs identifiées par des clés
lol_character = {"name": "ashe", "hp": 80, "role": "adc", 2: "Hello"}
print(lol_character["name"], "- len(lol_character)", len(lol_character))
lol_character["attack"] = 10
print(lol_character["attack"])
print("attack" in lol_character, "defense" in lol_character)
for key in lol_character:
print(key, "->", lol_character[key])
for key, value in lol_character.items():
print(key, "->", value)
# ou bien en abrégé
for k, v in lol_character.items():
print(k, "->", v)
# dictionnaire (map en java): collection de valeurs identifiées par des clés
lol_character = {"name": "ashe", "hp": 80, "role": "adc", 2: "Hello"}
print(lol_character["name"], "- len(lol_character)", len(lol_character))
lol_character["attack"] = 10
print(lol_character["attack"])
print("attack" in lol_character, "defense" in lol_character)
for key in lol_character:
print(key, "->", lol_character[key])
for key, value in lol_character.items():
print(key, "->", value)
# ou bien en abrégé
for k, v in lol_character.items():
print(k, "->", v)
ashe - len(lol_character) 4 10 True False name -> ashe hp -> 80 role -> adc 2 -> Hello attack -> 10 name -> ashe hp -> 80 role -> adc 2 -> Hello attack -> 10 name -> ashe hp -> 80 role -> adc 2 -> Hello attack -> 10
In [13]:
Copied!
# set: ensemble de valeurs uniques non ordonnées
consoles = {"Super Nintendo", "Mega Drive"}
print(consoles, "len", len(consoles))
consoles.add("Mega Drive")
print("After add Mega Drive", consoles)
consoles.add("PSP")
print("After add PSP", consoles)
print("New set after union", consoles.union({"Nintendo", "Super Nintendo"}))
print("Mega Drive" in consoles)
print("Game Gear" in consoles)
# set: ensemble de valeurs uniques non ordonnées
consoles = {"Super Nintendo", "Mega Drive"}
print(consoles, "len", len(consoles))
consoles.add("Mega Drive")
print("After add Mega Drive", consoles)
consoles.add("PSP")
print("After add PSP", consoles)
print("New set after union", consoles.union({"Nintendo", "Super Nintendo"}))
print("Mega Drive" in consoles)
print("Game Gear" in consoles)
{'Super Nintendo', 'Mega Drive'} len 2 After add Mega Drive {'Super Nintendo', 'Mega Drive'} After add PSP {'Super Nintendo', 'PSP', 'Mega Drive'} New set after union {'Mega Drive', 'Super Nintendo', 'Nintendo', 'PSP'} True False