основной вопрос о "пока верно" - PullRequest
69 голосов
/ 20 сентября 2010

уровень: начинающий

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."

мой вопрос: пока ЧТО ИСТИНА?

Я считаю, что сказать "пока правда" - это сокращение, но для чего?в то время как переменной 'hand' присваивается значение?а что, если переменной 'hand' не присваивается значение?

Ответы [ 15 ]

92 голосов
/ 20 сентября 2010

while True означает цикл навсегда.Оператор while принимает выражение и выполняет тело цикла, в то время как выражение оценивается как (логическое) «true».True всегда оценивается как логическое «истина» и, таким образом, выполняет тело цикла бесконечно.Это идиома, к которой ты в конце концов привыкнешь!Большинство языков, с которыми вы можете столкнуться, имеют эквивалентные идиомы.

Обратите внимание, что в большинстве языков обычно есть какой-то механизм для раннего выхода из цикла.В случае с Python это оператор break в случае cmd == 'e' примера в вашем вопросе.

39 голосов
/ 20 сентября 2010

мой вопрос: а ЧТО ИСТИНА?

Пока True равно True.

Цикл while будет выполняться до тех пор, пока условное выражение не будет равно True.

Поскольку True всегда оценивается как True, цикл будет выполняться бесконечно, пока что-то внутри цикла return с или break с.

8 голосов
/ 20 сентября 2010

, в то время как True верно, то есть всегда.Это бесконечный цикл

Обратите внимание на важное различие между True, которое является ключевым словом в языке, обозначающим постоянное значение определенного типа, и 'true', который является математическим понятием.

7 голосов
/ 20 сентября 2010

мой вопрос: а ЧТО ИСТИНА?

Все внутри () оператора while будет оцениваться как логическое значение. Это означает, что оно преобразуется в истинное или ложное.

Рассмотрим в утверждении while(6 > 5)

Сначала вычисляется выражение 6 > 5, равное true, то же самое, что сказать while(true)

Все, что не FALSE, 0, пустая строка "", null или undefined, вероятно, будет оценено как true.

Когда я впервые начал программировать, я обычно делал такие вещи, как if(foo == true), я не понимал, что это практически то же самое, что if(foo).

Так что, когда вы говорите while(true), все равно, что говорят while(true == true)

Итак, чтобы ответить на ваш вопрос: пока TRUE - это правда.

4 голосов
/ 20 сентября 2010

В этом контексте, я полагаю, это можно интерпретировать как

do
...
while cmd  != 'e' 
2 голосов
/ 21 сентября 2010

Формально True - это встроенная константа Python типа bool .

Вы можете использовать логические операции для типов bool (например, в интерактивном окне python) и преобразовывать числа в типы 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

И есть потенциальные "уловки" потенциально с тем, что вы видите и что видит компилятор Python:

>>> 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

Как подсказка о том, как Python хранит типы bool внутри, вы можете привести типы bool к целым числам, и True окажется равным 1 и False 0:

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

На самом деле тип Python bool является подклассом типа int Python:

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

Более важной частью вашего вопроса является "Что такое while True?" «Что есть истина» и важное следствие: что ложно?

Во-первых, для каждого изучаемого языка выучите, что он считает «правдивым» и «ложным». Python рассматривает Truth немного иначе, чем Perl Truth , например. В других языках немного другие понятия истина / ложь. Знайте, что ваш язык считает Истинным и Ложным для различных операций и управления потоком, чтобы избежать многих головных болей позже!

Существует множество алгоритмов, в которых вы хотите что-то обработать, пока не найдете то, что ищете. Отсюда бесконечный цикл или неопределенный цикл. Каждый язык, как правило, имеет свою идиому для этих конструкций. Вот общие бесконечные циклы C, которые также работают для Perl:

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

/* or */

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

Форма while True: распространена в Python для неопределенных циклов с некоторым выходом из цикла. Изучите Python управление потоком , чтобы понять, как вы выходите из while True циклов. В отличие от большинства языков, например, Python может иметь в цикле предложение else. В последней ссылке есть пример.

2 голосов
/ 20 сентября 2010

True всегда True, поэтому while True будет зацикливаться вечно.

Ключевое слово while принимает выражение и зацикливается, пока выражение истинно. True - это выражение, которое всегда верно.

В качестве возможного поясняющего примера рассмотрим следующее:

a = 1
result = a == 1

Здесь a == 1 вернет True и, следовательно, поместит True в result. Следовательно,

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

эквивалентно:

while True:
  ...

при условии, что вы не измените значение a внутри цикла while.

1 голос
/ 28 сентября 2010

Чтобы ответить на ваш вопрос напрямую: пока условие цикла верно. Который это всегда, в этом конкретном кусочке кода.

1 голос
/ 20 сентября 2010

В некоторых языках True это просто и псевдоним для числа. Вы можете узнать больше об этом, прочитав больше о булевой логике .

1 голос
/ 20 сентября 2010
Цикл

A while принимает условный аргумент (что-то, что обычно является либо истиной, либо ложью, либо может интерпретироваться как таковой), и выполняется только тогда, когда условие выдает True.

Что касается while True? Ну, самое простое истинное условие само по себе True! Так что это бесконечный цикл, обычно хороший в игре, которая требует много циклов. (Однако, с моей точки зрения, более распространенным является установление некоторой переменной «done» в значение false, а затем установление этого значения в true для завершения игры, и цикл будет выглядеть более похоже на while not done: или что-либо подобное.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...