Université de Genève · CUI BSc · Algorithmique & Structures de données

Python Basics I: Control Structures

Séminaire 2

Today's Agenda

  • Truthiness — Python's approach to True / False
  • Branching & looping: if / for / while
  • Why complexity matters — a preamble
  • Big O notation in Python
  • List comprehensions — concise & fast

Truthiness in Python

Python considère certaines valeurs comme False en contexte booléen — on les appelle falsy.

# Falsy values
bool(0)        # False
bool(0.0)      # False
bool('')       # False — empty string
bool([])       # False — empty list
bool({})       # False — empty dict
bool(None)     # False

Tout le reste est truthy (nombres non nuls, conteneurs non vides, objets).

# Pythonic checks
if not items:        # ✓ check for empty list
if items == []:      # ✗ avoid — creates a new list
if x is None:        # ✓ identity check
if x == None:        # ✗ avoid — uses __eq__
if 0 < x < 100:     # ✓ chained comparison

Pitfall: les arguments par défaut mutables interagissent mal avec les tests d'évaluation booléenne.

Branching & Looping

if / elif / else — choisir une voie selon des conditions :

score = 78
if score >= 90:
    grade = 'A'
elif score >= 75:
    grade = 'B'
else:
     grade = 'F'

for — itérer sur n'importe quelle séquence (range, list, dict, …) :

for i, name in enumerate(['Alice', 'Bob']):
    print(i, name)     # 0 Alice, 1 Bob

while — répéter jusqu'à ce qu'une condition change ; utiliser break / continue pour le contrôle :

while True:
    val = input('Enter a positive number: ')
    if val == "stop":
        break
    elif not val.isdigit():
        print("only int allowed")
    else:
        print(f"you entered {val}")

List Comprehensions — From Loop to One-liner

PatternTraditional for-loopList comprehension
Basic transformsquares = [] for x in range(10): squares.append(x**2)squares = [x**2 for x in range(10)]
With filterevens = [] for x in range(20): if x % 2 == 0: evens.append(x)evens = [x for x in range(20) if x % 2 == 0]
Nested (⚠ O(n²))pairs = [] for x in range(3): for y in range(3): pairs.append((x,y))pairs = [(x,y) for x in range(3) for y in range(3)]

Preamble: Why Does Complexity Matter?

  • Tout algorithme consomme des ressources : temps et mémoire
  • Lorsque la taille des entrées augmente, un code mal adapté à la montée en charge rencontre des limites réelles
  • Une solution par force brute peut fonctionner pour 100 éléments mais échouer pour 1 000 000
  • notation grand O — O(…) — décrit comment l'utilisation des ressources croît avec la taille de l'entrée n
  • Two key dimensions:
  • Complexité temporelle — combien d'étapes / opérations
  • Complexité spatiale — combien de mémoire est utilisée
  • Objectif : choisir des algorithmes qui évoluent bien en fonction du problème
  • Nous formaliserons cela dans le Séminaire 6 — ceci est votre introduction

Big O Notation in Python

Big O Notation in Python
Introduction pour le Séminaire 6 — chaque courbe montre un motif courant en Python et son taux de croissance.

Why Big O Matters

Why Big O Matters
À n = 5000 la boucle imbriquée prend 0,9 s tandis que la boucle simple s'achève en 0,0002 s — soit un facteur 4500×, et la différence ne fait qu'empirer lorsque n augmente.

Today's Exercises

  • Ex 1 — find_max(a,b,c) utilisant if/elif/else
  • Ex 2 — FizzBuzz (question d'entretien classique)
  • Ex 3 — Vérificateur d'année bissextile
  • Ex 4 — Boucle de calculatrice : continuer à demander jusqu'à 'quit'
  • Ex 5 — Afficher la table de multiplication pour n

Key Takeaways

  • La notion de truthiness en Python : utiliser if not items, if x is None
  • if / for / while couvrent tous les flux de contrôle dont vous avez besoin
  • Privilégiez enumerate() plutôt que range(len(...))
  • La notation grand O indique comment le code évolue — la différence entre O(n) et O(n²) est cruciale
  • Les List comprehensions sont plus rapides et plus lisibles que les boucles
  • Réfléchissez toujours : combien de fois cette boucle s'exécute-t-elle ?
Université de Genève · CUI BSc · Algorithmique & Structures de données

Thank You & Have Fun!