15 - Astuces

Itérer à la fois sur les indices et les éléments d’une liste ou les caractères d’une chaîne

s = "Python"
e = enumerate(s)
print(list(e))

ma_liste = [12, -3, 1, 0, 17]
enum_ma_liste = enumerate(ma_liste)
print(list(enum_ma_liste))

for i, e in enumerate(ma_liste):
    print(f"L'élément {e} a pour indice {i}")
[(0, 'P'), (1, 'y'), (2, 't'), (3, 'h'), (4, 'o'), (5, 'n')]
[(0, 12), (1, -3), (2, 1), (3, 0), (4, 17)]
L'élément 12 a pour indice 0
L'élément -3 a pour indice 1
L'élément 1 a pour indice 2
L'élément 0 a pour indice 3
L'élément 17 a pour indice 4

Calculer le quotient et le reste d’une division euclidienne en même temps

q, r = divmod(47, 5) # au lieu de q = 47 // 5 et r = 47 % 5

print(f"{q} {r}")
9 2

Emoji dans Python

import emoji

pouce = emoji.emojize(":thumbs_up:")

print(pouce)
print(emoji.emojize("Python est :thumbs_up:"))
print("\U0001F600")
👍
Python est 👍
😀

La liste des emojis disponibles via le module emoji de python : https://carpedm20.github.io/emoji/

Inputs multiples

a, b = input("Entrer deux nombres séparés par un espace : ").split()

print(f"{a = } et {b = }")
print(f"{a + b = }")

a = int(a)  # On convertit une chaîne de caractères en nombre entier
b = int(b)  # On convertit une chaîne de caractères en nombre entier

print(f"{a = } et {b = }")
print(f"{a + b = }")
Entrer deux nombres séparés par un espace : 15 25
a = '15' et b = '25'
a + b = '1525'
a = 15 et b = 25
a + b = 40

Échanger le contenu de deux variables

a = 1000
b = 500
print(f'{a = } et {b = }')

a, b = b, a # On échange les valeurs en une seule fois
print(f'{a = } et {b = }')
a = 1000 et b = 500
a = 500 et b = 1000

Compréhensions de listes

carres_impairs = [i**2 for i in range(11) if i % 2 == 1]
print(carres_impairs)
[1, 9, 25, 49, 81]
nombres = [1, 2, 3, 4, 5, 6, 7]
pairs = [x for x in nombres if x % 2 == 0]
impairs = [y for y in nombres if y not in pairs]

print(nombres)
print(pairs)
print(impairs)
[1, 2, 3, 4, 5, 6, 7]
[2, 4, 6]
[1, 3, 5, 7]

Nombre variable de paramètres d’une fonction

def somme_de_n_nombres(*a):
    resultat = 0
    for i in a:
        resultat += i
    return resultat

res = somme_de_n_nombres(1, 2, 3, 4, 5, 6, 7, 8, 9)
print(res)
45

Différentes façons d’entrer de passer des paramètres à une fonction

def ma_fonction(x, y, z):
    print(f"{x} {y} {z}")

un_tuple = (1, 0, 1)
une_liste = [1, 0, 1]
un_dict = {'x': 1, 'y': 0, 'z': 1}

ma_fonction(1, 0, 1)
ma_fonction(*un_tuple)
ma_fonction(*une_liste)
ma_fonction(**un_dict)
1 0 1
1 0 1
1 0 1
1 0 1

Fonction retournant de multiples valeurs

# Définition de la fonction
def ma_fonction():
    return 1, 2, 3, 4

# Appel de la fonction : on affecte ce que celle-ci renvoie à quatre variables
a, b, c, d = ma_fonction()
print(f"{a} {b} {c} {d}")
1 2 3 4

Créer une chaîne de caractère à partir des éléments d’une liste

a = ["Bonjour", "à", "tous"]

print(" ".join(a))
Bonjour à tous

Afficher une chaîne de caractères plusieurs fois

n = 3
a = "Bonjour"
b = "Bonjour "

print(a * n)
print(b * n)
BonjourBonjourBonjour
Bonjour Bonjour Bonjour

Inverser une liste ou une chaîne de caractère

ma_chaine = 'Bonjour'[::-1]
print(ma_chaine)

ma_liste = [4, 7, 1]
autre_liste = ma_liste[::-1]
print(autre_liste)
ruojnoB
[1, 7, 4]

Obtenir une seule liste à partir d’une liste de listes

ma_liste = [[1, 2, 3], [4, 5], [6], [7, 8], [9]]

# Première méthode
liste_applatie = []
for sous_liste in ma_liste:
    for element in sous_liste:
        liste_applatie.append(element)

# Deuxième méthode
liste_applatie2 = [element for sous_liste in ma_liste for element in sous_liste]

print(liste_applatie)
print(liste_applatie2)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

Inverser les clés et les valeurs d’un dictionnaire

personnel = {'Physicienne': 'Lucille', 'Développeuse': 'Jeanne'}

personnel = {i: j for j, i in personnel.items()}

print(personnel)
{'Lucille': 'Physicienne', 'Jeanne': 'Développeuse'}

Afficher votre version de Python

import sys

print(sys.version_info)
# ou bien
print(sys.version)
sys.version_info(major=3, minor=13, micro=1, releaselevel='final', serial=0)
3.13.1 (main, Jan 25 2025, 10:51:29) [Clang 16.0.0 (clang-1600.0.26.6)]

Séparer des variables avec un symbole particulier lors de l’affichage

identifiant = "yves.farge"
domaine = "csilyon.fr"

print(f"{identifiant}@{domaine}")
yves.farge@csilyon.fr

Mettre en majuscule la première lettre de chaque mot

phrase = 'ceci est un bel article'
nouvelle_phrase = phrase.title()

print(phrase)
print(nouvelle_phrase)
ceci est un bel article
Ceci Est Un Bel Article

For… Else

La construction for / else est une particularité de Python, rare dans les autres langages.

def contient_des_nombres_pairs(L):
    for elt in L:
        if elt % 2 == 0:
            print("La liste contient un nombre pair.")
            break
    else:
        print("La liste ne contient pas de nombre pair.")

contient_des_nombres_pairs([11, 4, 17])
contient_des_nombres_pairs([11, 3, 17])
La liste contient un nombre pair.
La liste ne contient pas de nombre pair.

Fusionner deux dictionnaires

x = {'a': 1, 'b': 2}
y = {'b': 3, 'c': 4}

z = {**x, **y}

print(f"{z = }")
z = {'a': 1, 'b': 3, 'c': 4}

Python et le format JSON

JSON (JavaScript Object Notation) est un format texte d’échange de données, très utilisé sur le Web : la plupart des sites renvoient leurs données dans ce format. Un fichier JSON s’écrit presque comme un dictionnaire Python : des paires "clé": valeur entre accolades, des listes entre crochets, des chaînes toujours entre guillemets doubles. Les valeurs peuvent elles-mêmes être des listes ou des dictionnaires, ce qui permet de décrire des données imbriquées.

Le module json de Python passe d’un format à l’autre : json.load() lit un fichier JSON et renvoie un dictionnaire, json.dump() écrit un dictionnaire dans un fichier JSON.

Exemple de données au format JSON

Le fichier eleve.json décrit une élève :

{
  "prénom": "Léa",
  "nom": "Martin",
  "classe": "1A",
  "spécialités": ["NSI", "Mathématiques", "Physique-chimie"],
  "notes": {"NSI": 16, "Mathématiques": 13.5}
}

Importer un fichier JSON en Python avec json.load()

import json

with open("eleve.json", "r", encoding="utf-8") as fichier:
    eleve = json.load(fichier)

print(type(eleve))
print(f"{eleve['prénom']} suit {len(eleve['spécialités'])} spécialités.")
print(f"Note de NSI : {eleve['notes']['NSI']}")
<class 'dict'>
Léa suit 3 spécialités.
Note de NSI : 16

On accède ensuite aux données comme dans n’importe quel dictionnaire : eleve["notes"] est lui-même un dictionnaire, d’où les deux paires de crochets.

Enregistrer les données d’un dictionnaire Python sous forme d’un fichier JSON avec json.dump()

import json

classe = {"nom": "1A", "effectif": 32, "options": ["Latin", "Théâtre"]}

with open("classe.json", "w", encoding="utf-8") as fichier:
    json.dump(classe, fichier, ensure_ascii=False, indent=2)

Le contenu du fichier classe.json est le suivant :

{
  "nom": "1A",
  "effectif": 32,
  "options": [
    "Latin",
    "Théâtre"
  ]
}

Le paramètre indent=2 met une valeur par ligne, avec un retrait de deux espaces, pour rendre le fichier lisible. Le paramètre ensure_ascii=False garde les lettres accentuées telles quelles ; sans lui, "Théâtre" serait écrit "Th\u00e9\u00e2tre".

Définir une fonction avec le mot clé lambda

somme = lambda x, y: x + y

print(somme(3, 7))
10
print((lambda x, y: x + y)(3, 7))
10

Un langage proche du pseudocode

ma_liste = [True, True, False]

print(any(ma_liste))
print(all(ma_liste))

if any(ma_liste):
    print("Au moins un des éléments est vrai")
if all(ma_liste):
    print("Tous les éléments sont vrais")
if any(ma_liste) and not all(ma_liste):
    print("Il y a au moins un élément vrai et un élément faux")
True
False
Au moins un des éléments est vrai
Il y a au moins un élément vrai et un élément faux

Aficher la liste des méthodes liées à un objet

print(dir(str))
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

Écrire et lire des grands nombres

a = 1000000000
b = 1_000_000_000
c = (a == b)

print(f"{a = }, {b = }, {c = }")
print(f"{a = :_}, {b = :_}, {c = }")
print(f"{a = :,} ; {b = :,};  {c = }")

d = str(f"{a:,}").replace(',', ' ')
print(f"{d = }")
a = 1000000000, b = 1000000000, c = True
a = 1_000_000_000, b = 1_000_000_000, c = True
a = 1,000,000,000 ; b = 1,000,000,000;  c = True
d = '1 000 000 000'