Variables et types¶
Pour écrire un programme, il faut utiliser des variables. Une variable consiste à associer une information à un nom. On peut ainsi manipuler ce nom et l’utiliser dans diverses situations. Par exemple, on peut attribuer le réel \(10\) à un_reel. Nous pouvons désormais utiliser la variable un_reel pour des opérations.
Il existe plusieurs types de variables : les types numériques, les chaines de charactères, les types modifiables ou mutable et les autres types d’objets souvent utiliser en programmation.
Une fonction utile à retenir est la fonction type() qui retourne une variable de type type. Des exemples seront donnés dans la suite de ce chapitre. Le chapitre 2 développe cette notion de fonction.
Les éléments non mutables¶
Un éléments non mutable est un élément que l’on ne peut pas modifier.
Les types numériques¶
Il existe plusieurs types numérique :
int
: entier compris entre \(-2 147 483 648\) et \(2 147 483 647\)long
: Entier long compris entre \(-\infty\) et \(-2 147 483 648\) ou entre \(2 147 483 648\) et \(+\infty\)float
: Nombre à virgule flottante float, valeur spécifiée avec un point dans le programmecomplex
: Nombre complexe
Les entiers¶
x = 5
y = -3
print(type(x))
<class 'int'>
Pour afficher dans la console le contenu de notre variable x
contenant la chaîne de caractères, on fait appel à la fonction print()
:
print(x)
5
Nombre à virgule flottante¶
Les nombes à virgule flottante (floats
) représentent les nombres réels. Ils sont écrits à l’aide d’un point.
x = 5.25
print(type(x))
x = 3.2E12
print(x)
<class 'float'>
3200000000000.0
Les complexes¶
Python permet de manipuler des nombres complèxes \(z=a+ib\), où \(a\) et \(b\) sont des nombres de type float
, et tel que \(i^2=(-i)^2=1\).
En python, l’unité imaginaire \(i\) est dénotée par la lettre j
.
x = 5j + 2
print(type(x))
x = complex(2,5)
<class 'complex'>
On peut aussi retrouver la partie imaginaire ou réelle de x
à l’aide de fonctions:
print(x.real)
print(x.imag)
2.0
5.0
Changement de type¶
Il est possible de passer de l’un à lautre type ou de forcer une variable numérique a être d’un certain type.
La conversion d’un entier se fait avec la fonction int()
, d’un flottant avec la fonction float()
et d’un complexe avec la fonction complex()
x = 2.0
print(type(x))
x = int(x)
print(type(x))
y = 2
print(type(y))
y = float(y)
print(type(y))
<class 'float'>
<class 'int'>
<class 'int'>
<class 'float'>
Les chaines de caractères¶
Présentation¶
Une chaîne de caractères (string en anglais), est une suite de caractères quelque soit la nature des caractères qui la compose. Les chaînes de caractères sont repérées à l’aide de guillemets simples ou doubles.
s = 'J\'aime les pizzas'
print(s)
print(type(s))
J'aime les pizzas
<class 'str'>
s = "J'aime 5 pizzas, le champagne \net Patrick Balkany"
print(s)
print(type(s))
print(len(s))
J'aime 5 pizzas, le champagne
et Patrick Balkany
<class 'str'>
49
Remarques:
Si la chaine est commencée par un guillemet simple, il faut utiliser
\
pour utilier le guillemet simple dans la chaine de caractèreOn peut mélanger les types de chractère
Le retour à la ligne se faire par l’utilisation de
\n
Pour récupérer la longueur d’une chaîne de caractères, Python propose la fonction
len()
Le caractère
\
est le caractère d’échappement. Il permet d’afficher d’appeler à plusieurs méchanisme de mise en page pour une sortie propre :
Code |
Description |
Code |
Description |
---|---|---|---|
|
Nouvelle ligne |
|
Retour à la ligne |
|
Tabulation |
|
Retour arrière |
|
Caractère |
|
Caractère |
Voir https://docs.python.org/3/reference/lexical_analysis.html
Manipulation d’une chaîne de caractères¶
La concaténation¶
La concaténation consiste à rassembler deux chaines de caractères :
s1 = 'J\'ai eu mon semestre'
s2 = ' au rattrapage'
print(s1 + s2)
J'ai eu mon semestre au rattrapage
On peut aussi répéter une même chaine de caractère à l’aide de l’opérateur * :
s1 = 'J\'ai eu mon semestre ! '
print(s1 * 3)
J'ai eu mon semestre ! J'ai eu mon semestre ! J'ai eu mon semestre !
Il est également possible d’ajouter à une chaîne de caractères le contenu d’une variable. Il s’agit de de l’outil python printf-style
. Il permet de former une chaine de caractères à l’aide plusieurs types d’informations en évitant de de voir les transformer au préalable puis de les concatener. Il suit le forma suivant :
".... %c1 .... %c2 " % (v1,v2)
c1
est un code qui indique le format dans lequel la variable v1
devra être transcrite.
Voici une liste des différents codes: https://docs.python.org/3/library/stdtypes.html#old-string-formatting
Example concret :
x = 2.0
y = 3
s = "pizzas"
res = "J'ai commandé %1.2f %s, on m'a livré %d pizzas" % (x, s, y)
print(res)
res = "J'ai commandé " + str(x) + " " + s + ", on m'a livré " + str(y) + " pizzas"
print(res)
J'ai commandé 2.00 pizzas, on m'a livré 3 pizzas
J'ai commandé 2.0 pizzas, on m'a livré 3 pizzas
La méthode format
fait à peu prêt la même chose mais propose un peu plus d’options pour formatter le texte. Il suffit d’utiliser les accolades {} comme des codes qu’elle remplace avec les valeurs passée en argument.
s = 'j\'aime vraiment la {}'
x = 'pizza'
print(s.format(x))
x = 'glace'
print(s.format(x))
j'aime vraiment la pizza
j'aime vraiment la glace
exterieur = 2
local = 0
print('Résultat du match : locaux {}, exterieurs {}'.format(local,exterieur))
Résultat du match : locaux 0, exterieurs 2
Indexation et extraction¶
Les chaînes de caractères peuvent être indexées. Cela signifie que chaque caractère possède un indice. L’indexation commence à \(0\) jusqu’à la longueur de la chaine moins un.
Pour obtenir le ie caractère d’une chaîne, on utilise des crochets.
Les exemples ci-dessous :
affiche le 4ème caractère de la chaine s
affiche du 2ème au 4ème caractère
affiche le 2ème caractère en partant de la fin
affiche du 1er au 2ème caractère
affiche la toute la chaine en partant de la fin (du 1ere caractère, jusqu’à la fin de la chaîne, par pas de -1)
s = s.format(x)
print(s[5])
print(s[1:5])
print(s[-2])
print(s[:2])
print(s[::-1])
e
'aim
c
j'
ecalg al tnemiarv emia'j
Quelques méthodes¶
Une chaine de caractère est en fait un défini comme un objet sous python. Un objet est une entité comprenant plein de méthodes. On les appelle en ajoutant un point (.
) après le nom de l’objet et en ajoutant le nom de la méthode que l’on souhaite utiliser.
Par exemple, la méthode upper()
permet de passer toute la chaine en majuscule. On peut trouver la liste des méthode sur le lien suivant : https://docs.python.org/3/library/stdtypes.html#string-methods
s = "C'est la grève générale"
print(s.count("grève"))
print(s.upper())
print(s.find("la"))
print(x.find("ertgetet"))
print(s.split(" "))
1
C'EST LA GRÈVE GÉNÉRALE
6
-1
["C'est", 'la', 'grève', 'générale']
Exercice¶
Remarque
Créer deux variables nommées
a
etb
afin qu’elles contiennent respectivement les chaînes de caractères suivantes :23 à 0
etC'est la piquette, Jack!
.Afficher le nombre de caractères de
a
, puis deb
.Concaténer
a
etb
dans une seule chaîne de caractères, en ajoutant une virgule comme caractère de séparation.Même question en choisissant une séparation permettant un retour à la ligne entre les deux phrases.
À l’aide de la méthode appropriée, mettre en majuscules
a
etb
.À l’aide de la méthode appropriée, mettre en minuscules
a
etb
.Extraire le mot
la
etJack
de la chaîneb
, en utilisant les indices.Rechercher si la sous-chaîne
piqu
est présente dansb
, puis faire de même avec la sous-chaînemauvais
.Retourner la position (indice) du premier caractère
a
retrouvé dans la chaîneb
, puis essayer avec le caractèrew
.Remplacer les occurrences du motif
a
par le motifZ
dans la sous-chaîneb
.Séparer la chaîne
b
en utilisant la virgule comme séparateur de sous-chaînes.(Bonus) Retirer tous les caractères de ponctuation de la chaîne b, puis utiliser une méthode appropriée pour retirer les caractères blancs en début et fin de chaîne. (Utiliser la librairie
regex
).
Booléens¶
Les booléens sont le résultat d’opérations logiques et ont deux valeurs possibles : True
ou False
. Il est nommé ainsi d’après George Boole, fondateur de l’algèbre de Boole son nom.
True
est équivaut à 1 et False
à 0.
x = True
y = False
print(x, y)
True False
x = True + True
print(x)
2
On se servira beaucoup des Booléens pour mettre de conditions. Par exemple :
note_marc = 9
note_isabelle = 8
valide = note_marc > 9
print('Martin a validé son année : {}'.format(valide))
print('Martin est Isabelle redoublent : {} '.format(note_marc < 10 and note_isabelle <10 ))
Martin a validé son année : False
Martin est Isabelle redoublent : True
Objet vide¶
L’objet vide, communément appelé null
, possède un équivalent en Python : None
. Pour l’assigner à une variable, il faut faire attention à la casse :
x = None
print(x)
None
Les éléments mutables¶
Les listes¶
Définition¶
Les listes s’écrivent entre [ ] et contiennent 0,1 ou beaucoup d’éléments. Chaque élément est séparé par une virgule. Elles sont très utiles lorsqu’il faut effectuer des ittérations. Nous verrons cela par la suite.
Pour faire appel aux élements d’une liste, on donne leur position dans la liste :
une_liste = [1,2,3,4]
une_autre_liste = ['hey','ho']
une_autre_liste_oui = ['hey',1]
print(type(une_liste))
print(une_liste)
print(une_autre_liste[0])
print("La longueur de ma 1ère liste est de", len(une_liste))
print(une_liste[::2])
<class 'list'>
[1, 2, 3, 4]
hey
La longueur de ma 1ère liste est de 4
[1, 3]
Une liste peut contenir des listes :
une_liste_de_liste = [une_liste, une_autre_liste]
print(une_liste_de_liste)
print(une_liste_de_liste[1][1])
print(une_liste_de_liste[0][1])
print(une_liste_de_liste[1][3])
[[1, 2, 3, 4], ['hey', 'ho']]
ho
2
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-21-85ab4bb3ae01> in <module>
3 print(une_liste_de_liste[1][1])
4 print(une_liste_de_liste[0][1])
----> 5 print(une_liste_de_liste[1][3])
IndexError: list index out of range
Remplacement¶
Pour modifier un élément dans une liste :
une_liste[0] = 5 # On modifie le 1er élément
print(une_liste)
une_liste = une_autre_liste*2 # On modifie tous les éléments de la liste
print(une_liste)
s = 'hey'
s[0] = 'y'
[5, 2, 3, 4]
['hey', 'ho', 'hey', 'ho']
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-72-09315c9943f8> in <module>
4 print(une_liste)
5 s = 'hey'
----> 6 s[0] = 'y'
TypeError: 'str' object does not support item assignment
Les méthodes¶
Une liste, comme une string, est un objet et possède des méthodes. Voici quelques une qui peuvent être utiles :
une_liste.append('hey')
print(une_liste)
une_liste.extend(une_autre_liste)
print(une_liste)
une_liste.remove('hey')
print(une_liste)
une_liste[0:2] = []
print(une_liste)
print('hey' in une_liste)
['hey', 'ho', 'hey', 'ho', 'hey']
['hey', 'ho', 'hey', 'ho', 'hey', 'hey', 'ho']
['ho', 'hey', 'ho', 'hey', 'hey', 'ho']
['ho', 'hey', 'hey', 'ho']
True
help(une_liste)
Help on list object:
class list(object)
| list(iterable=(), /)
|
| Built-in mutable sequence.
|
| If no argument is given, the constructor creates a new empty list.
| The argument must be an iterable if specified.
|
| Methods defined here:
|
| __add__(self, value, /)
| Return self+value.
|
| __contains__(self, key, /)
| Return key in self.
|
| __delitem__(self, key, /)
| Delete self[key].
|
| __eq__(self, value, /)
| Return self==value.
|
| __ge__(self, value, /)
| Return self>=value.
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
|
| __getitem__(...)
| x.__getitem__(y) <==> x[y]
|
| __gt__(self, value, /)
| Return self>value.
|
| __iadd__(self, value, /)
| Implement self+=value.
|
| __imul__(self, value, /)
| Implement self*=value.
|
| __init__(self, /, *args, **kwargs)
| Initialize self. See help(type(self)) for accurate signature.
|
| __iter__(self, /)
| Implement iter(self).
|
| __le__(self, value, /)
| Return self<=value.
|
| __len__(self, /)
| Return len(self).
|
| __lt__(self, value, /)
| Return self<value.
|
| __mul__(self, value, /)
| Return self*value.
|
| __ne__(self, value, /)
| Return self!=value.
|
| __repr__(self, /)
| Return repr(self).
|
| __reversed__(self, /)
| Return a reverse iterator over the list.
|
| __rmul__(self, value, /)
| Return value*self.
|
| __setitem__(self, key, value, /)
| Set self[key] to value.
|
| __sizeof__(self, /)
| Return the size of the list in memory, in bytes.
|
| append(self, object, /)
| Append object to the end of the list.
|
| clear(self, /)
| Remove all items from list.
|
| copy(self, /)
| Return a shallow copy of the list.
|
| count(self, value, /)
| Return number of occurrences of value.
|
| extend(self, iterable, /)
| Extend list by appending elements from the iterable.
|
| index(self, value, start=0, stop=9223372036854775807, /)
| Return first index of value.
|
| Raises ValueError if the value is not present.
|
| insert(self, index, object, /)
| Insert object before index.
|
| pop(self, index=-1, /)
| Remove and return item at index (default last).
|
| Raises IndexError if list is empty or index is out of range.
|
| remove(self, value, /)
| Remove first occurrence of value.
|
| Raises ValueError if the value is not present.
|
| reverse(self, /)
| Reverse *IN PLACE*.
|
| sort(self, /, *, key=None, reverse=False)
| Stable sort *IN PLACE*.
|
| ----------------------------------------------------------------------
| Static methods defined here:
|
| __new__(*args, **kwargs) from builtins.type
| Create and return a new object. See help(type) for accurate signature.
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| __hash__ = None
Attention, il y a des trucs un peu étrange de prime abord mais cohérents:
une_liste = [1,2,3]
une_autre_liste = une_liste
print(une_liste)
print(une_autre_liste)
une_liste[0] = 20
print(une_autre_liste)
une_autre_liste = list(une_liste)
print(une_autre_liste)
une_liste[0] = 1
print(une_liste)
print(une_autre_liste)
[1, 2, 3]
[1, 2, 3]
[20, 2, 3]
[20, 2, 3]
[1, 2, 3]
[20, 2, 3]
Les dictionnaires¶
Un dictionnaire est composé d’une clé et d’une valeur. Format d’un dictionnaire : {Clé : valeur}
nb_grevistes = { 'Paris' : 20 , 'Marseille' : 20000000}
print(nb_grevistes)
print(type(nb_grevistes))
print(nb_grevistes["Marseille"])
{'Paris': 20, 'Marseille': 20000000}
<class 'dict'>
20000000
On peut tester la présence d’une clef dans le dictionnaire :
print("Lens" in nb_grevistes)
False
L’extraction de valeurs peut aussi se faire avec get()
, qui retourne une valeur None
si la clé n’existe pas :
print(nb_grevistes.get("Lens"))
print(nb_grevistes.get("Marseille"))
None
20000000
On peut aussi extraire toutes les clefs ou toutes les valeurs :
clefs = nb_grevistes.keys()
print(clefs)
val = nb_grevistes.values()
print(val)
dict_keys(['Paris', 'Marseille'])
dict_values([20, 20000000])
Finalement, une méthodes bien sympa :
File "<ipython-input-80-004e7960a159>", line 1
Finalement, une méthodes bien sympa :
^
SyntaxError: invalid syntax
it = nb_grevistes.items()
print(it)
dict_items([('Paris', 20), ('Marseille', 20000000)])
Si il y a eu plusieurs manif, on peut ajouter l’information dans le dictionnaire :
nb_grevistes["Marseille"] = [20000,200000000, 30000000000000]
print(nb_grevistes)
{'Paris': 20, 'Marseille': [20000, 200000000, 30000000000000]}
ou une ville :
nb_grevistes["Lille"] = 10000
print(nb_grevistes)
{'Paris': 20, 'Marseille': [20000, 200000000, 30000000000000], 'Lille': 10000}
Exercices¶
1¶
Écrire un programme, qui définit 3 variables de type texte, de type nombre entier et de type nombre décimal. Affichez leur type.
Affectez les variables par les valeurs 6.892 et 19.7.
Calculez et affichez la valeur de la vitesse
Améliorez l’affichage en imposant un chiffre après le point décimal
1 euro vaut environ 1.345 dollar. Ecrivez un programme permettant de calculer combien vaut 1250 euros.
Écrire un programme, qui donne la mesure l’hypothénuse d’un triangle rectangle sachant que l’utilisateur rentre le côté opposé et le côté adjacent d’un triangle rectangle. Pour demander de rentrer une information, on utilise la fonction
input()
après l’avoir importée :from math import *
Calculez votre moyenne sur le semestre
2¶
Créer un dictionnaire nommé
biblio
, comprenant les couples clés-valeurs suivants :clé :
id
, valeur :1
,clé :
auteur
, valeur : une liste dans laquelle sont renseignés le nom et le prénomRomain
,Gary
.clé :
date
, valeur :1960
Ajouter le couple suivant au dictionnaire
biblio
: clé :titre
, valeur :La promesse de l'aube
.Rechercher s’il existe une entrée dont la clé vaut
auteur
dans le dictionnairebiblio
.Modifier la valeur de l’entrée
auteur
, pour proposer une nouvelle liste :Emile
etAjar
.
3¶
Créer une list qui va de 5 à 20, puis :
triez et affichez la liste
ajoutez l’élément 4 à la liste
affichez l’indice de l’élément 2