Examen Python 08

EXAMEN EN PYTHON SUJET 8

SUJET D'EXERCICES PYTHON

Durée : 2h - Barème total : 20 points

Enseignants : Mr Joel Yankam Ngueguim

Exercice 01 : Analyse et amélioration de code 5pts

On considère le code Python suivant :

a = 15
b = 4
c = 0

if a % b == 0:
    c = a // b
else:
    c = a * b

print("Le résultat est :", c)

Questions :

  1. (1 pt) Que contiennent les variables a, b et c après l'exécution du code ?
  2. (2 pts) Expliquez ce que réalise cet algorithme en une phrase.
  3. (2 pts) Proposez une version améliorée et plus concise de ce code (en une seule ligne) tout en conservant la même fonctionnalité.

Exercice 02 : Correction de programmes 5 pts

On vous donne deux programmes comportant des erreurs. Identifiez et corrigez-les.

Programme A (2,5 pts) :
def calculer_moyenne(notes):
    total = 0
    for i in range(len(notes)):
        total += notes[i]
    moyenne = total / len(notes)
    return moyenne

# Test
liste_notes = [12, 15, 8, 14]
print("La moyenne est :", moyenne)
Programme B (2,5 pts) :
def verifier_pair(nombre):
    if nombre % 2 = 0:
        return True
    else:
        return False

# Tests
nb = input("Entrez un nombre : ")
if verifier_pair(nb):
    print("Pair")
else:
    print("Impair")

Questions :

  • Identifiez les erreurs dans chaque programme
  • Proposez le code corrigé et fonctionnel

Problème : Manipulation de listes - Villes du Cameroun 10pts

On considère la liste suivante des 10 plus grandes villes du Cameroun par population :

villes = ["Douala", "Yaoundé", "Bafoussam", "Garoua", "Maroua", "Ngaoundéré", "Bamenda", "Limbe", "Kribi", "Bertoua"]
Partie 1 : Opérations de base (4 points)
  1. (1 pt) Affichez la 3ème ville de la liste.
  2. (1 pt) Affichez les 4 premières villes (tranche).
  3. (1 pt) Modifiez la ville "Limbe" par "Edea" et affichez la liste mise à jour.
  4. (1 pt) Ajoutez "Foumban" à la fin de la liste et insérez "Ebolowa" à la 5ème position.
Partie 2 : Traitements avancés (4 points)
  1. (1 pt) Créez une nouvelle liste villes_sud contenant les 3 dernières villes, puis ajoutez-y "Edea".
  2. (1 pt) Affichez la liste des villes en ordre alphabétique (sans modifier la liste originale).
  3. (1 pt) Comptez combien de villes contiennent la lettre "a" (minuscule ou majuscule).
  4. (1 pt) Créez une liste villes_filtrees ne contenant que les villes de plus de 6 lettres.
Partie 3 : Algorithmie (2 points)
  1. (1 pt) Écrivez une fonction rechercher_ville(liste, nom) qui renvoie True si la ville existe, False sinon.
  2. (1 pt) Utilisez cette fonction pour vérifier si "Bamenda" et "Dschang" sont dans la liste.

par Mr joel yankam

Fin du sujet

 

CORRECTIONS Examen Python :

Correction - Sujet Python

CORRIGÉ DU SUJET PYTHON

Barème total : 20 points

Exercice 01 : Analyse et amélioration de code 5 pts

Réponses :

1. Valeurs des variables après exécution :

a = 15 # inchangé
b = 4 # inchangé
c = 60 # car 15 % 4 = 3 ≠ 0, donc c = 15 * 4 = 60

2. Fonctionnalité de l'algorithme :

L'algorithme vérifie si a est divisible par b :

  • Si oui, il calcule le quotient entier a // b
  • Si non, il calcule le produit a * b

3. Version améliorée en une ligne :

# Solution avec opérateur ternaire
c = a // b if a % b == 0 else a * b
print("Le résultat est :", c)

Alternative plus avancée :

c = (a // b, a * b)[a % b != 0] # Utilisation d'un tuple

Exercice 02 : Correction de programmes 5 pts

Programme A - Erreurs identifiées :

Erreur : La variable moyenne n'est pas définie dans la portée globale.

La variable est locale à la fonction, mais on tente de l'afficher hors de la fonction.

Code corrigé :

def calculer_moyenne(notes):
    total = 0
    for i in range(len(notes)):
        total += notes[i]
    moyenne = total / len(notes)
    return moyenne

# Test
liste_notes = [12, 15, 8, 14]
resultat = calculer_moyenne(liste_notes) # Stocker le retour de la fonction
print("La moyenne est :", resultat)

Version améliorée :

def calculer_moyenne(notes):
    return sum(notes) / len(notes) # Plus Pythonique

liste_notes = [12, 15, 8, 14]
print("La moyenne est :", calculer_moyenne(liste_notes))

Programme B - Erreurs identifiées :

Erreur 1 : Opérateur d'affectation = au lieu de comparaison ==

Erreur 2 : La fonction input() renvoie une chaîne, pas un entier

Code corrigé :

def verifier_pair(nombre):
    if nombre % 2 == 0: # Correction : == au lieu de =
        return True
    else:
        return False

# Tests
nb = int(input("Entrez un nombre : ")) # Conversion en entier
if verifier_pair(nb):
    print("Pair")
else:
    print("Impair")

Version améliorée :

def verifier_pair(nombre):
    return nombre % 2 == 0 # Retour direct de l'expression booléenne

nb = int(input("Entrez un nombre : "))
print("Pair" if verifier_pair(nb) else "Impair") # Plus concise

Problème : Manipulation de listes - Villes du Cameroun 10 pts

villes = ["Douala", "Yaoundé", "Bafoussam", "Garoua", "Maroua",
          "Ngaoundéré", "Bamenda", "Limbe", "Kribi", "Bertoua"]

Partie 1 : Opérations de base

1. 3ème ville :

print(villes[2]) # Affiche : Bafoussam

2. 4 premières villes :

print(villes[:4]) # Affiche : ['Douala', 'Yaoundé', 'Bafoussam', 'Garoua']

3. Modifier "Limbe" → "Edea" :

villes[7] = "Edea"
print(villes) # ['Douala', 'Yaoundé', 'Bafoussam', 'Garoua', 'Maroua', 'Ngaoundéré', 'Bamenda', 'Edea', 'Kribi', 'Bertoua']

4. Ajouts :

villes.append("Foumban") # Ajout à la fin
villes.insert(4, "Ebolowa") # Insertion à l'indice 4
print(villes) # Affiche la liste mise à jour

Partie 2 : Traitements avancés

5. Liste villes_sud :

villes_sud = villes[-3:] # 3 dernières villes
villes_sud.append("Edea")
print(villes_sud) # ['Kribi', 'Bertoua', 'Foumban', 'Edea']

6. Ordre alphabétique :

print(sorted(villes)) # Sans modifier la liste originale

7. Compter les villes avec 'a' :

compteur = sum(1 for ville in villes if 'a' in ville.lower())
print(compteur) # Résultat : 8 villes

8. Villes de plus de 6 lettres :

villes_filtrees = [ville for ville in villes if len(ville) > 6]
print(villes_filtrees) # ['Douala', 'Bafoussam', 'Ngaoundéré', 'Bamenda', 'Bertoua']

Partie 3 : Algorithmie

9. Fonction rechercher_ville() :

def rechercher_ville(liste, nom):
    return nom in liste

# OU version avec boucle (plus pédagogique) :
def rechercher_ville(liste, nom):
    for ville in liste:
        if ville == nom:
            return True
    return False

10. Vérifications :

print(rechercher_ville(villes, "Bamenda")) # Affiche : True
print(rechercher_ville(villes, "Dschang")) # Affiche : False

BONUS - Villes aux indices pairs :

villes_pairs = [villes[i] for i in range(0, len(villes), 2)]
phrase = "Les villes aux positions paires sont : " + ", ".join(villes_pairs)
print(phrase)

Résultat attendu : "Les villes aux positions paires sont : Douala, Bafoussam, Maroua, Bamenda, Kribi"

Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam