Chapitre 6

Chapitre 6

6.1 Définition de fonctions

1.
c. La fonction print() est appelée pour afficher la variable offset_num.
2.
b. Les lignes 1, 4 et 5 appellent chacune print() une fois. Les lignes 2 et 3 appellent une fonction différente, input().
3.
b. La ligne 1 est un commentaire qui n'est pas exécuté. Les lignes 2 et 3 appellent chacune float() et input(). La ligne 3 appelle print(), pour un total de cinq appels de fonction.
4.
b. La ligne corrigée est def water_plant(): .
5.
c. Le programme principal affiche "User info:" puis appelle print_phone_num(), qui affiche le numéro de téléphone.
6.
b. Un appel de fonction comprend le nom de la fonction et des parenthèses.
7.
a. calc_tax est concis, en snake case et indique la tâche de la fonction.
8.
c. Chaque calcul utilise quatre instructions pour lire les valeurs x, y d'une paire de points. Le programme initial effectue trois calculs en répétant du code pour un total de 12 instructions d'entrée. Le programme révisé effectue trois calculs en exécutant les quatre instructions d'entrée à plusieurs reprises à l'aide d'appels de fonction.
9.
c. Les avantages de la réutilisabilité d'une fonction sont mis en évidence par de nombreux appels de fonction qui réduisent considérablement la quantité de code encombrant et redondant. Appeler calc_distance() 10 fois équivaut à 60 instructions dans le programme initial.

6.2 Flux de contrôle

1.
c. La ligne 5 est le début du programme principal, qui n'est pas indenté. park_greet() est appelée à la ligne 6 et exécutée.
2.
b. Le flux de contrôle se déplace là où park_greet() est définie, à la ligne 4.
3.
c. Le flux de contrôle revient à la ligne qui a appelé la fonction. La ligne 12 contient l'appel à la fonction extra_lot(), le flux de contrôle revient donc à la ligne 12.
4.
c. Le programme comporte une erreur d'indentation. print("Open ...") n'est pas indentée, l'instruction ne fait donc pas partie de park_greet() et est exécutée en premier. Ensuite, park_greet() est appelée, et print("Welcome ...") est exécutée.
5.
c. La boucle for effectue trois itérations. Chaque itération appelle print_book_club(), qui appelle print_conf(). Le programme appelle donc print_book_club() trois fois et print_conf() trois fois.
6.
b. Le flux de contrôle revient à la ligne 11, qui a appelé print_conf(). Ensuite, print_book_club() se termine, et le flux de contrôle revient à la ligne 16, qui a appelé print_book_club().

6.3 Portée des variables

1.
c. num et num_sq sont toutes deux créées en dehors des fonctions et sont des variables globales.
2.
a. num est créée en dehors d'une fonction et est globale. num_sq est créée dans print_square() et n'est pas globale.
3.
c. num est globale et est accessible partout dans le programme, y compris dans print_double() et print_square().
4.
b. out_str est la seule variable déclarée dans print_time() et est une variable locale.
5.
c. out_str est accédée dans print_greeting() mais créée dans des instructions en dehors de print_greeting().
6.
b. print_time() crée out_str en tant que variable locale. out_str n'est à portée que dans print_time() et n'est pas accessible ailleurs.
7.
a. La variable globale hour n'est pas modifiée dans update_hour(). tmp est la variable locale modifiée. tmp est détruite après la fin de update_hour().
8.
c. new_hour est une variable locale à laquelle l'instruction print tente d'accéder après la fin de update_hour(). new_hour est hors de portée, une erreur est donc générée.
9.
b. Le mot-clé global peut être utilisé pour créer une variable globale depuis l'intérieur d'une fonction. new_hour a une portée globale et est accessible en dehors de update_hour().

6.4 Paramètres

1.
b. username est l'argument passé à print_welcome(). name est le paramètre de print_welcome() auquel est assignée la valeur de username.
2.
a. name est le seul paramètre défini avec print_welcome(). username est l'argument passé lors de l'appel de fonction à la ligne 5.
3.
a. name est un paramètre qui n'existe qu'au sein d'un appel à print_welcome().
4.
a. Le programme s'exécuterait correctement. Les arguments et les paramètres peuvent porter le même nom, et une variable locale appelée name serait tout de même créée dans print_welcome(). La portée peut prêter à confusion avec des variables de même nom.
5.
a. p1_x est le premier argument utilisé dans l'appel de fonction de la ligne 9. x1 est défini comme le premier paramètre de calc_distance().
6.
b. y1 est défini comme le deuxième paramètre de calc_distance(). p1_y est le deuxième argument de l'appel de fonction de la ligne 9.
7.
c. 3 est un littéral passé comme troisième argument, ce qui correspond à x2, le troisième paramètre.
8.
a. Une liste est modifiable, donc l'objet référencé par wknd_temps et temps est modifié sans nécessiter de copie locale.
9.
b. Une chaîne de caractères est immuable, donc convert_temps() crée un nouvel objet auquel unit fait référence.
10.
a. La valeur d'un objet immuable ne peut pas être modifiée.
11.
b. unit n'existe plus une fois que convert_temps() se termine et revient à la ligne 14.

6.5 Valeurs de retour

1.
a. calc_mpg() spécifie que mpg doit être renvoyé avec l'instruction return .
2.
b. return est une instruction valide pour mettre fin à la fonction et revenir au code appelant sans valeur spécifiée. calc_sqft() devrait renvoyer sqft avec la ligne return sqft.
3.
c. Si la valeur de retour ou l'instruction return n'est pas spécifiée, la fonction renvoie None .
4.
b. num == 3 vaut True , donc l'instruction return "dk" est exécutée.
5.
a. Pour inc_volume(9,10), return level renvoie 9 , et level += 1 n'est jamais atteint.
6.
b. bill += tax(bill) + auto_tip(bill) s'évalue en bill += 6.0 + 20.0, puis en bill = 100.0 + 6.0 + 20.0, et enfin en 126.0.
7.
a. val2 = sq(offset(5)) s'évalue en val2 = sq(3), puis en 9.

6.6 Arguments nommés

1.
d. L'appel de fonction utilise tous les arguments nommés pour affecter des valeurs aux paramètres nommés.
2.
b. "Hiya" est la valeur de msg et "Ash" est la valeur de name dans la fonction.
3.
a. "Welcome" n'est pas nommé et est correctement affecté à count. Les arguments positionnels doivent précéder les arguments nommés.
4.
b. Les arguments positionnels "Hi" et "Bea" suivent l'argument nommé count=1, ce qui produit une erreur.
5.
b. La valeur par défaut de name est "Friend" , et la valeur par défaut de count est 1 . msg n'a pas de valeur par défaut.
6.
c. msg est un argument obligatoire auquel est affectée la valeur "Greetings" . name et count utilisent les valeurs par défaut. "Greetings Friend" est affiché.
7.
b. msg="Hello", name="Friend" et count=0, l'appel est donc valide. La fonction s'exécute mais n'entre pas dans la boucle for car count=0.