Les types de données#

La gestion des nombres#

>>> 2                   # Entier
2
>>> 2.                  # Flottant
2.0
>>> 2e3                 # 2000
2000.0
>>> 6.022_140_76e23     # Nombre d'avogadro (les milliers sont séparés par des _ pour améliorer la lisibilité)
6.02214076e+23

Les opérateurs mathématiques#

>>> 25 / 3          # Division traditionnelle
8.333333333333334
>>> 25 // 3         # Partie entière de la division
8
>>> 25 % 3          # Reste de la division. On parle aussi de modulo
1
>>> 2**8            # 2 à la puissance 8
256
>>> 3*5 == 15       # Opérateur de comparaison. Retourne True si vrai sinon False
True

Les fonctions mathématiques#

>>> round(3.1416,2) # Arrondi d'un flottant à 2 chiffres après la virgule
3.14
>>> min(12,7.0,3)   # Minimum de plusieurs chiffres
3
>>> max(12,7.0,3)   # Maximum de plusieurs chiffres
12

Les fonctions de conversion#

>>> int(12/3)       # Conversion d'un flottant en entier
4
>>> float(3+2)      # Conversion d'un n-entier en flottant
5.0
>>> type(1.414)     # Nature du nombre
<class 'float'>
>>> bin(5)          # Conversion d'un entier en binaire
0b101
>>> format(5,'b')   # Conversion d'un entier en binaire

Note

Notons que l’on n’a pas utilisé de fonctions « complexes ». Ce sera l’objet d’une autre leçon.

Questions
  • Calculer \((6\times9)-(4\times3)\)

  • Calculer \((6\times9-4\times3)\)

  • Calculer \(6\times9-4\times3/4\)

  • Calculer \((6\times9-4\times3)/4\)

  • Calculer \((4+3)^5\)

  • Déterminer \((47\bmod6)\) sans utiliser l’opérateur %. Comparer le résultat avec l’opérateur %

  • Que se passe-t-il si l’on divise 545 par \((15 - 3\times5)\) ?

  • Écrire un programme qui calcule le volume d’un parallélépipède rectangle dont sont fournis au départ la largeur, la hauteur et la profondeur. On rappelle que le volume V est égale au produit de la hauteur par la largeur par la profondeur.

Réponses
>>> (6*9)-(4*3)
42
>>> 6*9-4*3
42
>>> 6*9-4*3/4
51.0
>>> (6*9-4*3)/4
10.5
>>> (4+3)**5
16807
>>> 47-(47//6)*6 == 47%6
True
>>> 545 / (15-5*3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

>>> l = int(input("Saisir la largeur :"))
>>> h = int(input ('Saisir la hauteur :'))
>>> p = int(input ('Saisir la profondeur :'))
>>> print ('Volume du parralélépipède : ',l*h*p)

Python suit les règles de priorité des mathématiques. En revanche, notons qu’une division retourne toujours un nombre flottant.

Important

  • nombre sans “.” → Entier

  • nombre avec “.” → Flottant

La gestion du texte#

>>> 'Bonjour'           # Affichage d'un texte avec simple quote
'Bonjour'
>>> "Bonjour"           # Affichage d'un texte avec double quote
'Bonjour'
>>> "N'hésitez pas à faire des commentaires"            # Une simple quote entre deux doubles quotes
"N'hésitez pas à faire des commentaires"
>>> 'N\'hésitez pas à faire des commentaires'           # Une simple quote "echappée" entre deux simples quotes
"N'hésitez pas à faire des commentaires"
>>> print('N\'hésitez pas à faire des commentaires')    # Utilisation de la fonction print() pour afficher le résultat calculé.
N'hésitez pas à faire des commentaires
>>> print('Un texte en\ndeux lignes')                   # Utilisation du caractère \n pour sauter de ligne
>>> print('Un text\ttabulé...')                         # Utilisation du caractère \t pour ajouter une tabulation
Un text tabulé...
>>> print('La concaténation'+' '+'de deux textes')      # Concaténation de trois textes
La concaténation de deux textes
>>> print('La somme de 4 + 4 fait', 8)                  # Concaténation d'un texte et d'un nombre. Valable uniquement pour l'affichage
La somme de 4 + 4 fait 8
>>> res = input('Entrez votre nom\n')                   # Entrée d'une valeur en ligne de commande
Entrez votre nom
toto
>>> print(res)                                          # Affichage du contenu de la variable res
toto

Les fonctions de conversion et d’extraction#

>>> str(2)              # Conversion d'un entier en texte
'2'
>>> int('2')            # Conversion d'un texte en entier
2
>>> float('1.414')      # Conversion d'un texte en flottant
1.414
>>> int('1.414')        # Conversion d'un texte en entier. Provoque une erreur car non entier.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1.414'
>>> 'abcdef'[3]         # Retourne le 4ième caractère du texte
d
>>> 'abcdef'[0:2]       # Retourne les 2 premiers caractères
abc
>>> 'abcdef'[-1]        # Retourne la dernère lettre du texte
f
>>> 'abcdef'.index('a')
Questions
  • Evaluez « Da » \(\times\) 4

  • Evaluez « Da » + 3

  • Evaluez (« Pa » + « La ») \(\times\) 2

  • Evaluez (« Da » \(\times\) 4) / 2

  • Écrire un programme qui affiche la suite de symboles suivante : * ** *** **** *****

  • Écrire un script qui recopie une chaîne (dans une nouvelle variable), en insérant des astérisques entre les caractères. Ainsi par exemple, « gaston » devra devenir « g*a*s*t*o*n »

Réponses
>>> "Da" * 4
'DaDaDaDa'
>>> "Da" + 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
>>> ("Pa"+"La") * 2
'PaLaPaLa'
>>> ("Da"*4) / 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'str' and 'int'

>>> a = ''
>>> for i in range(1,6):
...     a = a + ' ' + '*'*i
...
>>> print(a)
* ** *** **** *****

>>> for i in range(0,len(x)):
...     y = y +x[i]+'*'
...
>>> y
'g*a*s*t*o*n*'
>>> print(y[0:-1])

Les listes#

Les listes sont utilisées pour gérer une énumération homogène ou hétérogène de valeurs.

>>> [1,2,3,5,7,11]          # Liste des premiers nombres premiers
[1, 2, 3, 5, 7, 11]
>>> [10, "Hello", 3.14]     # Liste de valeurs hétérogènes
[10, 'Hello', 3.14]
>>> [ [1,0], [0,-1]]        # Liste de liste / représentation linéaire d'une matrice 2D
[[1, 0], [0, -1]]

Manipuler une liste#

Les valeurs présentes dans une liste peuvent être accédées via un indice. Le permier élément porte l’indice \(\emptyset\).

maListe: [ 'arbre', 'vélo', 'fleur']
indice :      0        1       2
>>> [1,2] + [3,4]                   # Addition de deux listes
[1, 2, 3, 4]
>>> [1,2] + [3,]                    # Ajout d'une valeur
[1, 2, 3]
>>> [1,2] + [3]                     # Ajout d'une valeur
[1, 2, 3]
>>> [1,2].append(3)                 # Ajout d'une valeur
[1, 2, 3]
>>> [1,2,3][:-1]                    # Suppression à l'affichage de la dernière valeur
[1, 2]
>>> [1, 2, 3][1]                    # Accès à la 2ème valeur de la liste
2
>>> [1,2,3][::2]                    # Sélectionne les valeurs dont l'indice est modulo 2
[1, 3]
>>> del a[2]                        # Suppresion de la 3ième valeur
>>> del a[1:4]                      # Suppression des valeurs dont les positions sont entre 1 et 4
>>> x = [1,12,14,5]
>>> x.index(12)                     # Retrouve la position de la valeur 12 dans la liste
2
>>> x.pop(x.index(12))              # Supprime la valeur 12 de la lsite
[1,14,5]

Finalement, on se rend compte que l’accès au contenu d’une liste fonctionne sur le modèle liste[début:fin:pas]

>>> a = [18, 19, 5, 8, 2]
>>> print(a)
[18, 19, 5, 8, 2]
>>> len(a)                          # Longueur de la liste
5
>>> a.sort()                        # Trie la liste en ordre croissant
>>> print(a)
[2, 5, 8, 18, 19]
>>> a.sort(reverse=True)            # Trie la liste en ordre décroissant
[19, 18, 8, 5, 2]
>>> a = 'Hello World'
>>> a.sort()                        # Tente sans succès de trier le texte
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'sort'
>>> a = list(a)                     # Converti le texte en liste de caractères
>>> print(a)
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> a.sort()                        # Tri une liste de caractères
[' ', 'H', 'W', 'd', 'e', 'l', 'l', 'l', 'o', 'o', 'r']
>>> set(a)
{'o', 'r', ' ', 'l', 'W', 'H', 'd', 'e'}
>>> b = list(set(a))                # Transforme le set en liste
['o', 'r', ' ', 'l', 'W', 'H', 'd', 'e']
>>> ''.join(b)                      # Fusionne les éléments de la liste avec '' comme séparateur
'or lWHde'

Fonctions associées aux listes#

>>> maListe = list(range(0,10))
>>> min(maListe)
0
>>> max(maListe)
9
>>> sum(maListe)
45

Note

Notons que le texte est géré comme une liste mais n’est pas une liste.

Questions
  • Constituez une liste semaine contenant les 7 jours de la semaine.
    • À partir de cette liste, comment récupérez-vous seulement les 5 premiers jours de la semaine d’une part, et ceux du week-end d’autre part ? Utilisez pour cela l’indiçage.

    • Cherchez un autre moyen pour arriver au même résultat (en utilisant un autre indiçage).

    • Trouvez deux manières pour accéder au dernier jour de la semaine.

    • Inversez les jours de la semaine en une commande.

  • Combien y a-t-il de nombres pairs dans l’intervalle [2, 10000] inclus ? Donnez la solution en une seule ligne de commande.

  • Soient les listes suivantes :
    • t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

    • t2 = [“Janvier”, “Février”, “Mars”, “Avril”, “Mai”, “Juin”, “Juillet”, “Août”, “Septembre”, “Octobre”, “Novembre”, “Décembre”]

    Écrire le programme qui crée une nouvelle liste t3 qui devra contenir tous les éléments des deux listes en les alternant, de telle manière que chaque nom de mois soit suivi du nombre de jours correspondant : [“Janvier”,31,”Février”,28,”Mars”,31, etc…].

  • Écrire un programme qui analyse un par un tous les éléments d’une liste de mots (par exemple : [“Jean”, “Maximilien”, “Brigitte”, “Sonia”, “Jean-Pierre”, “Sandra”] ) pour générer deux nouvelles listes. L’une contiendra les mots comportant moins de 6 caractères, l’autre les mots comportant 6 caractères ou davantage.

  • Écrire un programme qui recherche le plus grand élément présent dans une liste donnée par 2 méthodes distinctes (Ex [32, 5, 12, 8, 3, 75, 2, 15])

Réponses
>>> sem = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche']
>>> sem[0:5]        # ou sem[0:-2]
>>> sem[5:]         # ou sem[-2:]
>>> sem[len(sem)-1] # ou sem[-1]
>>> sem[::-1]
>>> len(list(range(2,10_000))[::-2])
4999
>>> lst = [32, 5, 12, 8, 3, 75, 2, 15]
>>> max(lst)        # Retourne la valeur max de la liste
>>> lst.sort()      # Trie la liste
>>> lst[-1]         # Affiche la valeur la plus grande dans la liste

Il est aussi possible d’utiliser les listes comme des piles ou des files. Vous trouverez plus d’information ici.

Les dictionnaires#

Un dictionnaire est une liste d’élément clé/valeur. Chaque valeur pouvant être un entier, un flottant, un texte, une liste ou… un dictionnaire.

>>> mydict = {}                     # Initialisation du dictionnaire
>>> mydict['nom'] = 'France'        # Ajout de la valeur nom
>>> mydict['capitale'] = 'Paris'    # Ajout de la valeur capitale
>>> mydict['codeISO'] = 'FRA'       # Ajout du Code ISO
>>> mydict['FetNat'] = '14 juillet' # Ajout de la valeur Fête nationale
>>> mydict['superficie'] = 672_051  # Ajout de la valeur superficie
>>> mydict['departements'] = ['Ain', 'Aisne']
>>> mydict
{'nom': 'France', 'capitale': 'Paris', 'codeISO': 'FRA', 'FetNat': '14 juillet', 'superficie': 672051, 'departements': ['Ain', 'Aisne']}

On peut accéder à un élément de la liste en utilisant sa clé

>>> mydict['nom']                   # Retourne la valeur nom
'France'
>>> mydict['population']            # Retourne la valeur population
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'population'
>>> mydict.get('nom')               # Retourne la valeur nom
'France'
>>> mydict.get('population')        # Retourne aucune valeur. La clé n'existe pas
>>>
>>> for key in mydict:
...     print(key, mydict(key))
nom France
capitale Paris
codeISO FRA
FetNat 14 juillet
superficie 672051
departements ['Ain', 'Aisne']
>>> mydict.keys()                   # Liste des clés du dictionnaire
dict_keys(['nom', 'capitale', 'codeISO', 'FetNat', 'superficie', 'departements'])
>>> mydict.values()                 # Liste des valeurs du dictionnaire
dict_values(['France', 'Paris', 'FRA', '14 juillet', 672051, ['Ain', 'Aisne']])

On peut trier les données du dictionnaire.

>>> stats= {'e':12.10, 's':6.51, 'a':7.11, 'n':6.39, 'i':6.59 }
>>> sorted(stats)                   # Liste et trie les clés par clé
['a', 'e', 'i', 'n', 's']
>>> sorted(stats,key=stats.get)     # Liste et trie les clés par valeur
['n', 's', 'i', 'a', 'e']
Questions
  • Construire une liste contenant les numéros de mois, noms de mois et jours de mois

  • Afficher le nom des mois pairs.

  • Afficher la somme des jours de tous les mois.

Réponses
mois:list = ['Janvier', 'Fevrier', 'Mars']
jours:list = [31, 28, 31]
maliste:list = []
for i in range(0,len(mois)):
    tmp:dict = {}
    tmp['NoMois'] = i+1
    tmp['mois'] = mois[i]
    tmp['jours'] = jours[i]
    maliste.append(tmp)
for i in maliste:
    if i['NoMois'] % 3 == 0:
        print(i['mois'])

nbjours: int = 0
for i in maliste:
    nbjours += i['jours']
print(nbjours)