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(q, r)
9 2

Image de fond dans Tkinter

import tkinter as tk
from PIL import ImageTk, Image
import os

racine = tk.Tk()
racine.title("Titre")
racine.geometry("1200x800")

img = ImageTk.PhotoImage(Image.open("/home/asterix/Downloads/img1.jpg"))
panel = tk.Label(racine, image = img)
panel.pack(side='top', fill='both', expand='yes')

# button = tk.Button(panel, text='button widget')
# button.pack(side='top', pady=5)
# save the panel's image from 'garbage collection'

label = tk.Label(panel, text="J'adore Python !")
bouton = tk.Button(panel, text="Quitter", command=racine.quit)
# bouton["fg"] = "red"
# bouton["bg"] = "yellow"
# racine["bg"] = "orange"
label.pack()
bouton.pack()

panel.image = img

racine.mainloop()

print("C'est fini !")

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(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(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)]
[Clang 12.0.0 (clang-1200.0.32.29)]

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

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

print(identifiant, domaine, sep = "@")
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 Objet Notation) est un langage léger d’échange de données textuelles (via un réseau, par exemple). Pour les ordinateurs, ce format se génère et s’analyse facilement. Pour les humains, il est pratique à écrire et à lire grâce à une syntaxe simple et à une structure en arborescence. JSON permet de représenter des données structurées (comme XML par exemple).

Exemple de données au format JSON

{
    "firstName": "Jane",
    "lastName": "Doe",
    "hobbies": ["running", "sky diving", "singing"],
    "age": 35,
    "children": [
        {
            "firstName": "Alice",
            "age": 6
        },
        {
            "firstName": "Bob",
            "age": 8
        }
    ]
}

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

Sot le fichier file.json suivant :

{
  "Name": "Jennifer Smith",
  "Contact Number": 7867567898,
  "Email": "jen123@gmail.com",
  "Hobbies": ["Reading", "Sketching", "Horse Riding"]
}

Les données JSON sont formatées sous la forme d’un dictionnaire en Python :

import json

with open("file.json", "r") as fichier:
    objet_json = json.load(fichier)

print(type(objet_json))
print(objet_json)
<class 'dict'>
{'Name': 'Jennifer Smith', 'Contact Number': 7867567898, 'Email': 'jen123@gmail.com', 'Hobbies': ['Reading', 'Sketching', 'Horse Riding']}

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

import json

dico = {"a": "01", "b": "11"}

with open('donnees.json', 'w') as fichier:
    json.dump(dico, fichier)

Le contenu du fichier donnees.json est le suivant :

{"a": "01", "b": "11"}

Définir une fonction avec le mot clé lambda

somme = lambda x, y: x + y

print(somme(3, 7))
10
(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'