<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Correction de l'interrogation écrite du 14 novembre 2014
Step1:  Enoncé 1
Q1
Le code suivant produit une erreur. Laquelle ?
Step2:  Comme il n'y a pas d'instruction return, la fonction retourne toujours None quelque chose le résultat de ce qu'elle calcule.
Step3:  Q2
Que vaut a ?
Step4:  Si on affiche les résultats intermédiaires 
Step5:  Q3
On rappelle que ord('a')=97. Que vaut x ?
Step6:  Il suffit de remplacer i par 4. x vaut chr(97+4) et on se déplace de 4 lettres dans l'alphabet, soit e.
Q4
Que fait le programme suivant ?
Step7:  Le programme commence par ajouter la clé Claire au dictionnaire. La variable a mémorise la valeur numérique la plus grande. En l'état, le résultat programme est assez imprévisible puisqu'il dépend de l'ordre dans lequel on parcourt les éléments. Je pense que la fonction devrait récupérer dans une liste l'ensemble des prénoms correspondant à cette valeur maximale s'il était écrit comme ceci 
Step8:  Q5
Que renvoie la fonction suivante en fonction de n ?
<ASSISTANT_TASK:>
Python Code:
from jyquickhelper import add_notebook_menu
add_notebook_menu()
Explanation: Correction de l'interrogation écrite du 14 novembre 2014
End of explanation
def make_squares(n):
    squares = [i**2 for i in range(n)]
Explanation: Enoncé 1
Q1
Le code suivant produit une erreur. Laquelle ?
End of explanation
def make_squares(n):
    squares = [i**2 for i in range(n)]
print ( make_squares(2) )
Explanation: Comme il n'y a pas d'instruction return, la fonction retourne toujours None quelque chose le résultat de ce qu'elle calcule.
End of explanation
s = 1
a = 0
for i in range(4):
    a += s
    s += 2
a
Explanation: Q2
Que vaut a ?
End of explanation
s = 1
a = 0
for i in range(4):
    print(a,s)
    a += s
    s += 2
    
a
Explanation: Si on affiche les résultats intermédiaires :
End of explanation
d = {i:chr(i+97) for i in range(10)}
x = d[4]
x
Explanation: Q3
On rappelle que ord('a')=97. Que vaut x ?
End of explanation
notes = { "Alice": 17, "Bob": 18, "Jean−Ma": 17 }
notes['Claire'] = 18
def mystere(d):
    a = 0
    b = []
    for k,v in d.items():
        if v >= a:
            a = v
            b.append(k)
    return (b,a)
print(mystere(notes))
notes
Explanation: Il suffit de remplacer i par 4. x vaut chr(97+4) et on se déplace de 4 lettres dans l'alphabet, soit e.
Q4
Que fait le programme suivant ?
End of explanation
notes = { "Alice": 17, "Bob": 18, "Jean−Ma": 17 }
notes['Claire'] = 18
def mystere(d):
    a = 0
    b = []
    for k,v in d.items():
        if v == a:
            b.append(k)
        elif v > a:
            a = v
            b = [ k ]
    return (b,a)
print(mystere(notes))
Explanation: Le programme commence par ajouter la clé Claire au dictionnaire. La variable a mémorise la valeur numérique la plus grande. En l'état, le résultat programme est assez imprévisible puisqu'il dépend de l'ordre dans lequel on parcourt les éléments. Je pense que la fonction devrait récupérer dans une liste l'ensemble des prénoms correspondant à cette valeur maximale s'il était écrit comme ceci :
End of explanation
def f(n):
    while n != 1:
        if n%2 == 0:
            n = n/2
        else:
            n = 3*n + 1
    return n
f(3)
f(4)
Explanation: Q5
Que renvoie la fonction suivante en fonction de n ?
End of explanation
<END_TASK>