Bonjour
Je ne trouve pas dans python la fonction répéter jusqu'à
j'ai bien essayé avec un while mais ça ne fonctionne pas tout à fait pareil
Code:
1
2
3
4 a=0 while a<10: print(a) a=a+1
Comment la coder ?
Merci de vos conseils
Cordialement
Version imprimable
Bonjour
Je ne trouve pas dans python la fonction répéter jusqu'à
j'ai bien essayé avec un while mais ça ne fonctionne pas tout à fait pareil
Code:
1
2
3
4 a=0 while a<10: print(a) a=a+1
Comment la coder ?
Merci de vos conseils
Cordialement
Bonjour
Nomal, il n'y a pas. D'ailleurs je n'ai pas souvenir d'un langage qui implémente le "jusqu'à". Géneralement c'est le "tant que" qui est plébiscité.
Ben je ne vois pas pourquoi. Répéter jusqu'à condition c'est équivalent à répéter tant que "non condition".
Ensuite évidemment il ne faut pas se louper dans la transformation de "condition" en "non condition". Par exemple jusqua (a > 10) c'est tant que (a <= 10). Et pour les expressions plus complexes qui mixtent le "and" et "or" alors il faut connaitre (ou savoir retrouver) les lois mathématiques de De Morgan:
- non(A et B) = non(A) ou non(B)
- non(A ou B) = non(A) et non(B)
Comment coder quoi exactement???
Salut,
A la limite, on pourrait écrire:
mais, dans ce cas particulier, on préférera:Code:
1
2
3
4
5
6 a = 0 while True: .... a += 1 if a == 10: break
Essayez d'améliorer vos connaissances du langage plutôt que vouloir vous rassurer en y retrouvant des constructions connues.Code:
1
2 for a in range(10): ....
- W
Bonjour
oui j'utilisais en pascal le repeat et j'aurais aimé écrire une fonction python pour reproduire
Je vais donc voir avec while en inversant les conditions selon vos conseilsCode:
1
2
3
4
5
6
7
8
9
10
11
12 program boucle_repeat_until; var a:integer; begin a:=0; repeat a:=a+1; writeln(a); until a=10; end.
Bien à vous
En pascal, il existe effectivement une boucle repeat until où le test est effectué en fin de boucle, ce qui a pour effet qu'on passe obligatoirement une fois dans la boucle.
Ce même comportement peut être obtenu avec une boucle while.
Code:
1
2
3
4 while True: do_something() if condition(): break
Donc, le code Pascal que tu as posté :
Code:
1
2
3
4
5 a:=0; repeat a:=a+1; writeln(a); until a=10;
Peut se traduire comme ceci :
Code:
1
2
3
4
5
6 a = 0 while True: a+=1 print(a) if (a == 10): break
Bonjour
Concernant le while de Python, on peut ajouter 2 particularités intéressantes:
- c'était évident, mais on peut sortir de la boucle while avec le "if...break" à n'importe quel endroit du bloc d'instructions, et pas seulement à la fin
- avec "continue", on peut forcer le retour au while, sans exécuter la fin du bloc d'instruction
Il y a aussi un "else" que je n'ai jamais utilisé, et dont je ne comprends pas l'intérêt... 8O
Ahah !!!
Alors avant toute chose, un réflexe à avoir: toujours se dire que si quelque chose existe en Python c'est que ça peut être utile. Ne reste qu'à le trouver
Le "else" en fin de boucle sert à exécuter un code dans le cas où la boucle a été totalement terminée (c'est à dire pas interrompue avant la fin par un break).
Par exemple on peut s'en servir pour chercher (la boucle), si on trouve on sort (break) et si on ne trouve pas, donc que la boucle va jusqu'à la fin, alors (else) on indique qu'on n'a pas trouvé.
Sans ce "else" on ne peut obtenir l'équivalent qu'en utilisant un drapeau.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 >>> n=2 >>> while n < 10: ... x=2 ... while x < n: ... if (n%x) == 0: ... print(n, 'égal à ', x, '*', n//x) ... break ... x+=1 ... else: ... print(n, 'est un nombre premier') ... n+=1 ... 2 est un nombre premier 3 est un nombre premier 4 égal à 2 * 2 5 est un nombre premier 6 égal à 3 * 2 7 est un nombre premier 8 égal à 4 * 2 9 égal à 3 * 3
bonjour
Merci, je découvrais ce "else" il y a quelques jours grâce à ton tuto. (donc jamais utilisé)
MAIS...
Python veut être explicite Et pour moi, ce else est justement un non-sens ! Le else va s'exécuter si on parcourt bien toute la boucle :roll:
Il aurait été plus logique d'avoir une structure du type:
note: pas fan du "finally" (car pas le même sens que les exceptions) mais indique ici que nous sommes allés à la fin de la bouche (eol: est plus explicite)Code:
1
2
3
4
5
6 for item in items: if truc: break else: print("PAS parcours de tout") finally: print("parcours de tout")
Bah oui, peut-être que les codeurs n'ont pas bien saisi la façon dont les utilisateurs allaient percevoir le sens général de cette instruction (moi aussi parfois faut que je m'y reprenne pour savoir si je vais pouvoir la mettre ou pas). On peut la lire comme "si pas interruption alors ..." et faut bien faire avec.
Ca peut se réécrire en...
... mais j'aime bien ton idée. Peut-être qu'il y a une espèce de ticketing dans lequel tu pourrais la proposer en évolution. Le seul souci c'est que tu inverses le but du "else" (dans la VO il sert à indiquer le "parcours de tout" tandis que toi tu lui fais indiquer le "non parcours de tout") donc ce serait un changement majeur dans Python.Code:
1
2
3
4
5
6 for item in items: if truc: print("PAS parcours de tout") break else: print("parcours de tout")
On peut trouver des demandes comme la PEP 315
La doc est claire, dans ce cas, il faut penser plus "exception" :(Citation:
Envoyé par Sve@r;
Casser des années de code, pas de risque !Citation:
Lorsqu'elle utilisée dans une boucle, la clause else est donc plus proche de celle associée à une instruction try que de celle associée à une instruction if
Très bon sujet de 2009 (avec proposition de "then:"), existe aussi ce sujet
------------
Note: existe un forum python officiel sur les peps, sujets généralement très intéressants, comme la rubrique "idées" (comme le dev de pathlib).