DM python 2nd
Réponses à toutes vos questions de la 2nde à la Terminale toutes séries
-
Tucyos
par Tucyos » 29 Fév 2020, 17:11
Bonjour
Je bloque sur un exercice sur python a partir d'un algorithme que j'ai du faire et je précise que je suis en seconde. Il faut que je fasse un programme qui montre que c'est impossible de dépasser 7500 livres
l = 7500
while l:
if l > 7500:
print("Il y a bien plus de 7500 livres")
else:
l = l * (1 - 2 / 100) + 30
break
print(l)
Vu que il ne dépassera pas 7500 livres il n'affiche pas le résultat, du coup ma question est comment montrer qu'il ne peut pas le dépasser et qu'il ne le pourrait jamais
Merci d'avance et j'ai aussi mis mon algorithme juste en dessous

-
GaBuZoMeu
- Habitué(e)
- Messages: 6151
- Enregistré le: 05 Mai 2019, 09:07
-
par GaBuZoMeu » 29 Fév 2020, 17:44
Première ligne : "l=7500"
Ça commence mal. Dans l'algorithme que tu reproduis, on initie l à 5000.
Deuxième ligne : "while l:"
while l quoi ??? ce qui suit while et précède les deux points doit être un test qui retourne un booléen (vrai ou faux). l n'est pas un booléen.
Et puis, si on regarde bien ton programme, on arrête de boucler quand on a fait 1000 boucles. Ce n'est donc pas un "while" qu'il faut. ...
-
LB2
- Habitué(e)
- Messages: 1504
- Enregistré le: 05 Nov 2017, 16:32
-
par LB2 » 29 Fév 2020, 18:12
Bonjour,
le questionneur n'y est sans doute pour rien mais cet algorithme me laisse également très circonspect.
Avant de se lancer dans cet algorithme là, il serait bon de savoir écrire un algorithme très simple calculant et affichant les n=10 (ou 100, ou 1000...) premiers termes de la suite, par exemple.
-
Tucyos
par Tucyos » 29 Fév 2020, 19:53
A vrai dire c’était mon premier algorithme mais c'est sur le programme que j'aurai besoin d'aide je l'ai refais et je ne sais pas comment faire une boucle qui répète une action avec un nombre de fois défini.
Dans mon programme sa serait de répéter 1000 fois l = l*(1-2/100)+30 et puis après cela serait de dire que c'est impossible d'avoir l > 7500
Voici ce que j'ai fais pour l'instant:
l = 5000
if l > 7500:
print("Il y a bien plus de 7500 livres")
else:
l = l * (1-2/100) + 30
if l > 7500:
print("Il y a bien plus de 7500 livres")
else:
l = l * (1-2/100) + 30
if l > 7500:
print("Il y a bien plus de 7500 livres")
else:
l = l * (1-2/100) + 30
print(l)
(Il y a bien une tabulation sur l'IDE mais je n'arrive pas a la faire ici)
-
chadok
- Membre Relatif
- Messages: 320
- Enregistré le: 04 Nov 2017, 21:44
- Localisation: Bretagne
-
par chadok » 29 Fév 2020, 20:28
Mais où est passée ta boucle ? Sans boucle, ton programme va être très long à écrire
Et quand tu écris ton programme ici, fais-le entre 2 balises [code], ça fera apparaître tes indentations.
-
Tucyos
par Tucyos » 29 Fév 2020, 21:10
la boucle sa serait:
while l < 2000:
puis le code ?
-
fatal_error
- Membre Légendaire
- Messages: 6610
- Enregistré le: 22 Nov 2007, 12:00
-
par fatal_error » 29 Fév 2020, 21:33
pour faire un boucle qui répère n fois tu peux:
for i in range(n):
...
ou bien
i = 0
while i < n:
...i = i + 1
la vie est une fête

-
chadok
- Membre Relatif
- Messages: 320
- Enregistré le: 04 Nov 2017, 21:44
- Localisation: Bretagne
-
par chadok » 29 Fév 2020, 21:38
l = le nombre de boucles , ou le nombre de livres ?
Il faut que tu réfléchisses au problème dans sa globalité, sans jouer aux devinettes
Si l = le nombre de livres, alors tu initialises l à 5000, pas à 2000. Et tu regardes si l peut atteindre 7500 en faisant des boucles. Pigé ?

-
Tucyos
par Tucyos » 29 Fév 2020, 21:50
Je crois que j'ai trouvé en faisant ce code sa me m'est bien que c'est impossible
- Code: Tout sélectionner
l = 5000
nb_repetitions = 1000
for i in range(nb_repetitions):
if l > 7500:
print("Il y a bien plus de 7500 livres")
else:
l = l * (1-2/100) + 30
print(l)
if l < 2000:
print("Il est impossible d'avoir plus de 7500 livres")
-
chadok
- Membre Relatif
- Messages: 320
- Enregistré le: 04 Nov 2017, 21:44
- Localisation: Bretagne
-
par chadok » 29 Fév 2020, 22:10
C'est presque parfait, tu apprends très vite

Deux petites remarques :
- il y a un petit piège avec la commande Range : il faut taper range(1:n+1) pour faire n boucles. Là, tu n' en as fait que 999 ;
- ton test final "if l < 2000" est inutile. Tu es sorti de la boucle avec l < 7500, c' est tout ce qu' on te demandait. Bravo
-
Tucyos
par Tucyos » 29 Fév 2020, 22:16
C'est bon comme ça ?
- Code: Tout sélectionner
l = 5000
nb_repetitions = 1000
for i in range(nb_repetitions+1):
if l > 7500:
print("Il y a bien plus de 7500 livres")
else:
l = l * (1-2/100) + 30
print(l)
print("Il est impossible d'avoir plus de 7500 livres")
-
chadok
- Membre Relatif
- Messages: 320
- Enregistré le: 04 Nov 2017, 21:44
- Localisation: Bretagne
-
par chadok » 29 Fév 2020, 22:19
EDIT : excuse-moi, c' est toi qui as raison ! Ton
range(n) fait bien n boucles

Tout comme mon
range(1,n+1), mais qui est juste plus compliqué à écrire

-
Tucyos
par Tucyos » 29 Fév 2020, 22:22
A quoi sert le 1, dans range(1,n+1) pour le +1 je comprend mais pas le 1,
-
chadok
- Membre Relatif
- Messages: 320
- Enregistré le: 04 Nov 2017, 21:44
- Localisation: Bretagne
-
par chadok » 29 Fév 2020, 22:26
A part ça, supprime carrément ta dernière ligne : elle est piégeuse, car tu n' as pas mis de test devant. Donc elle s'affichera toujours !...
-
chadok
- Membre Relatif
- Messages: 320
- Enregistré le: 04 Nov 2017, 21:44
- Localisation: Bretagne
-
par chadok » 29 Fév 2020, 22:33
Tucyos a écrit:A quoi sert le 1, dans range(1,n+1) pour le +1 je comprend mais pas le 1,
C' est moi qui t' ai embrouillé la tête, oublie

Range, avec 2 termes, sert à parcourir une plage. Par exemple, écris ce petit programme :
- Code: Tout sélectionner
for i in range(3,12+1):
print(i)
-
Tucyos
par Tucyos » 29 Fév 2020, 22:33
Ah ok j'ai compris.Mais du coup ou je met mon print("Il est impossible d'avoir plus de 7500 livres")?
-
chadok
- Membre Relatif
- Messages: 320
- Enregistré le: 04 Nov 2017, 21:44
- Localisation: Bretagne
-
par chadok » 01 Mar 2020, 18:26
Je dirais, nulle part ! Ta suite semble converger vers 1500, ton programme fonctionne, tu as fait le taf. Mais ton PC n' a rien
démontré. Il n'a surtout pas démontré que la suite n'atteindra
jamais 7500

-
fatal_error
- Membre Légendaire
- Messages: 6610
- Enregistré le: 22 Nov 2007, 12:00
-
par fatal_error » 01 Mar 2020, 21:35
hello,
1) Dans le meilleur des mondes, tu pourrais tester tant que la nouvelle valeur est différente de l'ancienne, l'idée étant: ma suite converge, au bout d'un moment, vuqe ma représentation de nombre est finie, je vais forcément trouver le même nombre.
Dans la réalité, je serais pas si sûr car à cause des arrondis, peut être que tu vas osciller près de la limite, auquel cas, il faut non pas conserver la valeur précédente, mais quelques unes...
Essaie 1, avec un peu de chance, ca marche!
la vie est une fête

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 42 invités