Correction du DM 1¶
Télécharger le DM
- DM1.pdf - Énoncé du DM 1.
Correction partie papier¶
Exercice 1 - Vrai ou Faux ?
- Après les instructions
x = 3
,y = 5
,x = y
,y = x
, la valeur de x est 5 et la valeur de y est 3.
C'est faux. Pour inverser les valeurs dex
et dey
, on a besoin d'une troisième variable temporaire pour y stocker l'une des deux valeurs. Sinon, la valeur dex
est perdue car la variable prend la valeur dey
. Une solution : -
Après les instructions
x = 3
,y = 5
,y == x
,x = y
, la valeur dex
est5
et la valeur dey
est5
.
C'est vrai. Ici, la troisième instruction effectue une comparaison (il y a deux=
et pas un), et non pas une affectation. Cette expression booléenne renvoieTrue
ouFalse
, mais la valeur n'est stockée nul part. La variablex
prend ensuite la valeur dey
, donc5
. -
L’instruction
print(bonjour)
va afficher"bonjour"
.
C'est faux. La fonctionprint
permet d'afficher une chaîne de caractères. Ici,bonjour
n'est pas entouré de guillemets, et est donc considéré comme une variable. Une erreur indiquant que la variablebonjour
n'existe pas sera donc levée. -
La fonction
input
renvoie une chaîne de caractères.
C'est vrai. La fonctioninput
renvoie une chaîne de caractères. Ainsi, si l'on a besoin de transformer la valeur renvoyée par uninput
en un nombre entier par exemple, notamment pour utiliser la valeur dans unrange
(qui ne prend que des entiers), on peut convertir cette valeur avec la fonctionint
. Par exemple : Ici, la valeur retour de l'input
sera convertie en nombre entier. ``` -
L’instruction
if ...
est une instruction conditionnelle.
C'est vrai. Les instructions conditionnelles permettent d'exécuter des blocs de code seulement lorsqu'une condition est remplie. Voir cette partie du cours. -
Avec
for i in range(10)
, la variablei
prend 9 valeurs, puisque la dernière est9
.
C'est faux. Une bouclefor ... in range(...)
, lorsque lerange
ne prend qu'une seule valeur, commence à l'indice0
et se termine à l'indice indiqué dans lerange
moins 1. Ici, il y a donc 10 valeurs, de 0 à 9. -
Avec
for i in range(9, 0, -3)
, les valeurs successives prises par la variablei
sont9
,6
,3
,0
.
C'est faux. Ici, lerange
contient trois valeurs, ce qui signifie que l'on commence à la valeur9
, jusqu'à la valeur0
EXCLUE, avec un pas de-3
. Le0
n'est pas pris, car on s'arrête toujours un cran avant. Ici,i
ne prendra que les valeurs9
,6
et3
. -
Si l’on exécuté l’instruction âge = int(input("Veuillez entrer votre âge ! ")), la variable âge créée est de type str (chaîne de caractères).
C'est vrai.input
renvoie une valeur de typestr
, c'est-à-dire une chaîne de caractères. -
Une variable booléenne ne peut prendre que deux valeurs.
C'est vrai. Une variable booléenne peut prendre soit la valeurTrue
, soit la valeurFalse
. -
Si a = True et b = False, alors le test
b or a and b
renvoie True.
C'est faux. Lorsque l'on effectue le testb or a and b
, on teste d'abordb or a
, qui ici vautTrue
, puisqueTrue or False = True
, puis on teste enfinTrue and b
, qui vautFalse
, puiseTrue and False = False
(avec l'opérateurand
, les deux variables doivent être àTrue
pour obtenirTrue
).
Exercice 2
-
En quelle année le langage Python a t-il été créé ?
Le langage Python a été créé en 1991 par Guido Van Rossum, un informaticien néerlandais. -
Voici 4 propositions, entourez celles qui sont des expressions (ici en bleu) et soulignez celles qui sont des affectations (ici en vert) :
- a < b
- a != b
- a = b
- a >= b
-
On considère les instructions suivantes exécutées dans l’ordre :
a=8
,b=5
,a==b+1
,b=b +1
,a==b+1
,b=b+1
,print(a==b+1)
. Quel est le résultat affiché à l’issue de la dernière instruction ?
Le résultat obtenu à l'issue de la dernière instruction estTrue
.a
prend la valeur8
,b
prend la valeur5
, ensuite, on fait une comparaisona == b+1
qui est évaluée àFalse
(car8 != 6
), mais cette valeurFalse
n'est stockée nulle part. Ensuite, on affecte àb
la valeurb + 1
, c'est-à-dire6
. Donca = 8
etb = 6
. On fait de nouveau une comparaisona == b+1
, qui est évalue àFalse
(car8 != 7
). Cette valeurFalse
n'est encore une fois pas stockée. On continue en affectant de nouveau àb
la valeurb + 1
, c'est-à-dire7
. Finalement, on affiche (avec la fonctionprint
) la valeur obtenue suite à l'évaluation de la comparaisona == b + 1
, qui vautTrue
cara = 8
etb + 1 = 7 + 1 = 8
. -
Voici une séquence d’instructions :
Combien de fois la fonction
print
à l'intérieur dufor
est-elle exécutée ?
La fonctionprint
est ici exécutée 5 fois. En effet, lorsque lerange
contient 2 valeurs, on commence à la première valeur indiquée, et on s'arrête un cran avant la deuxième valeur. Ici,i
prend donc les valeurs2
,3
,4
,5
et6.
-
Voici une séquence d’instructions :
Quelles seront les valeurs finales de
x
et dey
?
Après exécution,x = 0
ety = 1
. Pour voir le déroulement complet de ce programme, vous pouvez dérouler le bloc suivant.
Déroulement du programme - Question 5
Début du programme :
x = 4
Comparaison du premier while : x > 0
4 > 0 ? OUI, donc on rentre dans la première boucle.
y = 0
Comparaison du deuxième while : y < x
0 < 4 ? OUI, donc on rentre dans la deuxième boucle.
y = y + 1 = 0 + 1 = 1
x = x - 1 = 4 - 1 = 3
Comparaison du deuxième while : y < x
1 < 3 ? OUI, donc on reste dans la deuxième boucle.
y = y + 1 = 1 + 1 = 2
x = x - 1 = 3 - 1 = 2
Comparaison du deuxième while : y < x
2 < 2 ? NON, donc on ne reste pas dans la deuxième boucle.
Comparaison du premier while : x > 0
2 > 0 ? OUI, donc on reste dans la première boucle.
y = 0
Comparaison du deuxième while : y < x
0 < 2 ? OUI, donc on rentre dans la deuxième boucle.
y = y + 1 = 0 + 1 = 1
x = x - 1 = 2 - 1 = 1
Comparaison du deuxième while : y < x
1 < 1 ? NON, donc on ne reste pas dans la deuxième boucle.
Comparaison du premier while : x > 0
1 > 0 ? OUI, donc on reste dans la première boucle.
y = 0
Comparaison du deuxième while : y < x
0 < 1 ? OUI, donc on rentre dans la deuxième boucle.
y = y + 1 = 0 + 1 = 1
x = x - 1 = 1 - 1 = 0
Comparaison du deuxième while : y < x
1 < 0 ? NON, donc on ne reste pas dans la deuxième boucle.
Comparaison du premier while : x > 0
0 > 0 ? NON, donc on ne reste pas dans la première boucle.
Fin du programme.
Exercice 3
Écrire une fonction plus_grand
qui prend en paramètres trois nombres entiers et renvoie le plus grand des trois nombres.
def plus_grand(a, b, c):
''' Renvoie le plus grand des trois entiers.
:param a: (int) Un entier.
:param b: (int) Un autre entier.
:param c: (int) Encore un autre entier.
:return (int): La plus grande valeur entre a, b et c. '''
if a > b and a > c:
return a
elif b > a and b > c:
return b
else:
return c
Exercice 4
Écrire une fonction temps
qui prend en paramètres un nombre entier de secondes et affiche le nombre d'heures, de minutes et de secondes qui correspond.
def temps(nbs):
''' Renvoie le temps en heures, minutes et secondes.
:param nbs: (int) Le temps en secondes.
:return (None): On ne renvoie rien, on affiche avec print. '''
heures = nbs // 3600 # 3600 secondes dans 1 heure
nbs = nbs % 3600 # On récupère le nombre de secondes restantes et on le restocke dans nbs
minutes = nbs // 60 # 60 secondes dans 1 minutes
secondes = nbs % 60 # On récupère le nombre de secodes restantes
print(f'{heures}h {minutes}min {secondes}s')
Exercice 5
Écrire une fonction qui prend en arguments deux mots (type str
) et renvoie True
si les deux mots commencent par la même lettre et se terminent par la même lettre et False
sinon.
def jeu(mot1, mot2):
''' Renvoie True si les deux mots commencent et finissent par la même lettre.
Renvoie False sinon.
:param mot1: (str) Un mot.
:param mot2: (str) Un autre mot.
:return (bool): Un booléen, c'est-à-dire soit True, soit False. '''
return mot1[0] == mot2[0] and mot1[len(mot1) - 1] == mot2[len(mot2) - 1]
L'indice de la première lettre est 0
. La fonction len
permet de récupérer le nombre de caractères dans une chaîne de caractères. On trouve donc l'indice de la dernière lettre du mot en retirant 1 à sa longueur.
Plutôt que d'écrire mot1[len(mot1) - 1]
et mot2[len(mot2) - 1]
, on peut également plus simplement écrire mot1[-1]
et mot2[-1]
. Attention toutefois, cela fonctionne en Python, mais pas dans tous les langages. Retenez donc aussi la première méthode.
Exercice 6
Écrire une fonction jeu
qui prend en paramètre un nombre entier n
strictement positif, simule n fois le tirage d’un nombre choisi au hasard parmi les nombres 1
, 2
, 3
, 4
, 5
, 6
, et renvoie le pourcentage de 6 obtenus. On utilisera la fonction randint
du module random
.
def jeu(n):
''' Renvoie le pourcentage du nombre de 6 obtenus sur n tirages aléatoires.
:param n: (int) Un nombre entier de tirages.
:return (float): Le pourcentage de 6 obtenus. '''
compteur = 0 # Compteur pour le nombre de 6 obtenus
for _ in range(n):
tirage = randint(1, 6) # Récupérer une valeur aléatoire entre 1 et 6
if tirage == 6:
compteur = compteur + 1 # On peut aussi écrire compteur += 1
return compteur * 100 / n # On calcule et on renvoie le pourcentage
Le pourcentage se calcule avec un simple produit en croix : les n
tirages correspondent à 100% des tirages, et on cherche le pourcentage pour le nombre compteur
de tirages (compteur
contient le nombre de fois où l'on a tiré la valeur 6
).
Correction partie ordinateur¶
Exercice 1
Écrire un programme qui trace la figure ci-dessous en utilisant deux boucles imbriquées. Vous utiliserez le module Python Turtle. Vous pouvez importer toutes les fonctions du module en plaçant cette ligne au début de votre programme : from turtle import *
.
Exercice 2
Écrire un programme qui demande à l’utilisateur de saisir un entier naturel n
et qui calcule la somme des carrés des entiers de 1 à n
.
Afin de vérifier votre programme, voici un exemple : 1² + 2² + 3² + ... + 10² = 385
Exercice 3
Au jeu de Mölkky, chaque joueur marque à son tour de jeu entre 0 et 12 points, qui viennent s’ajouter à son score précédent. Mais gare ! Quiconque dépasse le score cible de 51 points revient immédiatement à 25 points.
Écrire un programme qui demande un score et un nombre de points marqués, et qui affiche le nouveau score ou signale une éventuelle victoire.
Sources : Numérique et Sciences Informatiques 1ère, Balabonski et al., Ed. Ellipses.
Exercice 4
Écrire un programme qui demande à l’utilisateur de saisir un entier naturel n
et qui affiche tous ses diviseurs les uns après les autres. Les diviseurs devront être tous écrits sur une même ligne et séparés par un tiret.
Exemple avec les diviseurs de 15 : 1-3-5-15.