Remarques.
Le code qui vous est donné au départ ne doit pas être modifié. Les tests ne doivent évidemment pas être modifiés, ni supprimés (par contre vous pouvez en ajouter de nouveaux).
Les docstrings des fonctions doivent rester en place, au bon endroit.
Pensez à nommer vos variables de façon significative. Par exemple, la variable accumulateur du premier programme gagne, pour la lisibilité du code, à être nommée somme
. Celle du second programme sera nommé produit
.
Vous devez compléter le corps de la fonction suivante qui prend en entrée un entier naturel n et qui renvoie en sortie la somme des entiers compris entre 0 et n (au sens large) qui sont multiples de 3 et de 11.
def f(n):
"""
n: entier naturel
renvoie la somme des entiers compris entre 0 et n (bornes 0 et n comprises),
en ne comptant dans la somme que les entiers qui sont multiples à la fois de 3 et de 11.
"""
Il s'agit d'appliquer le principe d'accumulateur avec filtre.
fonction f(n):
somme ← 0
Pour chaque entier k de 0 à n:
si k est à la fois multiple de 3 et multiple de 11:
on ajoute la valeur de k à somme
renvoyer somme
def f(n):
"""
n: entier naturel
renvoie la somme des entiers compris entre 0 et n (bornes 0 et n comprises),
en ne comptant dans la somme que les entiers qui sont multiples à la fois de 3 et de 11.
"""
somme = 0
for k in range(0,n+1):
if k%3 == 0:
if k%11 == 0:
somme = somme + k
return somme
Ceux qui connaissaient and
depuis la classe de seconde pouvaient écrire ce qui suit (pour ceux qui ne connaissaient pas: "and" sera travaillé dans le chapitre sur les booléens plus tard).
def f(n):
"""
n: entier naturel
renvoie la somme des entiers compris entre 0 et n (bornes 0 et n comprises),
en ne comptant dans la somme que les entiers qui sont multiples à la fois de 3 et de 11.
"""
somme = 0
for k in range(0,n+1):
if k%3 == 0 and k%11 == 0:
somme = somme + k
return somme
Les lignes suivantes contiennent des assertions qui doivent être validées lrosqu'on exécute votre fonction.
def test_f():
assert f(15)==0
assert f(33)==33
assert f(70)==99
assert f(100)==198
assert f(200)==693
test_f()
Vous devez compléter le corps de la fonction ci-dessous. Elle prend en entrée un nombre réel strictement positif A et renvoie en sortie le plus grand entier impair $n$ tel que le produit de tous les entiers impairs $1\times 3\times 5 \times \dots \times n$ soit inférieur ou égal à A.
Pour l'entier $n$ donné en sortie, on doit donc avoir:
def g(A):
"""
A: nombre strictement positif
renvoie le plus grand entier impair n tel que le produit des entiers impairs entre 1 et n soit d'au plus A.
"""
Il s'agit là encore du principe d'accumulateur.
fonction g(A):
produit ← 1
n ← 1 # n est intialisé à la valeur du premier entier impair
Tant que produit est inférieur ou égal à A:
n prend la valeur impaire suivante
produit est multiplié par n
renvoyer l'avant dernière valeur de n (c'est à dire la dernière valeur de n qui rendait vrai le test du tant que)
def g(A):
"""
A: nombre strictement positif
renvoie le plus grand entier impair n tel que le produit des entiers impairs entre 1 et n soit d'au plus A.
"""
n = 1 # n est intialisé à la valeur du premier entier impair
produit = 1
while produit <= A:
n += 2 # entier impair suivant
produit = produit * n
return n-2
Remarquez bien qu'on renvoie $n-2$: en sortant de la boucle, la condition produit <= A
est devenue fausse, on a donc dépassé le dernier $n$ qui satisfait cette condition...
Les assertions qui suivent doivent être valides.
def test_g():
assert g(5)==3
assert g(20)==5
assert g(30)==g(40)
assert g(100)==5
assert g(105)==7
assert g(920)==7
test_g()