web-dev-qa-db-fra.com

une question de base sur "en tant que vrai"

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: Alors que ce qui est vrai?

je pense que dire 'tant que vrai' est un raccourci mais pour quoi? pendant que la variable 'hand' reçoit une valeur? et que se passe-t-il si la valeur 'variable' n'est pas affectée?

72
Baba

while True signifie en boucle pour toujours. L'instruction while prend une expression et exécute le corps de la boucle tandis que l'expression est évaluée à (booléen) "true". True donne toujours la valeur booléenne "true" et exécute donc le corps de la boucle indéfiniment. C'est un idiome auquel vous vous habituerez un jour! La plupart des langues que vous rencontrerez ont des idiomes équivalents.

Notez que la plupart des langues ont généralement un mécanisme pour sortir de la boucle plus tôt. Dans le cas de Python, il s’agit de l’instruction break de la cmd == 'e' cas de l’échantillon dans votre question.

93
Richard Cook

ma question: Alors que ce qui est vrai?

Alors que True est True.

La boucle while s'exécutera tant que l'expression conditionnelle aura la valeur True.

Étant donné que True est toujours évalué à True, la boucle s'exécutera indéfiniment jusqu'à ce que quelque chose se trouve dans la boucle returns ou breaks.

41
Dagg Nabbit

tandis que True est vrai - c'est-à-dire toujours. C'est une boucle infinie

Notez la distinction importante ici entre True qui est un mot clé dans le langage désignant une valeur constante d'un type particulier et "true" qui est un concept mathématique.

8
Chris Dodd

ma question: Alors que ce qui est vrai?

Tout ce qui se trouve à l'intérieur de l'instruction () de l'instruction while va être évalué comme un booléen. Ce qui signifie qu'il est converti en vrai ou en faux.

Considérer dans l'instruction while(6 > 5)

Il évalue d’abord l’expression 6 > 5 Qui est true donc équivaut à dire while(true)

Tout ce qui n'est pas FALSE, 0, une chaîne emptry "", null ou undefined est susceptible d'être évalué à true.

Quand j'ai commencé à programmer, je faisais des choses comme if(foo == true), je n'avais pas réalisé que c'était pratiquement la même chose que if(foo).

Alors, quand vous dites while(true) c'est comme si vous dites while(true == true)

Donc, pour répondre à votre question: Tandis que TRUE est vrai.

7
JD Isaacks

Dans ce contexte, je suppose que cela pourrait être interprété comme

do
...
while cmd  != 'e' 
4
Paul Butcher

Formellement, True est un type Python constante intégrée = de bool .

Vous pouvez utiliser opérations booléennes sur les types bool (au niveau interactif python Demander par exemple) et convertir les nombres en types bool:

>>> print not True
False
>>> print not False
True
>>> print True or False
True
>>> print True and False
False
>>> a=bool(9)
>>> print a
True
>>> b=bool(0)
>>> print b
False
>>> b=bool(0.000000000000000000000000000000000001)
>>> print b
True

Et il y a potentiellement des "gotcha" avec ce que vous voyez et ce que le compilateur Python voit:

>>> n=0
>>> print bool(n)
False
>>> n='0'
>>> print bool(n)
True
>>> n=0.0
>>> print bool(n)
False
>>> n="0.0"
>>> print bool(n)
True

Comme indication de la manière dont Python stocke les types bool en interne, vous pouvez convertir les types bool en entiers et True deviendra 1 et False 0:

>>> print True+0
1
>>> print True+1
2
>>> print False+0
0
>>> print False+1
1

En fait, Python bool type est une sous-classe du type int de Python:

>>> type(True)
<type 'bool'>
>>> isinstance(True, int)
True

La partie la plus importante de votre question est "Qu'est-ce que while True?" est 'qu'est-ce qui est vrai' et un corollaire important: qu'est-ce qui est faux?

Premièrement, pour chaque langue que vous apprenez, découvrez ce que la langue considère comme "vérité" et "falsey". Python considère vérité légèrement différent de vérité Perl par exemple. Les autres langues ont concepts légèrement différents de true/false. Sachez ce que votre langage considère comme étant True et False pour différentes opérations et contrôle de flux afin d'éviter de nombreux maux de tête plus tard!

Il existe de nombreux algorithmes dans lesquels vous souhaitez traiter quelque chose jusqu'à ce que vous trouviez ce que vous recherchez. D'où la boucle infinie ou la boucle indéfinie. Chaque langue a tendance à avoir son propre idiome pour ces constructions. Voici les boucles C infinies courantes, qui fonctionnent également pour Perl:

for(;;) { /* loop until break */ }

/* or */

while (1) {
   return if (function(arg) > 3);
}

La forme while True: Est courante dans Python pour les boucles indéfinies avec un moyen de sortir de la boucle. Learn Python flux control pour comprendre comment vous sortez des boucles while True Contrairement à la plupart des langages, par exemple, Python peut avoir une clause else sur une boucle. Il y a un exemple dans le dernier lien.

2
dawg

True est toujours True, donc while True fera une boucle pour toujours.

Le mot clé while prend une expression et effectue une boucle tant que cette expression est vraie. True est une expression qui est toujours vraie.

En guise d'exemple, prenez les points suivants:

a = 1
result = a == 1

Ici, a == 1 retournera True et mettra donc True dans result. Par conséquent,

a = 1
while a == 1:
  ...

est équivalent à:

while True:
  ...

à condition de ne pas modifier la valeur de a à l'intérieur de la boucle while.

2
Håvard S

Une boucle while prend un argument conditionnel (ce qui signifie quelque chose qui est généralement soit vrai, soit faux, ou peut être interprété en tant que tel), et ne s'exécute que lorsque la condition donne True.

Pour ce qui est de while True? Eh bien, le vrai conditionnel le plus simple est True lui-même! Il s’agit donc d’une boucle infinie, généralement bonne dans un jeu qui nécessite beaucoup de boucles. (Plus commun de mon point de vue, cependant, est de définir une sorte de variable "done" sur false, puis de le rendre vrai pour mettre fin au jeu, et la boucle ressemblerait davantage à while not done: ou peu importe.)

1
Platinum Azure

Dans certaines langues, True est un alias pour le nombre. Vous pouvez en apprendre plus sur la raison en lisant plus à propos de logique booléenne .

1
Copas

Pour répondre directement à votre question: tant que la condition de boucle est vraie. Ce qui est toujours le cas, dans ce morceau de code particulier.

1
Marius Gedminas

alors que True signifie une boucle infinie, cette utilisation est généralement un long processus. vous pouvez changer

while True:

avec

while 1:
0
Yuda Prawira
while True:
    ...

signifie boucle infinie.

L'instruction while est souvent utilisée comme une boucle finie. Mais l'utilisation de la constante 'True' garantit la répétition de l'instruction while sans qu'il soit nécessaire de contrôler la boucle (définir une valeur booléenne dans l'itération, par exemple), à ​​moins que vous ne souhaitiez la rompre.

En réalité

True == (1 == 1)
0
rob

Rien n'indique que True soit plus rapide que True. Donc, c'est bien si vous utilisez while True au lieu de while 1==1 etc.

0
dheerosaur

Les boucles while continuent à fonctionner jusqu'à ce que la condition soit fausse. Par exemple (pseudocode):

i = 0
while i < 10
  i++

À chaque itération de la boucle, i sera incrémenté de 1, jusqu'à atteindre 10. À ce stade, la condition i < 10 n'est plus vrai et la boucle se terminera.

Depuis la condition en while True est explicitement et toujours true, la boucle ne se terminera jamais (jusqu’à ce qu’elle soit séparée d’une autre manière, habituellement par une construction telle que break dans le corps de la boucle).

0
Daniel Vandersluis