int
, float
, str
, bool
), les types construits sont des structures de données qui peuvent comporter d'autres types de données. +
, *
, //
…len
, print
….append(x)
, .upper()
…>>> mot = "bonjour"
>>> mot.upper()
'BONJOUR'
.upper()
agit sur un objet de type str
(chaîne de caractères). Le point qui sépare l'objet de la méthode signifie que l'on appelle la méthode de ce type d'objet. Cette méthode s'applique ainsi à l'objet. Il existe de nombreuses méthodes spécifiques aux différents types d'objets. Exemple : x = "bonjour"
ou x = [4, 6, 2, 7]
ou x = (1, 7, 9)
.
"..."
ou des simples guillemets '...'
.[..., ..., ...]
.(..., ..., ...)
.
Les listes, au contraire sont muables («mutable» en anglais) et permettent d'ajouter, de retirer, ou de réorganiser leurs éléments sur place au sein de l'objet. Il est alors inutile de définir une nouvelle variable si l'on souhaite apporter une modification.
Dans le tableau suivant, x
est une séquence (liste, tuple, chaîne de caractère ...).
x[i]
i
ième élément de x avec l'instruction. Le premier élément porte l'indice 0
et le dernier l'indice len(x)-1
.
IndexError: list index out of range
.
[1, 7, 5][0]
renvoie l'entier 1
, "bonjour"[3]
renvoie le caractère "j"
L = ["Hello!", [49, 54], (1, 2, 0)]
, l'instruction L[1][0]
renvoie l'entier 49
.
x[-i]
"bonjour"[-1]
renvoie le caractère "r"
.
x[d:f]
x
. Les éléments sélectionnés seront compris entre d
et f
exclu. La liste x
n'est pas définitivement modifiée (un slice est une copie).
(4, 5, 7, 6)[1:3]
renvoie le tuple (5, 7)
.
x[d:f:p]
x
. Les éléments sélectionnés seront compris entre
le d
ième (début) et f
ième (fin) exclu avec un pas de p
.
"bonjour"[4:1:-1]
renvoie "ojn"
et [4, 5, 7, 6][::-1]
renvoie la liste [6, 7, 5, 4]
.
d
et/ou f
sont omis, tout est pris depuis le début et/ou jusqu'à la fin.
len(x)
x
.
len("Hello!")
renvoie l'entier 6
et len([4, 5, 6, 7])
renvoie 4
.
max(x)
et min(x)
max([5, 7, 1, 6])
renvoie l'entier 7
et min("salut")
,
le caractère "a"
.
in et not in
x
ou tester leur présence dans x
.
"a" in "Hello!"
renvoie le booléen False
, 4 in [2, 4, 6]
renvoie le booléen True
.
x.count(n)
n
dans x
par la méthode x.count(n)
.
[4, 7, 5, 3].count(2)
renvoie l'entier 0
car aucun 2
n'est présent dans la liste.
*
ou +
"a"*3
renvoie la chaîne de caractères "aaa"
et [10, 20, 30] + [40, 50]
renvoie la liste [10, 20, 30, 40, 50]
.
x.index(n)
x
.
"Hello!".index("l")
renvoie l'entier 2
.
(1, 7, 5)[5]
["Hello!", [49, 54], (1, 2, 0)][0][4]
[1, 2, 3, 4, 5][-2]
"bonjour"[1:4]
"hippopotomonstrosesquippedaliophobie"[4:11:2]
len([4, 5, 6, 7, 8, 9, 10])
max("Salut")
"o" in "Hello!"
"4" in [2, 4, 6]
"Abracadabra !".count("a")
[[0]*3]*2
"hi"+"po"*2
[1, 4, 6, 4].index(4)
pig_latin(mot)
donnant la conversion en pig latin d'un mot.
Dans le tableau suivant, x
est une chaîne de caractère.
x = ""
ou bien x = ''
False
.
x.upper()
et x.lower()
"hello".upper()
renvoie la chaîne de caractères "HELLO"
.
x.capitalize()
"bonjour".capitalize()
renvoie la chaîne de caractères "Bonjour"
.
x.replace(a,b)
"forte".replace("t", "m")
renvoie la chaîne de caractères "forme"
.
x.find(y)
y
dans x
.
"Si six scies scient six cyprès, six cent six scies scient six cent six cyprès.".find("six")
renvoie l'entier 3
.
list(x)
list("jour")
renvoie la liste ["j", "o", "u", "r"]
x.split()
"Baptiste MARTIN".split()
renvoie la liste ["Baptiste", "MARTIN"]
prenom, nom = "Baptiste MARTIN".split()
ord(x)
chr()
.
ord("a")
renvoie l'entier 97
et ord("A")
l'entier 65 ; aussi, chr(65)
renvoie "A"
.
x.strip()
" Turing ".strip()
renvoie la chaîne de caractères "Turing"
x.format(…)
"Bonjour {0} de la planète {1}.".format("Julie", "Terre")
renvoie la chaîne de caractères "Bonjour Julie de la planète Terre."
"Bonjour {nom} du lycée {lyc}.".format(nom="Victor", lyc="Déodat")
renvoie la chaîne de caractères
"Bonjour Victor du lycée Déodat."
f"Bonjour {x}"
a = 2
et b = 3
alors f"{a} + {b} = {a+b}"
renvoie la chaîne de caractère avec "2 + 3 = 5"
.
Ce qui est entre accolades est interprété comme une instruction python.
\
"Il s'écria : \"Je m'appelle O'neill avec deux \"L\".\""
retourne la chaîne de caractères
Il s'écria : "Je m'appelle O'neill avec deux "L"."
Ici on évite que le premier guillemet soit interprété comme étant la fin de la chaîne de caractère en l'échappant avec \
.
"Mathis".lower()
"MATHIS".capitalize()
"sceau".replace("c", "").replace("eau", "ot").replace("o", "au")
"P_3_3".split("_")
"sssserpents".strip("s")
f"Bonjour {nom} !"
sachant que nom = "Raphaël"
.find()
pour obtenir la position du deuxième "six"
dans "Si six scies scient six cyprès, six cent six scies scient six cent six cyprès.".find("six").
Eric, Eric, bo-beric
Banana-fana fo-feric
Fee-fi-mo-meric
Eric !
|
|
|
|
a = [1, 2, 3]
b = a
b[0] = 5
print(a)
Dans le tableau suivant, x
est une liste.
x = []
x.append(e)
x = x + [5]
ou x += [5]
mais qui
sont moins performants en terme de ressources mémoire car une copie entière de la liste est réalisée.
liste = [1, 2, 3, 4]
, liste.append(5)
ne retourne rien mais
modifie directement l'objet liste car les liste sont muables.
x.insert(i, e)
e
en position d'indice i
dans une liste.
x.extend(li)
x = x + [5, 6, 7]
ou x += [5, 6, 7]
liste = [2, 4, 8, 10]
puis liste.extend(2, 6)
x.sort()
liste = [5, 4, 9, 2]
puis liste.sort()
; liste vaut alors [2, 4, 5, 9]
.
x.reverse()
liste[::-1]
qui renvoie, lui, une copie de la liste retournée.
x.remove(e)
[2, 3, 4, 3, 6, 8]
, liste.remove(3)
modifie la liste en [2, 4, 3, 6, 8]
.
a = x.pop(i)
i
dans la liste et l'affecter à une variable.
liste = [2, 3, 4, 12, 6, 8]
, liste.pop(3)
retourne l'entier 12
et modifie la liste.
del liste[i]
i
dans une liste.
liste = [4, 5, 3, 2, 7]
, del liste[2]
retire l'entier 3
de la liste.
del
liste supprime complètement la liste.
liste = [1, 2, 3, 4]
après chacune des instructions suivantes (on considère pour chaque question,
l'état de la liste modifiée par les questions précédentes puisque qu'une liste est muable) :
liste.append(5).extend(2, 6)
liste.append(3)
liste.insert(2, 5)
liste.sort()
liste.pop(2)
liste.remove(5)
liste.reverse()
.sort()
sur la liste ["cochon", "cheval", "chien", "chat"]
?
sup5c(liste)
qui à partir d'une liste de mots, renvoi la liste purgée de tous les mots ayant exactement 5 caractères.
animaux = ['lapin', 'chat', 'chien', 'poisson', 'vache', 'cochon', 'oiseau']
[i for i in range(10)]
génère une liste d'entier de 0
à 9
. Cette instruction est
équivalent à list(range(10))
.
Exemple : a = [i*2 for i in range(5)]
[0, 1, 4, 9, 16, 25]
[1, 2, 5, 10, 17, 26]
coord = (4, 2) # affectation du tuple (4, 2) à la variable coord
# affectation multiple :
a, b = 2, 3 # a prend la valeur 2 et b la valeur 3
# échange de valeurs
b, a = a, b # a prend la valeur de b et b celle de a
arg = (10, 3)
soit correctement distribué sur les paramètres a
et b
de la fonction div_eucl
, il faut faire précéder *arg
d'un astérisque dans l'appel de la fonction. Pour le retour : Si une fonction a besoin de retourner plusieurs valeurs, il est possible de retourner un tuple. Dans ce cas, les parenthèses doivent/peuvent être omises. Il est alors possible d'utiliser plusieurs variables pour recevoir séparément les valeurs retournées par la fonction grâce à une affectation multiple, ou bien une seule variable qui sera alors un tuple.
def div_euclidienne(a, b): # définition d'une fonction qui prend deux arguments
return a//b, a%b # et renvoi un tuple de deux valeurs (parenthèses omises)
arg = (10, 3) # définition des arguments à donner à la fonction
x, y = div_euclidienne(*arg) # Affectation multiple du retour de la fonction
res = div_euclidienne(*arg) # Affectation simple ()
print(x, type(x))
print(y, type(y))
print(res, type(res))
"661163"
)
[(6, 3), (1, 2), (3, 1)])
.
# Création d'un tableau de 3 lignes et de 4 colonnes
# avec une liste de 3 listes contenant chacune 4 éléments
tab = [[0, 1, 1, 0], # 1re ligne
[1, 2, 2, 1], # 2e ligne
[3, 5, 5, 3]] # 3e ligne
a = tab[0][1] # renvoi l'élément de la 1ère ligne et de la deuxième colonne
Case du plateau de jeu | Valeur |
---|---|
Simple (verte) | 1 |
Lettre Double (bleu clair - LD) | 2 |
Lettre Triple (bleu foncé - LT) | 3 |
Mot Double (jaune - MD) | 4 |
Mot Triple (rouge - MT) | 5 |
[[i]*3 for i in range(2)]
génère le tableau :
[[0, 0, 0],
[1, 1, 1]]
En effet, si on regarde la structure de cette instruction, les crochets extérieurs forme une liste à l'intérieur de laquelle il est littéralement écrit que l'on y met [i]*3
c'est-à-dire [i, i, i]
pour chaque i
dans range(2)
c'est-à-dire [0, 1]
.
[[0, 1, 2, 3, 4],
[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6],
[3, 4, 5, 6, 7],
[4, 5, 6, 7, 8]]
for
. # Pour parcourir les valeurs
for ligne in tab: # parcourt les lignes du tableau, une à une
for el in ligne: # parcourt les éléments de la ligne, un par un
# Pour parcourir les valeurs avec leurs coordonnées
for y in range(len(tab)): # y est l'indice de la ligne (en partant d'en haut)
for x in range(len(tab[y])): # x est l'indice de la colonne (en partant de la gauche)
el = tab[y][x] # el prend la valeur de la y-ième ligne et x-ième colonne
tableau_aleatoire(x, y)
qui génère un tableau d'entiers aléatoires compris entre 0 et 1000 avec x
lignes et y
colonnes.
dico = {} # crée un dictionnaire vide
dico = {"nom":"O'neill", "taille":1.76} # crée un dictionnaire avec deux éléments :
# une chaîne de caractère "O'neill" repéré par la clé "nom"
# et un flottant 1.76 repéré par la clé "taille".
dico["prenom"] = "Jack" # ajoute la chaîne de caractère "Jack" avec la clé "prenom"
len(dico) # renvoie le nombre d'élément dans le dictionnaire dico
del dico["prenom"] # supprime l'élément de la clé "prenom" du dictionnaire dico
b = dico.pop("taille") # supprime l'élément de la clé "taille" du dictionnaire et affecte sa valeur à la variable b
defis = {"P_3_1":{"nb_points":1, "titre":"De Fahrenheit à Celsuis", "themes":["python", "variables"]},
"P_3_2":{"nb_points":1, "titre":"De pouce à cm", "themes":["python", "variables"]},
"P_3_3":{"nb_points":2, "titre":"Étoile rouge", "themes":["python", "test"]},
"P_3_4":{"nb_points":3, "titre":"Cube coloré en perspective", "themes":["python", "boucle"]}
}
1 - Quelle instruction permet d'obtenir le titre du défis "P_3_2"
?
"FOR"
au défi "P_3_4"
?
"P_3_3"
, en le passant de 2 points à 4 points ?
dico = {"taille":1.73, "masse":70}
dico["taille"] # récupère la valeur de la clé "taille" du dictionnaire
dico.keys() # renvoie une séquence avec les clés du dictionnaire : ["taille", "masse"]
dico.values() # renvoie une séquence avec les valeurs du dictionnaire : [1.73, 70]
dico.items() # renvoi une séquence de tuple (clé, valeur) : [("taille", 1.73), ("masse", 70)]
for cle, val in dico.items(): # boucle sur les clés et les valeurs
for val in dico.values(): # boucle sur les valeurs
for cle in dico: # boucle sur les clés (équivalent à for cle in dico.keys():)
if "prenom" in dico : # vérifie la présence de la clé "prenom" dans le dictionnaire : False
if not "prenom" in dico : # vérifie l'absence de la clé "prenom" dans le dictionnaire : True
scrabble = {'A':1, 'B':3, 'C':3, 'D':2, 'E':1, 'F':4, 'G':2, 'H':4, 'I':1,
'J':8, 'K':10, 'L':1, 'M':2, 'N':1, 'O':1, 'P':3, 'Q':8, 'R':1,
'S':1, 'T':1, 'U':1, 'V':4, 'W':10, 'X':10, 'Y':10, 'Z':10}
Créer la fonction score(mot)
qui à partir du mot formé, retourne le score. (Ne pas tenir compte du plateau de jeu pour cet exercice !)
def ma_fonction() : # définition d'une fonction appelée ma_fonction
print("Hello world!") # qui écrit "Hello world!" dans la console
dico = {"saluer":ma_fonction} # creation d'un dictionnaire contenant la fonction
dico["saluer"]() # appel de la fonction ma_fonction
liste = [("a",1), ("b",2)] # définition d'une liste de tuples (clé, valeur)
dict(liste) # conversion en dictionnaire
dico = {"a":1, "b":2} # EN SENS INVERSE : définition d'un dictionnaire
list(dico.items()) # conversion en liste de tuples (clé, valeur)
def div_eucl(a, b): # définition d'une fonction qui prend deux arguments
return a//b, a%b # et renvoi un tuple de deux valeurs
arg = {"b":3, "a":10} # définition des arguments nommés à donner à la fonction
div_eucl(**arg) # appel de la fonction avec les arguments nommés du dictionnaire
arg
soit bien distribué aux bons paramètres a
et b
de la fonction div_eucl
, il faut que les clés du dictionnaire aient le même nom que les paramètres de la fonction et le faire précéder de deux
astérisques **arg
dans l'appel de la fonction. a
à une nouvelle variable b
(ligne 2), on ne crée pas de copie de la valeur mais une copie de la référence de la valeur. b
est alors un alias de a
. Ainsi a
et b
ont la même référence, c'est-à-dire qu'ils pointent vers le même objet.
id()
. Il existe aussi le mot-clé is
qui vérifie si deux variables sont en réalité le même objet.
a = [1, 2, 3]
b = a
print(id(a))
print(id(b))
print(a is b)
a[0] = 5
print(b[0])
b = a.copy()
b = a[::]
a = [[1, 2], 3]
b = a.copy()
a[1] = 100
a[0][0] = 200
print(b) # affiche [[200, 2], 3]
deepcopy()
du module copy. from copy import deepcopy
a = [[1, 2], 3]
b = deepcopy(a)
a[1] = 100
a[0][0] = 200
print(b) # affiche [[1, 2], 3]
import this
dans une console python.