Bonjour à tous,
j'ai beaucoup de mal à écrire cet algorithme…
J'espère vraiment que quelqu'un pourra m'aider.
Voici l'énoncé du programme qui me pose problème:
Partie C
1. En utilisant la fonction écrite en langage Python dans la partie A, écrire un programme qui renvoie la liste contenant tous les temps de vol correspondant aux suites débutant par chacun des nombres de 2 à 100.
Ensuite, j'ai essayé d'écrire le programme de la partie C, mais ça ne me renvoie le temps de vol que pour le n que je donne, et non pas pour les nombres de 2 à n…
def syracusetemps(n):
liste2=[]
tps_vol=0
for i in range(2,n+1,1):
while n!=1:
if n%2==0:
n=n//2
tps_vol=tps_vol+1
else:
n=3*n+1
tps_vol=tps_vol+1
liste2=liste2+[tps_vol]
i=i+1
return(liste2)
Bonjour,
à quoi sert i dans ton algorithme ??
erreur = recopier coller sans adapter la partie A pour faire la B
Bonjour,
Ta liste comporte toujours le même nombre car le temps de vol n'évolue plus une foie la première boucle avec i=1 terminée.
En effet, quand tu rentres dans ta boucle, tu as i=1, tps_vol=0 et n=ce que tu as mis (exemple 10).
Tu fais tes itérations et en sortie de la boucle pour i=1 tu as: i=1, tps_vol=6 et n=1.
Ensuite tu reviens en haut de ta boucle for puis tu as i=2, tps_vol=6 et n=1. Du coup ta boucle est direct terminée et tu ajoutes un autre 6 dans la liste que tu retournes. Et ainsi de suite jusqu'à la fin complète de ta boucle for.
Au vue des ces remarques, selon toi, comment faire en sorte de trouver le bon résultat ?
deuxième erreur d'ailleurs :
dans une boucle for on n'écrit pas explicitement la progression de la variable (ton i=i+1) !
cela fait partie du fonctionnement même interne du for lui-même :
il exécute la boucle pour chacune des valeurs de l'ensemble de valeurs définies par le range(...)
le i = i+1 ne fait en fait rien du tout
car le for a son propre itérateur de la liste range() et se fiche complètement de ce qu'on fait subir à sa variable i en plus.
comme c'est dit dans la doc :
Merci de m'avoir répondu.
En revanche, je n'ai pas compris pour le:
def syracusetemps(n):
liste2=[]
tps_vol=0
for i in range(2,n+1):
while n!=1:
if n%2==0:
n=n//2
tps_vol=tps_vol+1
else:
n=3*n+1
tps_vol=tps_vol+1
liste2=liste2+[tps_vol]
print(liste2)
dans la boucle la variable qui évolue ce n'est pas n, c'est i bien entendu
pour chaque valeur de i on veut calculer le temps de vol de la suite qui commence par i ...
Oui autant pour moi, quand tu rentres dans la boucle i=2.
Pour que ce soit plus clair je vais reprendre. Du coup je te propose de prendre n=10 et de suivre ton algorithme .
Tu crées une liste vide
TPS de vol = 0
*on rentre dans la boucle for*
i=2
*on rentre dan la boucle while*
n est pair, du coup n prend la valeur 5
TPS de vol = 1
*on reste dans la boucle while jusque ce que n=1*
n est impair, du coup prend la valeur 16
Tps=2
N est pair donc n=8
TPS=3
N est pair donc n=4
Tps = 4
N est pair donc n=2
Tps = 5
N est pair donc n=1
Tps=6
*on sort du whine car n=1*
On ajoute le temps de vol à la liste: Liste2=[ 6 ]
*on recommence en incrementant i*
i=3
*boucle while*
n=1
*on ressort du while, rien n'a bougé*
On ajoute la valeur de temps de vol dans la liste. Du coup Liste2=[2 , 2]
Et ainsi de suite jusque i=11
Du coup dans ton algorithme, il manque le moment où tu réinitialises ton temps de vol et ton n...
"il manque le moment où tu réinitialises ton temps de vol et ton n..."
non.
j'insiste
n est une donnée d'entrée , pas une variable prévue pour varier pendant l'exécution
la variable qui varie c'est i et rien que i
on n'a pas à modifier n en quoi que ce soit dans l'algorithme.
Au passage, plutôt que de modifier ton n (qui sert pour la fin de ta boucle for), je te recommande d'introduire une nouvelle variable. Ou alors tu crées une variable spéciale qui ne servira que pour le range. Avoir 1 variable pour 2 choses c'est jamais trop bon...
Meme si l'informatique gère plutôt bien les notions de variables locales et globales, je pense que modifier le i au sein de la boucle n'est pas l'idéal...
D'où l'introduction d'une nouvelle variable qui prendra comme valeur de départ celle de i puis subira toutes les transformations décrites par le vol de syracuse jusqu'à atteindre 1.
salut
sur un tableur , par vba ;
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :