C3 : Exercices

C3.E1 : Aire d'un cercle

Écrire une fonction qui :

Afficher la correction
from math import pi
def aire(rayon:float) -> float:
    aire = 2 * pi * rayon ** 2
    if aire < 25:
        reponse = "L'aire est strictement plus petite que 25 cm²."
    else:
        reponse = "L'aire est plus grande que 25 cm²."
    return reponse

C3.E2 : Positif ou négatif ?

Écrie une fonction prédicat (c'est-à-dire qui renvoie True ou False) pour tester si un nombre est positif ou nul.

Afficher la correction

Version 1

def est_positif_ou_nul(nb):
    if nb >= 0:
        return True
    else:
        return False

Version 2

def est_positif_ou_nul(nb):
    if nb >= 0:
        resultat = True
    else:
        resultat = False
    return resultat

Version 3

def est_positif_ou_nul(nb):
    return nb >= 0

C3.E3 : Analyse de code

On considère le code suivant :

if x < 1:
    print('valeur plus petite que 1')
if 1 <= x and x <= 2:
    print('valeur comprise entre 1 et 2')
else:
    print('valeur plus grande que 2')

1) Expliquer pourquoi le programme ne va pas donner des résultats cohérents.

2) Proposer une version corrigée de ce code.

Afficher la correction
1) Ce programme est incorrect pour toutes les valeurs de x strictement plus petites que 1. Ceci est dû au fait que le bloc else ne se rapporte qu’au deuxième if : il correspond donc à la condition not (1 <= x and x <=2), qui équivaut à 1 > x or x > 2.
2)

Version 1 :

if x < 1:
    print('valeur plus petite que 1')
if 1 <= x and x <= 2:
    print('valeur comprise entre 1 et 2')
if x > 2:
    print('valeur plus grande que 2')

Version 2 :

if x < 1:
    print('valeur plus petite que 1')
else: # x >= 1
    if x <= 2:
        print('valeur comprise entre 1 et 2')
    else: # x > 2
        print('valeur plus grande que 2')

Version 3 :

if x < 1:
    print('valeur plus petite que 1')
elif x <= 2:
    print('valeur comprise entre 1 et 2')
else:
    print('valeur plus grande que 2')

C3.E4 : Terrain de foot

Dans la réglementation du foot, il est indiqué que « Le terrain est un rectangle de longueur comprise entre 90 et 120 mètres et de largeur comprise entre 45 et 90 mètres, soit une surface qui varie de 4 050 m² à 10 800 m² ».

Terrain de foot avec les dimensions

1) Écrire une fonction qui prend deux entiers en paramètres (le premier pour la longueur, le deuxième pour la largeur) et renvoie True si le terrain est conforme et false sinon.

2) Compléter le programme principal pour tester la fonction.

Afficher la correction
def est_terrain_valide_v1(long: int, larg: int) -> bool:
    if (long >= 90 and long <= 120) and (larg >= 45 and larg <= 90):
        return True
    else:
        return False

def est_terrain_valide_v2(long: int, larg: int) -> bool:
    return (long >= 90 and long <= 120) and (larg >= 45 and larg <= 90)

# Programme principal
print(est_terrain_valide_v1(80, 40) == False)
print(est_terrain_valide_v1(80, 80) == False)
print(est_terrain_valide_v1(80, 100) == False)
print(est_terrain_valide_v1(100, 40) == False)
print(est_terrain_valide_v1(100, 80) == True)
print(est_terrain_valide_v1(100, 100) == False)
print(est_terrain_valide_v1(130, 40) == False)
print(est_terrain_valide_v1(130, 80) == False)
print(est_terrain_valide_v1(130, 100) == False)

C3.E5 : Conditions multiples

On souhaite écrire une fonction qui :

Aide : un prénom en minuscule commence par la lettre c si ce prénom est strictement inférieur à "d" et supérieur ou égale à "c".

1) Écrire une première version de cette fonction sans utiliser les opérateurs booléens, mais en utilisant éventuellement le elif.

2) Écrire une deuxième version de cette fonction en utilisant qu'un seul if.

Afficher la correction

1) Version sans opérateur booléen

# QUESTION 1
# Version a
def est_prenom_c_v1a(prenom:str) -> bool:
    if prenom < 'c':
        reponse = False
    elif prenom < 'd':
        reponse = True
    else:
        reponse = False
    return reponse

# Version b
def est_prenom_c_v1b(prenom:str) -> bool:
    reponse = False
    if prenom >= 'c':
        if prenom < 'd':
            reponse = True
    return reponse

# QUESTION 2
def est_prenom_c_v2(prenom:str) -> bool:
    if prenom >= 'c' and prenom < 'd' :
        reponse = True
    else:
        reponse = False
    return reponse


print(est_prenom_c_v1a("alban") == False)
print(est_prenom_c_v1a("claude") == True)
print(est_prenom_c_v1a("denis") == False)
print()

print(est_prenom_c_v1b("alban") == False)
print(est_prenom_c_v1b("claude") == True)
print(est_prenom_c_v1b("denis") == False)
print()

print(est_prenom_c_v2("alban") == False)
print(est_prenom_c_v2("claude") == True)
print(est_prenom_c_v2("denis") == False)

C3.E6 : Années bissextiles

Une année bissextile est une année comportant 366 jours au lieu de 365 jours pour les années régulières. Le jour supplémentaire, le 29 février, est placé après le dernier jour de ce mois qui compte habituellement 28 jours.

Une année est bissextile :

A faire : Écrire une fonction est_bissextile(annee) qui :

Afficher la correction
def est_bissextile(annee: int) -> bool:
    if (annee % 4 == 0 and not (annee % 100 == 0)) or (annee % 400 == 0) :
        return True
    else:
        return False

def est_bissextile_v2(annee: int) -> bool:
    return (annee % 4 == 0 and not (annee % 100 == 0)) or (annee % 400 == 0)

# Programme principal
print(est_bissextile(2020) == True)
print(est_bissextile(2022) == False)
print(est_bissextile(2024) == True)
print(est_bissextile(2000) == True)
print(est_bissextile(2100) == False)