une question de fond sur la “while true”
niveau: débutant
def play_game(word_list):
hand = deal_hand(HAND_SIZE) # random init
while True:
cmd = raw_input('Enter n to deal a new hand, r to replay the last hand, or e to end game: ')
if cmd == 'n':
hand = deal_hand(HAND_SIZE)
play_hand(hand.copy(), word_list)
print
elif cmd == 'r':
play_hand(hand.copy(), word_list)
print
elif cmd == 'e':
break
else:
print "Invalid command."
ma question: tout CE qui est Vrai?
j'ai l'impression de dire "tout" vrai " est un raccourci, mais pour quoi faire? tandis que la variable "main" est assignée une valeur? et si la variable "main" n'est pas attribué une valeur?
- Vrai, c'est une sorte d'alias pour 1. Une sorte de question connexe, j'ai demandé peut être trouvé ici stackoverflow.com/questions/885908/...
True
n'est pas un alias pour1
. Bien que dans de nombreuses langues1
évalue à la vérité dans un contexte booléen.- adamse: Dans certaines versions de Python,
True
a été un alias pour1
, non? Si oui, dans les dernières versions de Python, il existe un réel de type booléen. - citant Quoi de neuf en Python 2.3 - PEP 285: "Un type Booléen a été ajouté à Python 2.3. Deux nouvelles constantes ont été ajoutés à la
__builtin__
module, le Vrai et le Faux. (Le vrai et le Faux constantes ont été ajoutés à la built-ins en Python 2.2.1, mais l'2.2.1 versions sont simplement définie pour les valeurs entières de 1 et de 0 et ne sont pas d'un type différent.)". - En python, il n'est pas, cependant, dans de nombreuses langues, il est. Je considère que c'est une question plus générale. En parlant à un débutant comme Baba a dit qu'il/elle a été "le Vrai est en quelque sorte un alias pour 1" est parfaitement exact. Je suis d'accord en Python Véritable n'est pas un alias pour 1. Je n'ai pas dit qu'il était.
- Veuillez marquer ma réponse comme "accepté" si vous êtes satisfait avec elle.
- J'ai une question sans rapport. Est-ce considéré comme "pythonic'? Suis-je le seul à sentir que c'est une habitude a une mauvaise odeur? J'ai l'impression que cela pourrait être écrit d'une manière plus claire.
Vous devez vous connecter pour publier un commentaire.
while True
moyens boucle pour toujours. Lewhile
instruction est une expression et exécute le corps de la boucle, tandis que l'expression est évaluée à (boolean) "true".True
prend toujours la valeur booléenne "true" et donc exécute le corps de la boucle indéfiniment. C'est un idiome que vous aurez juste s'habituer à finalement! La plupart des langues, vous êtes susceptible de rencontrer l'équivalent des expressions idiomatiques.Noter que la plupart des langues ont généralement un mécanisme pour sortir de la boucle au début. Dans le cas de Python c'est le
break
instruction dans lecmd == 'e'
cas de l'échantillon dans votre question.while True==True
est laid. Il est aussi laid quewhile 'apples'!='oranges'
🙂true==true
est une amélioration, où avez-vous l'arrêter? Ne serait pas(true==true)==true
être encore mieux?bool ever = true; for (;ever;) { }
while True == True
est bon etwhile False == False
est mauvais, vous avez mal compris tout.Tout
True
estTrue
.La boucle while va s'exécuter tant que la condition de l'expression est évaluée à
True
.Depuis
True
évalue toujours àTrue
, la boucle va s'exécuter indéfiniment, jusqu'à ce que quelque chose à l'intérieur de la bouclereturn
s oubreak
s.tout
True
est vrai-c'est à dire toujours. C'est une boucle infinieDe noter l'importance de la distinction ici entre
True
qui est un mot-clé dans la langue dénotant une valeur constante d'un type particulier, et 'true', qui est un concept mathématique.while(5)
dans C, où il n'y a aucune bonne booléens. Cela ne veut pas direwhile(5==1)
, cela signifiewhile(5!=0)
.5
est vrai, et non satrue
ou0
, qui est quelque chose de complètement différent.5
est toujours vrai. En général, lorsque les langues ont un mot clétrue
, c'est une constante qui est vrai, mais pas la seule constante c'est vrai. De mêmefalse
n'est pas nécessairement la seule valeur qui est faux.Tout à l'intérieur de la () de l'instruction while va être évalué comme un booléen. Sens, il est converti en valeur true ou false.
Considérer dans la déclaration
while(6 > 5)
Il évalue d'abord l'expression
6 > 5
qui esttrue
est donc la même chose que de direwhile(true)
Tout ce qui n'est pas FAUX, 0, un emptry chaîne "", null ou undefined est susceptible d'être évaluée à vrai.
Quand j'ai commencé la programmation que j'ai utilisé pour faire des choses comme
if(foo == true)
, je ne savais pas que c'était pratiquement la même chose queif(foo)
.Quand vous dites
while(true)
son comme disentwhile(true == true)
Donc, pour répondre à votre question: si cela est VRAI est Vrai.
Dans ce contexte, je suppose que cela pourrait être interprété comme
True
est toujoursTrue
, doncwhile True
en boucle pour toujours.La
while
mot prend une expression, et la boucle tant que l'expression est vraie.True
est une expression qui est toujours vrai.Comme éventuellement clarifier exemple, considérez les points suivants:
Ici,
a == 1
sera de retourTrue
, et donc de mettreTrue
enresult
. Par conséquent,est équivalent à:
à condition de ne pas altérer la valeur de
a
à l'intérieur de lawhile
boucle.True
n'est pas toujoursTrue
, par exempleTrue = False
. 😉Officiellement,
True
est un Python constant de bool type.Vous pouvez utiliser Opérations booléennes sur bool types (à l'interactif invite python par exemple) et convertir des nombres en bool types:
Et il y a des "gotcha" potentiellement avec ce que vous voyez et ce que le Python compilateur voit:
Comme un indice de la façon Python magasins de bool types en interne, vous pouvez lancer bool types de nombres entiers et Vrai viendra à 1 et False 0:
En fait, Python
bool
type est une sous-classe de Pythonint
type:La plus importante partie de votre question est "qu'est-Ce que
while True
?" est "ce qui est Vrai", et un corollaire important: Ce qui est faux?Tout d'abord, pour chaque langue que vous apprenez, apprenez que la langue considère "truthy" et "falsey'. Python considère La vérité légèrement différemment de Perl Vérité par exemple. D'autres langues ont légèrement différents concepts de vrai /faux. Savoir ce que votre langue estime être le Vrai et le Faux pour les différentes opérations et le contrôle de flux pour éviter beaucoup de maux de tête plus tard!
Il existe de nombreux algorithmes où vous voulez traiter quelque chose jusqu'à ce que vous trouver ce que vous cherchez. D'où la boucle infinie ou boucle indéterminée. Chaque langue ont tendance à avoir son propre idiome pour ces constructions. Ici sont communs C les boucles infinies, qui fonctionnent également pour Perl:
La
while True:
la forme est commune en Python pour une durée indéterminée boucles avec un moyen de sortir de la boucle. Apprendre Python contrôle de flux à comprendre comment vous sortir dewhile True
boucles. Contrairement à la plupart des langues, par exemple, Python peut avoir unelse
clause sur une boucle. Il y a un exemple dans le dernier lien.Un
while
boucle conditionnelle d'un argument (ce qui signifie quelque chose qui est généralement vrai ou faux, ou peut être interprété comme tel), et seulement s'exécute tant que la condition des rendementsTrue
.Comme pour
while True
? Eh bien, le plus simple vrai conditionnelle estTrue
lui-même! Donc, c'est une boucle infinie, généralement de bon dans un jeu qui nécessite beaucoup de bouclage. (Plus commun de mon point de vue, cependant, est de définir une sorte de "fait" de la variable à false et faire que la vraie fin du jeu, et la boucle ressemblerait plus àwhile not done:
ou quoi que ce soit.)Dans certaines langues, le Vrai est juste et alias pour le nombre. Vous pouvez en apprendre plus pourquoi c'est en lisant plus sur la logique booléenne.
Pour répondre directement à votre question: alors que la condition de la boucle est Vrai. Qui c'est toujours, dans ce morceau de code.
while
boucles de continuer à boucle jusqu'à ce que la condition est fausse. Par exemple (pseudo-code):À chaque itération de la boucle,
i
sera incrémenté de 1 jusqu'à 10. À ce stade, la conditioni < 10
n'est plus vrai, et la boucle se termine.Puisque la condition dans
while True
est explicitement et toujourstrue
, la boucle ne s'arrêtera jamais (jusqu'à ce qu'il se compose de quelque autre façon, le plus souvent par une construction commebreak
dans le corps de la boucle).Rien évalue à
True
plus vite queTrue
. Donc, il est bon si vous utilisezwhile True
au lieu dewhile 1==1
etc.moyens boucle infinie.
L'instruction while est souvent utilisé d'une boucle finie. Mais l'aide de la constante "Vrai" garantit la répétition de l'instruction while, sans la nécessité de contrôle de la boucle (paramètre une valeur booléenne à l'intérieur de l'itération par exemple), sauf si vous voulez casser.
En fait
tout Vrai dire, la boucle infinie, c'est généralement l'utilisation par un long processus.
vous pouvez modifier
avec
Tout peut être pris comme Vraie jusqu'à ce que le contraire est présenté. C'est la voie de la dualité des œuvres. C'est une façon que les opposés sont comparés. Le noir peut être Vrai jusqu'à ce que le blanc à quel point c'est Faux. Le noir peut aussi être Faux jusqu'à ce que le blanc à quel point c'est Vrai. Il n'est pas un état mais une comparaison des états opposés. Si l'un est Vrai, l'autre est faux. Vrai, ne signifie pas qu'il est correct ou est acceptée. C'est un état où le contraire est toujours Faux. C'est la dualité.