QCM : Types de variables en Python

[enonce]
Ce QCM porte sur les types de variables en Python : int, float, str, bool, affectation et règles de nommage. Choisissez la bonne réponse parmi les quatre propositions.
[/enonce]

[etape]
Quel est le type Python de la valeur $42$ ?
[qcm]
[option]float[/option]
[option correct="true"]int[/option]
[option]str[/option]
[option]bool[/option]
[reponse statut="correct"]Exact !
$42$ est un nombre entier, sans point décimal ni guillemets : son type est int (integer).[/reponse]
[reponse motif="float"]Non.
Le type float correspond aux nombres décimaux écrits avec un point, comme $42.0$ ou $3.14$. La valeur $42$ n'a pas de point décimal.[/reponse]
[reponse motif="str"]Non.
Le type str (string) est celui des chaînes de caractères, qui sont toujours écrites entre guillemets ou apostrophes. Ici $42$ n'est pas entre guillemets.[/reponse]
[reponse motif="bool"]Non.
Le type bool ne concerne que les deux valeurs True et False. Un nombre comme $42$ n'est pas un booléen.[/reponse]
[reponse statut="incorrect"]Non.
Observer la forme de la valeur : nombre entier sans point, donc entier (int).[/reponse]
[/qcm]
[/etape]

[etape]
Quel est le type Python de la valeur 'Bonjour' ?
[qcm]
[option]int[/option]
[option]float[/option]
[option correct="true"]str[/option]
[option]bool[/option]
[reponse statut="correct"]Bonne réponse !
Une valeur entre apostrophes (ou guillemets) est une chaîne de caractères : son type est str (string).[/reponse]
[reponse motif="int"]Non.
Le type int ne concerne que les nombres entiers. Ici, la présence d'apostrophes indique une chaîne de caractères.[/reponse]
[reponse motif="float"]Non.
Le type float concerne les nombres décimaux. Les apostrophes autour de Bonjour indiquent autre chose.[/reponse]
[reponse motif="bool"]Non.
Seules True et False (sans apostrophes, initiale majuscule) sont de type bool.[/reponse]
[reponse statut="incorrect"]Non.
Les apostrophes ou guillemets autour d'une valeur signalent toujours une chaîne de caractères.[/reponse]
[/qcm]
[/etape]

[etape]
Parmi les noms suivants, lequel est un nom de variable valide en Python ?
[qcm]
[option]1an[/option]
[option]ma-note[/option]
[option correct="true"]age_eleve[/option]
[option]mon nom[/option]
[reponse statut="correct"]Bravo !
Ce nom ne contient que des lettres et le symbole underscore, et il ne commence pas par un chiffre : il est valide.[/reponse]
[reponse motif="1an"]Non.
Un nom de variable ne doit pas commencer par un chiffre. Relire la règle sur le nommage des variables.[/reponse]
[reponse motif="ma-note"]Non.
Le tiret « - » est interdit dans un nom de variable (Python l'interpréterait comme une soustraction). Seuls les lettres, chiffres et underscores sont autorisés.[/reponse]
[reponse motif="mon nom"]Non.
Un nom de variable ne peut pas contenir d'espace. Utiliser un underscore à la place.[/reponse]
[reponse statut="incorrect"]Non.
Règle : uniquement lettres, chiffres et underscores, et ne jamais commencer par un chiffre.[/reponse]
[/qcm]
[/etape]

[etape]
On exécute le programme Python ci-dessous :

a = 5
a = 'Bonjour'
print(type(a))

Que s'affiche-t-il ?
[qcm]
[option]class 'int'[/option]
[option correct="true"]class 'str'[/option]
[option]Une erreur est provoquée[/option]
[option]class 'bool'[/option]
[reponse statut="correct"]Exactement !
En Python, le type d'une variable change dynamiquement selon la valeur qu'elle contient. La dernière affectation met une chaîne dans a, donc son type final est str.[/reponse]
[reponse motif="class 'int'"]Non.
C'était le type de a après la première ligne, mais la seconde affectation a changé la valeur et le type de a.[/reponse]
[reponse motif="Une erreur est provoquée"]Non.
Python autorise sans problème de changer le type d'une variable en cours de programme. C'est une spécificité du langage.[/reponse]
[reponse motif="class 'bool'"]Non.
Aucune valeur booléenne n'a été affectée à a dans ce programme.[/reponse]
[reponse statut="incorrect"]Non.
Python prend en compte la dernière affectation. Ici, a contient la chaîne 'Bonjour' quand type(a) est appelé.[/reponse]
[/qcm]
[/etape]

[etape]
On exécute le programme Python ci-dessous :

print(3 * 'hi')

Que s'affiche-t-il ?
[qcm]
[option]3hi[/option]
[option]hi hi hi[/option]
[option correct="true"]hihihi[/option]
[option]Une erreur est provoquée[/option]
[reponse statut="correct"]C'est bien ça !
L'opérateur * appliqué à une chaîne et un entier répète la chaîne : 3 * 'hi' donne la chaîne 'hi' répétée trois fois, soit 'hihihi'.[/reponse]
[reponse motif="3hi"]Non.
Le nombre n'est pas collé devant la chaîne : l'opérateur * répète la chaîne, il ne l'affiche pas préfixée du nombre.[/reponse]
[reponse motif="hi hi hi"]Non.
Les répétitions sont simplement concaténées, sans espace. Aucun séparateur n'est inséré par l'opérateur *.[/reponse]
[reponse motif="Une erreur est provoquée"]Non.
La multiplication entre un entier et une chaîne est parfaitement autorisée en Python et correspond à une répétition.[/reponse]
[reponse statut="incorrect"]Non.
* sur une chaîne répète simplement la chaîne, sans espace ni ajout du nombre.[/reponse]
[/qcm]
[/etape]

[etape]
Que renvoie l'instruction type(True) en Python ?
[qcm]
[option]class 'str'[/option]
[option]class 'int'[/option]
[option]True[/option]
[option correct="true"]class 'bool'[/option]
[reponse statut="correct"]Tu as raison !
True et False sont les deux valeurs du type booléen : leur type est bool.[/reponse]
[reponse motif="class 'str'"]Non.
Une chaîne de caractères aurait été écrite entre guillemets ou apostrophes (comme 'True'). Ici True n'est pas entre guillemets.[/reponse]
[reponse motif="class 'int'"]Non.
True n'est pas un nombre entier. C'est l'une des deux valeurs du type booléen.[/reponse]
[reponse motif="True"]Non.
L'instruction type(...) renvoie le type de la valeur, pas la valeur elle-même.[/reponse]
[reponse statut="incorrect"]Non.
True et False sont les deux valeurs du type bool.[/reponse]
[/qcm]
[/etape]

Vrai/Faux : Variables Python (niveau 1)

[enonce]
Pour chaque affirmation suivante sur les variables et leurs types en Python, indiquez si elle est Vraie ou Fausse.
[/enonce]

[etape]
On exécute l'instruction Python suivante :

a = 5

Affirmation : Cette instruction teste si a est égal à $5$.

[qcm]
[option]Vrai[/option]
[option correct="true"]Faux[/option]
[reponse statut="correct"]Bonne réponse !
Le symbole = seul est l'opérateur d'affectation en Python : il range la valeur $5$ dans la variable a.
Pour tester l'égalité, on utilise == (double signe égal).[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est fausse.
Attention à ne pas confondre affectation et comparaison.
En Python, = range une valeur dans une variable (affectation), tandis que == teste si deux valeurs sont égales (comparaison).[/reponse]
[/qcm]

[solution]
Cette affirmation est fausse. a = 5 affecte la valeur $5$ à la variable a. Le test d'égalité s'écrit a == 5.
[/solution]
[/etape]

[etape]
Affirmation : L'instruction type(3.14) renvoie class 'float'.

[qcm]
[option correct="true"]Vrai[/option]
[option]Faux[/option]
[reponse statut="correct"]Exactement !
Le nombre $3{,}14$ s'écrit 3.14 en Python (avec un point) : c'est un nombre décimal, donc de type float.[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est vraie.
En Python, un nombre avec un point décimal est de type float.
Ne pas confondre avec int (entier, sans point) ou str (chaîne, entre guillemets).[/reponse]
[/qcm]

[solution]
Cette affirmation est vraie. Tout nombre écrit avec un point décimal est de type float en Python.
[/solution]
[/etape]

[etape]
Affirmation : Le nom de variable 1variable est valide en Python.

[qcm]
[option]Vrai[/option]
[option correct="true"]Faux[/option]
[reponse statut="correct"]Bravo !
Un nom de variable ne peut pas commencer par un chiffre.
Il doit commencer par une lettre ou par le caractère _ (underscore).[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est fausse.
Rappel : un nom de variable doit commencer par une lettre ou un underscore.
1variable commence par un chiffre, il produit donc une erreur de syntaxe.[/reponse]
[/qcm]

[solution]
Cette affirmation est fausse. Un nom de variable ne peut pas commencer par un chiffre. variable1 serait valide, 1variable ne l'est pas.
[/solution]
[/etape]

[etape]
On exécute le programme Python ci-dessous :

a = "7"

Affirmation : Après cette instruction, la variable a est de type int (entier).

[qcm]
[option]Vrai[/option]
[option correct="true"]Faux[/option]
[reponse statut="correct"]Tu as raison !
Les guillemets autour de $7$ indiquent une chaîne de caractères (type str), pas un entier.
La variable a est donc de type str.[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est fausse.
Il ne faut pas confondre 7 (entier) et « 7 » (chaîne de caractères).
Dès qu'une valeur est entourée de guillemets ou d'apostrophes, son type est str, quel que soit son contenu.[/reponse]
[/qcm]

[solution]
Cette affirmation est fausse. « 7 » entre guillemets est une chaîne de caractères : a est de type str.
[/solution]
[/etape]

[etape]
Affirmation : Le nom de variable ma_variable est valide en Python.

[qcm]
[option correct="true"]Vrai[/option]
[option]Faux[/option]
[reponse statut="correct"]C'est bien ça !
Un nom de variable peut contenir des lettres, des chiffres et le caractère _ (underscore).
ma_variable respecte ces règles : il est valide.[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est vraie.
Le caractère underscore _ est autorisé dans les noms de variables (contrairement au tiret -).
ma_variable commence par une lettre et n'utilise que des caractères autorisés.[/reponse]
[/qcm]

[solution]
Cette affirmation est vraie. ma_variable respecte les règles : lettres, chiffres et underscore, sans commencer par un chiffre.
[/solution]
[/etape]

[etape]
Affirmation : En Python, MaVariable et mavariable désignent deux variables différentes.

[qcm]
[option correct="true"]Vrai[/option]
[option]Faux[/option]
[reponse statut="correct"]Correct !
Python est sensible à la casse : il distingue les majuscules des minuscules.
MaVariable et mavariable sont donc bien deux variables différentes.[/reponse]
[reponse statut="incorrect"]Non, cette affirmation est vraie.
Le piège ici est d'oublier que Python distingue majuscules et minuscules.
Deux noms identiques à la casse près désignent deux variables distinctes en Python.[/reponse]
[/qcm]

[solution]
Cette affirmation est vraie. Python est sensible à la casse : MaVariable et mavariable sont deux variables distinctes.
[/solution]
[/etape]

Algorithme : Echange de variables

Joana a conçu l'algorithme suivant afin d'échanger les valeurs de deux variables a et b :

variables a, b : nombres réels
début algorithme

  1. saisir a
  2. saisir b
  3. afficher « La valeur de a est », a
  4. afficher « La valeur de b est », b
  5. a prend la valeur b
  6. b prend la valeur a
  7. afficher « La valeur de a est », a
  8. afficher « La valeur de b est », b

fin algorithme

En Python, cet algorithme s'écrit :

a = float(input("Saisir a : "))
b = float(input("Saisir b : "))
print("La valeur de a est", a)
print("La valeur de b est", b)
a = b
b = a
print("La valeur de a est", a)
print("La valeur de b est", b)
  1. On saisit 2 comme valeur pour a et 5 comme valeur pour b.

    Compléter le tableau suivant :

    Ligne a b Affichage
    1. 2    
    2. 2 5  
    3. 2 5 La valeur de a est 2
    4. 2 5 La valeur de b est 5
    5. ... ...  
    6. ... ...  
    7. ... ... ...
    8. ... ... ...

    L'algorithme de Joana permet-il d'intervertir correctement les valeurs des variables a et b ?

  2. Corriger l'algorithme de Joana de façon à ce qu'il fonctionne correctement.

Corrigé

  1. Ligne a b Affichage
    1. 2    
    2. 2 5  
    3. 2 5 La valeur de a est 2
    4. 2 5 La valeur de b est 5
    5. 5 5  
    6. 5 5  
    7. 5 5 La valeur de a est 5
    8. 5 5 La valeur de b est 5

    L'algorithme de Joana ne fonctionne pas correctement.

    En effet, en ligne 5, l'instruction « a prend la valeur b » écrase l'ancienne valeur de a qui est 2 par la valeur 5 et la valeur 2 est donc « perdue ».

    La ligne 6 n'a alors aucun effet puisqu'elle remplace la valeur 5 par... la valeur 5 ! ! !

  2. Il faut rajouter une troisième variable qui stockera l'ancienne valeur de a comme par exemple :

    variables a, b, c : nombres réels
    début algorithme

    1. saisir a
    2. saisir b
    3. afficher « La valeur de a est », a
    4. afficher « La valeur de b est », b
    5. c prend la valeur a
    6. a prend la valeur b
    7. b prend la valeur c
    8. afficher « La valeur de a est », a
    9. afficher « La valeur de b est », b

    fin algorithme

    En Python :

    a = float(input("Saisir a : "))
    b = float(input("Saisir b : "))
    print("La valeur de a est", a)
    print("La valeur de b est", b)
    c = a
    a = b
    b = c
    print("La valeur de a est", a)
    print("La valeur de b est", b)

    Le fonctionnement pas à pas lorsque l'on entre respectivement 2 et 5 pour a et b donne alors :

    Ligne a b c Affichage
    1. 2      
    2. 2 5    
    3. 2 5   La valeur de a est 2
    4. 2 5   La valeur de b est 5
    5. 2 5 2  
    6. 5 5 2  
    7. 5 2 2  
    8. 5 2 2 La valeur de a est 5
    9. 5 2 2 La valeur de b est 2

    Les valeurs de a et de b ont bien été interverties !

Algorithme et fonction

Paul a rédigé l'algorithme suivant en pseudo-code :

Variables $a, b$ : nombres réels
Début  
  Saisir $a$
  $b$ prend la valeur $a^2 - 3$
  Afficher « L'image du nombre entré est », $b$
Fin  

En Python, cet algorithme s'écrit :

a = float(input("Saisir a : "))
b = a**2 - 3
print("L'image du nombre entré est", b)
  1. Dans cet algorithme, quelle instruction correspond à une entrée ? Quelle instruction correspond à une sortie ?
  2. Paul saisit la valeur 2 pour a. Quel résultat obtient-il en sortie ?
  3. Cet algorithme permet de calculer l'image d'un nombre par une certaine fonction. Quelle est cette fonction ?
  4. Paul a obtenu comme résultat : « L'image du nombre entré est 6 ». Quel nombre a-t-il saisi ?

Corrigé

  1. Instruction d'entrée : saisir a.

    Instruction de sortie : afficher « L'image du nombre entré est », b.
  2. Si on saisit la valeur 2 pour a, b prend la valeur 2²-3=1 et l'algorithme affiche : « L'image du nombre entré est 1 »
  3. La fonction définie par cet algorithme est la fonction $ x \longmapsto x^2 - 3 $
  4. Soit a le nombre saisi par Paul. Pour obtenir 6 comme résultat, il faut que :

    $ a^2 - 3=6 $

    $ a^2=6+3 $

    $ a^2=9 $

    $ a=3 $ ou $ a= - 3 $

    Paul a saisi le nombre 3 ou le nombre -3.

Algorithme et équation

On considère l'algorithme suivant :

variables a, b : nombres
début algorithme

  • afficher « Entrer la valeur de a : »
  • lire a
  • b prend la valeur a - 3
  • b prend la valeur b²
  • b prend la valeur b + 1
  • afficher « La valeur de b est », b

fin algorithme

En Python, cet algorithme s'écrit :

a = float(input("Entrer la valeur de a : "))
b = a - 3
b = b**2
b = b + 1
print("La valeur de b est", b)
  1. On entre la valeur 0 pour a. Que va afficher l'algorithme en retour ?

    Même question si on entre la valeur 3 pour a
  2. L'algorithme affiche : « La valeur de b est 2 ». Quelles valeurs de a a-t-on pu entrer ?
  3. Est-il possible d'obtenir comme résultat : « La valeur de b est 0 ». Justifier.

Corrigé

  1. Si on entre 0 pour a

    Instruction valeur de a valeur de b
    lire a 0  
    b prend la valeur a-3 0 0-3=-3
    b prend la valeur b² 0 (-3)²=9
    b prend la valeur b+1 0 9+1=10

    L'algorithme affiche : « La valeur de b est 10 »
    Si on entre 3 pour a

    Instruction valeur de a valeur de b
    lire a 3  
    b prend la valeur a-3 3 3-3=0
    b prend la valeur b² 3 0²=0
    b prend la valeur b+1 3 0+1=1

    L'algorithme affiche : « La valeur de b est 1 »

  2. Supposons que l'on saisit la valeur $ x $ pour a. On obtient :

    Instruction valeur de a valeur de b
    lire a $ x $  
    b prend la valeur a-3 $ x $ $ x - 3 $
    b prend la valeur b² $ x $ $ \left(x - 3\right)^2 $
    b prend la valeur b+1 $ x $ $ \left(x - 3\right)^2+1 $

    A la fin de l'algorithme la valeur de b est $ \left(x - 3\right)^2+1 $. Cette valeur est égale à $ 2 $ si et seulement si :
    $ \left(x - 3\right)^2+1=2 $

    $ \left(x - 3\right)^2=2 - 1 $

    $ \left(x - 3\right)^2=1 $

    $ x - 3=\sqrt{1} $ ou $ x - 3= - \sqrt{1} $

    $ x - 3=1 $ ou $ x - 3= - 1 $

    $ x=4 $ ou $ x=2 $

    On a entré la valeur 2 ou la valeur 4.

  3. Pour obtenir comme résultat : « La valeur de b est 0 », il a fallu entrer une valeur $ x $ telle que :

    $ \left(x - 3\right)^2+1=0 $

    $ \left(x - 3\right)^2= - 1 $

    Or cette équation n'a pas de solution car un carré est toujours positif ou nul (et ne peut donc pas être égal à $ - 1 $).

    Par conséquent, il n'est pas possible d'obtenir comme résultat : « La valeur de b est 0 »

Algorithme : Théorème de Pythagore

Écrire un algorithme qui demande d'entrer les longueurs des deux côtés de l'angle droit dans un triangle rectangle puis calcule et affiche la longueur de l'hypoténuse.

Convertir cet algorithme pour votre calculatrice ou pour Algobox.

Corrigé

Par exemple :

variables a, b, c : nombres
début algorithme

  • afficher « Entrer la longueur du premier côté de l'angle droit »
  • lire a
  • afficher « Entrer la longueur du deuxième côté de l'angle droit »
  • lire b
  • c prend la valeur $\sqrt{a^2+b^2}$
  • afficher « La longueur de l'hypoténuse est », c

fin algorithme

En Python :

from math import sqrt

a = float(input("Entrer la longueur du premier côté de l'angle droit : "))
b = float(input("Entrer la longueur du deuxième côté de l'angle droit : "))
c = sqrt(a**2 + b**2)
print("La longueur de l'hypoténuse est", c)

Programme calculatrice (TI 83) :

Programme calculatrice TI 83

Programme Casio (Graph 85) :

Programme Casio (Graph 85)

Algorithme Algobox :

Algorithme : Coefficient directeur

Écrire un algorithme qui demande les coordonnées de deux points A et B (d'abscisses différentes) et calcule le coefficient directeur de la droite (AB)

Corrigé

Il faut demander quatre coordonnées.

Le coefficient directeur est :

$ a=\dfrac{y_B - y_A}{x_B - x_A} $

Par exemple :

variables xa, ya, xb, yb, coef : nombres
début algorithme

  • écrire « Entrer l'abscisse de A »
  • lire xa
  • écrire « Entrer l'ordonnée de A »
  • lire ya
  • écrire "Entrer l'abscisse de B (différente de l'abscisse de A)"
  • lire xb
  • écrire « Entrer l'ordonnée de B »
  • lire yb
  • coef prend la valeur (yb - ya)/(xb - xa)
  • écrire "Le coefficient directeur de la droite (AB) est : ", coef

fin algorithme

En Python :

xa = float(input("Entrer l'abscisse de A : "))
ya = float(input("Entrer l'ordonnée de A : "))
xb = float(input("Entrer l'abscisse de B (différente de l'abscisse de A) : "))
yb = float(input("Entrer l'ordonnée de B : "))
coef = (yb - ya) / (xb - xa)
print("Le coefficient directeur de la droite (AB) est :", coef)

Remarque : On pourrait améliorer cet algorithme en vérifiant si l'abscisse de B est différente de l'abscisse de A et en affichant un message d'erreur dans le cas contraire.

Programme Casio (Graph 85) :

Algorithme Casio (Graph 85)

Algorithme Algobox :

Algorithme Casio (Graph 85)