Skip to content

Instantly share code, notes, and snippets.

@YannBouyeron
Last active October 25, 2024 14:27
Show Gist options
  • Save YannBouyeron/18aca47587fe3e153e1e630af7640674 to your computer and use it in GitHub Desktop.
Save YannBouyeron/18aca47587fe3e153e1e630af7640674 to your computer and use it in GitHub Desktop.
Tutoriel Python: les bases du langage python

Tutoriel Python

Copyright (c) Yann Bouyeron.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

I Definir une variable

Pour définir une variable, vous devez lui donner un nom sans espace et commençant obligatoirement par une lettre. Vous devez ensuite lui attribuer une valeur ou un contenu en utilisant le signe "=". Après avoir créé une variable, vous pouvez appeler cette variable dans le Shell en écrivant son nom, ce qui entraînera l'affichage de son contenu.

>>> ma_variable = 5
>>> ma_variable
5

Les différents types de variables

Différents types de contenus peuvent être attribués à une variable:

>>> ma_variable = 5
>>> type(ma_variable)
<type 'int'>
    
>>> ma_variable2 = 5.0
>>> type(ma_variable2)
<type 'float'>

>>> ma_variable3 = "cinq"
>>> type(ma_variable3)
<type 'str'>

La fonction type(nom_de_la_variable) permet de connaître le type d'une variable préalablement définie.
Le type int : ce sont des nombres entiers relatifs.
Le type float : ce sont des nombres réels (avec un point représentant la virgule).
Le type str : ce sont des chaînes de caractères , qui doivent être écrites entre guillemets

Modifier une variable.

Comme son nom l'indique, une variable peut varier !

>>> var = 2
>>> var
2
>>> var = 34
>>> var
34

Les opérations sur les variables de types int ou float

Il est possible d'effectuer des opérations avec les entiers de type int et les réels de type float:

>>> a = 5
>>> b = 2
>>> a + b
7
>>> a - b
3
>>> a * b
10
>>> a / b
2.5
>>> a ** b
25

⚠️ En python 2.7, lorsqu'on divise deux entiers, le résultat est aussi un entier !!! Ainsi, 5/2 donne 2 ! Pour faire une division réelle, il faut que au moins l'un des deux nombres soit un réel (type float)

>>> a = 5.0
>>> b = 2
>>> a / b
2.5

Le résultat d'une opération peut être affecté à une variable :

>>> a = 5
>>> b = 2
>>> c = a + b
>>> c
7
>>> a = a + 10
>>> a
15

Assembler des chaînes de caractères.

La méthode "bricolage"

>>> nom = 'Robert'
>>> age = '32'
>>> phrase = 'Bonjour ' + nom + ' vous avez ' + age + ' ans'
>>> phrase
'Bonjour Robert, vous avez 32 ans'

⚠️ Attention , ici la variable âge est de type str; il est impossible avec la méthode "bricolage" d'assembler des int ou des float avec des str !

La méthode "pro"

>>> nom = 'Robert'
>>> age = 32
>>> phrase = 'Bonjour {n}, vous avez {a} ans'.format(n = nom, a = age)
>>> phrase
'Bonjour Robert, vous avez 32 ans'

En python >= 3.6

>>> nom = "Robert"
>>> age = 32
>>> phrase = f"Bonjour {nom}, vous avez {age} ans"
>>> phrase
'Bonjour Robert, vous avez 32 ans'

Modifier le type d'une variable.

>>> a = 5
>>> type (a)
<type 'int'>

>>> b = float(a)
>>> b
5.0

>>> c = str(a)
>>> c
'5'

>>> d = int(c)
>>> d
5

II L'éditeur , les entrées , et les sorties.

L'éditeur.

Vous avez jusqu'à présent utilisé Python en mode Shell. Ce mode est très pratique pour écrire et interpréter "à la volée" des lignes de codes ; ce qui est idéal pour tester rapidement quelques lignes de codes.

Le désavantage étant que les lignes de codes écrites ne peuvent être sauvegardées ni même corrigées; en cas d'erreurs il faut tout ré écrire !

Pour remédier à cela, il existe un mode "éditeur" qui permet de sauvegarder son code.
Pour accéder à l'éditeur, allez dans "File" puis cliquez "New File"; une page dans laquelle vous pourrez écrire votre code s'ouvre alors.

Indiquer toujours cette ligne en haut de votre page: # coding: utf-8 afin de fixer l'encodage du texte (c'est inutile sur Python 3)

Pour interpréter votre code, cliquez sur F5; après avoir attribué un nom à votre algorithme se terminant en .py , cliquez à nouveau sur F5.

Pour ré ouvrir un algorithme déjà enregistré, allez dans "File", puis "open", et recherchez le nom de votre algorithme.

Les entrées.

Votre algorithme peut interagir avec l'utilisateur, en lui demandant d'entrer des informations que vous attribuerez à des variables.

En Python3, la fonction input permet d’entrer des int, float, ou str qui seront automatiquement transformés en str

nom = input('Entrez votre nom: ')
age = input('Entrez votre age: ')

phrase = 'Bonjour {n} , vous avez {a} ans'.format(n = nom, a = age)

⚠️ En Python2.7:

  • Utiliser la fonction input pour demander à l'utilisateur d'entrer un nombre de type int ou float.
  • Utiliser la fonction raw_input pour demander à l'utilisateur d'entrer une chaîne de caractères de type str.

Les sorties.

Vous pouvez en retour, envoyer des informations à l'utilisateur. Pour cela , utilisez la fonction print

nom = input('Entrez votre nom: ')
age = input('Entrez votre age: ')

phrase = 'Bonjour {n} , vous avez {a} ans'.format(n = nom, a = age)

print (phrase)

⚠️ Les parenthèses du print sont facultatives avec Python 2 mais obligatoires avec Python 3

III Les booléens et la structure conditionnelle if.

Les booléens.

Un booléen est un type de variable à deux états. Les variables de ce type sont ainsi soit à l'état vrai (True) soit à l'état faux (False). Les booléens permettent de faire des comparaisons:

>>> a = 4
>>> b = 2
>>> c = 'maristes'

>>> a == b
False

>>> a == 4
True

>>> a < b
False

>>> a <= b
False

>>> a > b
True

>>> a >= b
True

>>> a != b
True

>>> a != 'ok'
True

>>> type(a) == type(b)
True

>>> type(a) == type(c)
False

>>> c == 'maristes'
True

>>> c == 'Maristes'
False

⚠️ Attention: ne pas confondre l'affectation a = 4 et la comparaison a == 4 !!!

La structure conditionnelle if

Exemple 1:

age = input('Entrez votre age: ')

age = int(age)

if age >= 18:
	print('Vous êtes majeur')

else:
	print('Vous êtes mineur')

Si l'âge est supérieur ou égal à 18, les instructions du bloc suivant le if sont exécutées (il n'y a qu'une seule instruction : print('Vous êtes majeur')) , mais on peut mettre plusieurs instructions dans le bloc si on le souhaite. Sinon (autrement dit si l'âge est inférieur à 18) ce sont les instructions du bloc suivant le else qui sont exécutées.

⚠️ Attention à bien respecter l'indentation (décalage) des instructions de chaque bloc !

Exemple 2:

age = input('Entrez votre age: ')
age = int(age)

if age > 18:

	print('Vous êtes majeur')

elif age == 18:

	print('Vous êtes majeur depuis cette année')

else:

	print('Vous êtes mineur')

elif signifie sinon et si

Il est possible d'utiliser if sans elif ou sans else , de même qu'il est possible d'utiliser if avec elif mais sans else

age = input('Entrez votre age: ')
age = int(age)

if age > 18:

	print('Vous êtes majeur')

if age == 18:

	print('Vous êtes majeur depuis cette année')

if age < 18:

	print('Vous êtes mineur')

Les connecteurs logiques and et or.

age = input('Entrez votre age: ')
genre = input('Entrez votre genre (H ou F): ')

age = int(age)

if age >= 18 and genre == 'H':

	print('Vous êtes un homme majeur')

elif age >= 18 and genre == 'F':

	print('Vous êtes une femme majeure')

elif age < 18 and genre == 'M':

	print ('Vous êtes un homme mineur')

else:

	print ('Vous êtes une femme mineure')

L'exemple ci-dessus utilise le connecteur logique and, les 2 conditions situées de part et d'autre du and doivent être vérifiées pour que le bloc d'instructions soit exécuté .

Lorsque qu'on utilise le connecteur logique or, seule l'une des deux conditions situées de part et d'autre du or doit être vérifiée pour que le bloc d'instructions soit exécuté .

L'algorithme ci dessous est identique au précédant sauf qu'il n'utilise pas de connecteurs logiques. Regardez bien l'imbrication et l'indentation des blocs d'instructions.

age = input('Entrez votre age: ')
genre = input('Entrez votre genre (H ou F): ')

age = int(age)

if age >= 18:

	if genre == 'H':

		print('Vous êtes un homme majeur')

	elif genre == 'F':

		print('Vous êtes une femme majeure')

elif age < 18:

	if genre == 'M':

		print ('Vous êtes un homme mineur')

	elif genre == 'F':

		print ('Vous êtes une femme mineure')

IV La boucle "while".

En anglais "while" signifie "tant que".

Cette fonction de python permet de créer des boucles: Tant que (while) la condition booléenne est vérifiée alors les instructions du bloc d'instructions sont réalisées.

Exemple 1:

n = int(input('Entrez un nombre supérieur à 100: '))

while n < 100:

    print("""Vous n'avez pas respecté la consigne !!! \n""")

    n = int(input('Entrez un nombre supérieur à 100: '))

print ("""C'est bien, vous avez respecté la consigne.""")

On demande à l'utilisateur d'entrer un nombre supérieur à 100, et on affecte ce nombre à la variable n. On utilise ensuite la fonction while pour vérifier la condition booléenne n < 100 .

Tant que la valeur affectée à la variable n est inférieure à 100 , autrement dit tant que l'utilisateur n'a pas respecté la consigne, on exécute les deux instructions du bloc d'instructions faisant suite au while:

  • on lui affiche un message pour le réprimander: print("""Vous n'avez pas respecté la consigne !!! \n""")
  • on lui redemande d'entrer un nombre supérieur à 100: n = int(input('Entrez un nombre supérieur à 100: '))

L'algorithme va ensuite revérifier la condition booléenne n < 100 , et tant qu'elle serra vérifiée , autrement dit tant que la consigne ne serra pas respectée , la boucle while se répétera.

Lorsque l'utilisateur entrera un nombre supérieur à 100, la condition booléenne n < 100 ne serra plus vérifiée et le bloc d'instruction de la boucle while ne serra pas exécuté. L'algorithme se poursuivra et se terminera en exécutant le print ("""C'est bien, vous avez respecté la consigne.""") qui est situé hors du bloc d'instruction de la boucle while

Exemple 2:

nombre_de_chances_max = 100

nombre_de_chances_utilisees = 0

reponse = int(input('Les cours Sainte Marie de Hann ont été fondés en quelle année ? '))

bonne_reponse = 1950

while nombre_de_chances_utilisees < nombre_de_chances_max:

	if reponse != bonne_reponse:
	
		nombre_de_chances_utilisees = nombre_de_chances_utilisees + 1
	
		print('Mauvaise réponse, il vous reste {x} chances \n'.format(x = nombre_de_chances_max-nombre_de_chances_utilisees))
	
		reponse = int(input('Les cours Sainte Marie de Hann ont été fondés en quelle année ? '))
	
	else:
	
		print("Bravo, c'est la bonne réponse !")
	
		break

V Les listes.

Créer une liste:

En utilisant des crochets:
>>> z =[1,2,3,4]
>>> z
[1, 2, 3, 4]
>>> type(z)
<type 'list'>
En utilisant la fonction list():
>>> u = list('1234')
>>> u
['1', '2', '3', '4']
>>> type(u)
<type 'list'>
En utilisant la fonction range():

En Python3:

>>> a = range(20)
>>> a
range(0, 20)
>>> list(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> type(a)
<type 'list'>

En Python2.7:

>>> a = range(20)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> type(a)
<type 'list'>
Les listes peuvent contenir des entiers, des réels, et des chaînes de caractères
>>> fruits = ['pomme', 'poire', 'fraise', 'orange']
>>> 
>>> listecombinee = ['pomme', 3, 'orange', 2.543]

Obtenir des informations sur une liste:

Création d'une liste nommée "maliste":

>>> maliste = [1,2,3,4,5]

La fonction len() indique la longueur de la liste, c'est à dire le nombre d'éléments dans la liste:

>>> len(maliste)
5

La fonction max() indique le nombre le plus élevé d'une liste de nombres, ou le dernier élément alphabétique d'une liste de mots

>>> max(maliste)
5

La fonction min() indique le nombre le plus petit d'une liste de nombres, ou le premier élément alphabétique d'une liste de mots

>>> min(maliste)
1

Python compte toujours à partir de 0. maliste[0] renvoie le premier élément de la liste intitulée "maliste", c'est à dire l'élément d'index 0 de la liste

>>> maliste[0]
1
>>> maliste[4]
5

La fonction sum() indique la somme des éléments de la liste:

>>> sum(maliste)
15

Ajouter des éléments à une liste:

>>> a = [1,2,3,4]
>>> a + [1]
[1, 2, 3, 4, 1]

Ou en utilisant la fonction append:

>>> a = [1,2,3,4]
>>> a.append(1)
>>> a
[1, 2, 3, 4, 1]

Modifier un élément:

>>> a = [1,2,3,4]
>>> a[1] = 333
>>> a
[1, 333, 3, 4]

Inserer un élément:

>>> a = [1,2,3,4]
>>> a.insert(1,5555)
>>> a
[1, 5555, 2, 3, 4]

Ranger ...

Dans l'ordre croissant:

>>> a = [2,1,4,3]
>>> a.sort()
>>> a
[1, 2, 3, 4]

Dans l'ordre décroissant:

>>> a = [1,2,3,4]
>>> a.sort(reverse = True)
>>> a
[4, 3, 2, 1]

Inverser l'ordre:

>>> a = [2,1,4,3]
>>> a.reverse()
>>> a
[3, 4, 1, 2]

Supprimer un élément:

>>> a = [1,2,3,4]
>>> a.remove(3)
>>> a
[1, 2, 4]

Parcourir une liste: la boucle "for":

Pour tous les éléments (appelés ici "i") de la liste a , on affiche chaque élément i multiplié par 2

>>> a = [1,2,3,4]
>>> for i in a:
...   print(i*2)
...   
2
4
6
8

La liste b est une liste vide. Pour tous les éléments i de la liste a , on affecte à la variable x le produit i*2 , et on ajoute la valeur de x à la liste b.

>>> a = [1,2,3,4]
>>> b = []
>>> 
>>> for i in a:
...   x = i*2
...   b.append(x)
...   
>>> b
[2, 4, 6, 8]

Enumerer une liste

La fonction enumerate() permet de parcourir une liste et d'obtenir l'index (position de l'élément dans la liste) et la valeur de chaque élément.

>>> fruits
['pomme', 'poire', 'fraise', 'orange']
>>> for i, v in enumerate(fruits):
...   print ('index {0} valeur {1}'.format(i, v))
...   
index 0 valeur pomme
index 1 valeur poire
index 2 valeur fraise
index 3 valeur orange

⚠️ Vous remarquerez que Python commence toujours à compter à partir de 0 (le premier élément d’une liste est l’élément d’index 0)

Obtenir l'index d'un élément à partir de sa valeur:

>>> fruits
['pomme', 'poire', 'fraise', 'orange']
>>> fruits.index('poire')
1

Convertir une chaîne de caractères en liste de mots:

>>> s = 'bonjour comment ca va ?'
>>> p = s.split(' ')
>>> p 
['bonjour', 'comment', 'ca', 'va', '?']

Convertir une liste de mots en une chaîne de caractères:

>>> p
['bonjour', 'comment', 'ca', 'va', '?']
>>> q = " ".join(p)
>>> q
'bonjour comment ca va ?'

Sectionner une liste:

>>> p
['bonjour', 'comment', 'ca', 'va', '?']

>>> p[1:]
['comment', 'ca', 'va', '?']

>>> p[2:4]
['ca', 'va']

>>> p[:4]
['bonjour', 'comment', 'ca', 'va']

>>> p[:1]
['bonjour']

Choisir un élément au hasard dans une liste

Il faut pour cela importer le module random:

import random

On peut utiliser la fonction random.choice() :

>>> import random

>>> a = range(20)
>>> list(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

>>> h = random.choice(a)
>>> h
3

>>> h = random.choice(a)
>>> h
14

L'algorithme ci dessus choisit au hasard un élément dans la liste a

On peut aussi utiliser la fonction random.randint():

>>> import random

>>> x = random.randint(0,20)
>>> x
4

>>> x = random.randint(0,20)
>>> x
20

L'algorithme ci dessus choisit au hasard un nombre compris entre 0 et 20

Revenir au début d'une liste lorsque l'index sort de la liste

>>> x = ['peche','pomme','poire','abricot']
>>> y = len(x)
>>> y
4
>>> x[3]
'abricot'
>>> x[4]
Traceback (most recent call last):
  File "<string>", line 1, in <module>
IndexError: list index out of range
>>> x[4-y]
'peche'

Les index négatifs

>>> x[-1]
'abricot'
>>> x[-1] == x[y-1]
True

De nouveaux booléens utilisables avec les listes

>>> x = list(range(10))
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> 
>>> 2 in x
True
>>> 
>>> 
>>> 2 not in x
False

VI Les dictionnaires.

Les dictionnaires sont des objets qui associent des clés à des valeurs. Les clés et les valeurs peuvent être des chaînes de caractères (str), des entiers (int), des réels (float), des listes (list) ou des tuples (tuple) ou des listes de tuples...

>>> dico = {'clé1': 'valeur1', 'clé2': 'valeur2', 'clé3': 'valeur3'}
>>> dico
{'clé2': 'valeur2', 'clé3': 'valeur3', 'clé1': 'valeur1'}

Créer un dictionnaire.

Il existe plusieurs manières de créer un dictionnaire:

>>> d = {'fruit1':'pomme', 'fruit4': 'orange', 'fruit3': 'poire'}
>>> d
{'fruit3': 'poire', 'fruit1': 'pomme', 'fruit4': 'orange'}

>>> d2 = dict(a = 45, b = 3, c= 532)
>>> d2
{'b': 3, 'c': 532, 'a': 45}

>>> d3 = dict( [ (1,'un'), (2,'deux'), (3,'trois')] )
>>> d3
{1: 'un', 2: 'deux', 3: 'trois'}

Appeler une valeur correspondant à une clé

>>> d['fruit1']
'pomme'

Ajouter un couple clé/valeur.

>>> d
{'fruit1': 'pomme', 'fruit3': 'poire', 'fruit4': 'orange'}

>>> d['fruit2'] = 'citron'

>>> d
{'fruit1': 'pomme', 'fruit2': 'citron', 'fruit3': 'poire', 'fruit4': 'orange'}

Modifier une valeur.

>>> d['fruit1']= 'banane'
>>> d
{'fruit1': 'banane', 'fruit2': 'citron', 'fruit3': 'poire', 'fruit4': 'orange'}

Supprimer un couple clé/valeur.

>>> d
{'fruit3': 'poire', 'fruit2': 'citron', 'fruit1': 'banane', 'fruit4': 'orange'}

>>> del(d['fruit4'])

>>> d
{'fruit3': 'poire', 'fruit2': 'citron', 'fruit1': 'banane'}

Afficher toutes les clés d'un dictionnaire.

>>> d.keys()
dict_keys(['fruit1', 'fruit2', 'fruit3'])

Afficher toutes les valeurs d'un dictionnaire.

>>> d.values()
dict_values(['pomme', 'citron', 'poire'])

Parcourir un dictionnaire.

Les deux méthodes ci-dessous sont équivalentes.

>>> for k,v in d.items():
...   print(k, '=', v)
...   
fruit1 = banane
fruit2 = citron
fruit3 = poire
fruit4 = orange


>>> for k in d.keys():
...   print (k, '=', d[k])
...   
fruit1 = banane
fruit2 = citron
fruit3 = poire
fruit4 = orange

Le module AttrDict

Ce module permet de faciliter l’utilisation d’un dictionnaire :

>>> from attrdict import AttrDict
>>> d = {"fruit":"pomme"}
>>> a = AttrDict(d)
>>> a.fruit
'pomme'
>>> a['fruit']
'pomme'

Autre exemple:

>>> attr = AttrDict({'fruit': {'agrume': 'orange'}})
>>> attr.fruit.agrume
'orange'

VII Manipuler des chaînes de caractères.

Créer une chaîne:

>>> c = 'salut comment ca va'

Créer une chaîne qui contient des apostrophes:

>>> d = """salut l'ami"""
>>> d
"salut l'ami"

Afficher la longueur de la chaîne:

>>> len(c)
19

Afficher le caractère le plus "élevé" :

>>> max(c)
'v'

Afficher le caractère le plus "petit":

>>> min(c)
' '

Parcourir une chaîne avec une boucle for:

>>> for v in c:
...   print v
...   
s
a
l
u
t
 
c
o
m
m
e
n
t
 
c
a
 
v
a

Énumérer une chaîne :

>>> for i, v in enumerate(c):
...   print i, v
...   
0 s
1 a
2 l
3 u
4 t
5  
6 c
7 o
8 m
9 m
10 e
11 n
12 t
13  
14 c
15 a
16  
17 v
18 a

Retrouver la valeur d'un caractère en fonction de son index

>>> c[2]
'l'

Retrouver l'index d'un caractère (si le caractère est présent plusieurs fois , seul son premier index serra affiché)

>>> c.index('t')
4

Ajouter une majuscule en début de phrase:

>>> c.capitalize()
'Salut comment ca va'

Tout mettre en majuscules:

>>> c.upper()
'SALUT COMMENT CA VA'

Utilisez la fonction lower() pour passer des majuscules aux minuscules

Remplacer ou supprimer des caractères :

>>> c.replace('t','y')
'saluy commeny ca va'

>>> c.replace('t','')
'salu commen ca va'

>>> c.replace(' ','')
'salutcommentcava'

Supprimer des espaces en début et fin de chaine:

c = ' bonjour '
>>> c.strip()
'bonjour'

Sectionner une chaîne de caractères :

>>> c = 'salut comment ca va'

>>> c[:5]
'salut'

>>> c[6:13]
'comment'

>>> c[17:]
'va'

Convertir une chaîne de caractères en liste de mots:

>>> s = 'bonjour comment ca va ?'
>>> p = s.split(' ')
>>> p 
['bonjour', 'comment', 'ca', 'va', '?']

Convertir une liste de mots en une chaîne de caractères:

>>> p
['bonjour', 'comment', 'ca', 'va', '?']
>>> q = " ".join(p)
>>> q
'bonjour comment ca va ?'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment