Що означає "while True" у Python?


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

Хоча ЩО правда?

Я гадаю, сказати "хоча це правда" - це скорочення, але для чого? Поки змінні 'рука' присвоюється значення? А що, якщо змінні 'рука' не присвоєно значення?


1
True - це свого роду псевдонім для 1. Свого роду відповідне запитання, яке я задав, можна знайти тут stackoverflow.com/questions/885908/…
Копас

17
@Copas, Trueне є псевдонімом для 1. Хоча в багатьох мовах 1оцінює істину в логічному контексті.
adamse

2
adamse: У деяких версіях Python Trueце було псевдонімом 1, чи не так? Хоча так, в останніх версіях Python існує справжній логічний тип.
Кен

1
@adamse, @Ken: цитування з Що нового в Python 2.3 - PEP 285 : "Булевий тип був доданий до Python 2.3. Дві нові константи були додані до __builtin__модуля, True і False. (True і False константи були додані до вбудованого -ins в Python 2.2.1, але версії 2.2.1 просто встановлюються на цілі значення 1 і 0 і не є іншим типом.) ".
Крістіан Чьюпіту,

@adamse У python це не так, однак у багатьох мовах це так. Я вважав це більш загальним питанням. Розмовляючи з початківцем, коли Баба сказав, що він / вона сказав: «Правда - це свого роду псевдонім для 1», є абсолютно точним. Я погоджуюсь, що Python True не є псевдонімом для 1. Я не казав, що так було.
Копас

Відповіді:


107

while Trueозначає петля назавжди. Оператор whileприймає вираз і виконує тіло циклу, тоді як вираз має значення (логічне значення) "true". Trueзавжди обчислює логічне значення "true" і таким чином виконує тіло циклу необмежено довго. Це ідіома, до якої з часом ти просто звикнеш! Більшість мов, з якими ви можете зіткнутися, мають еквівалентні ідіоми.

Зверніть увагу, що у більшості мов зазвичай є якийсь механізм раннього виходу з циклу. У випадку з Python це breakтвердження у cmd == 'e'випадку зразка у вашому питанні.


9
Для ясності я вважаю, що ви можете робити while (true == true) більшістю мов. Це може допомогти новому програмісту краще зрозуміти логіку цього.
Кріс,

9
Кріс, while True==Trueце негарно. Це так само потворно, як while 'apples'!='oranges':)
dheerosaur

34
Як зазначив один з моїх викладачів: якщо ви вважаєте true==true, що це поліпшення, де ви зупиняєтесь? Не (true==true)==trueбуло б навіть краще?
Кен

10
@Chris, врешті-решт слід знати, що замість логічного виразу можна використовувати логічне значення або змінну, і "врешті-решт" має бути якомога швидше.
Mark Ransom,

6
Зрештою, слід зазначити, що часом потрібно трохи додаткової допомоги, щоб новий програміст зрозумів логічну логіку тощо. Все, що я намагався зробити, це допомогти йому зрозуміти це.
Кріс,

53

моє запитання: поки ШО що правда?

Поки Trueє True.

Цикл while працюватиме до тих пір, поки умовний вираз обчислюється True.

Оскільки Trueзавжди обчислюється з True, цикл буде працювати необмежено довго, доки щось у циклі returns або breaks.


4
Це python. Вираз у дужках відсутній; P
Mike Axiak

хе, хороший момент. Я не звик думати на Python. Хоча, я гадаю, ти міг би розмістити навколо нього
парен,

10

моє запитання: поки ШО що правда?

Все, що знаходиться в () оператора 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 - це правда.


10

поки True це правда - тобто завжди. Це нескінченний цикл

Тут зверніть увагу на важливу різницю між тим, Trueяке ключове слово в мові позначає постійне значення певного типу, та „true”, що є математичним поняттям.


Технічно кажучи, ви помиляєтесь. Конструкція означає "хоча true не є false". Ви можете побачити різницю, якщо ви пишете while(5)на мові C, де немає належних булевих значень. Це не означає while(5==1), це означає while(5!=0).
Blindy,

2
Я думаю, що доречніше сказати "невизначений цикл;" повинно бути припущення, що цикл буде перерваний обривом або поверненням у якийсь момент. Справді «нескінченні» цикли - це помилка програміста; "невизначені петлі" створюються за проектом.
Dagg Nabbit

3
@Blindy: у слабко набраній мові з автоматичним кастингом ви можете сказати, що x 'обчислюється як' y ... це не в той час, коли 5 не є строго рівним 0, це в той час, як 5 вільно дорівнює True.
Dagg Nabbit

@Blindy, while(5)на мові C означає while 5is true, а не while its trueor 0, що є чимось зовсім іншим. 5завжди правда. Загалом, коли мови мають ключове слово true, це константа, яка є істинною, але не єдина константа, яка є істинною. Подібним чином falseне обов'язково є єдиним значенням, яке є хибним.
Chris Dodd


3

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
Trueне завжди True , напр True = False. ;-)
ятанізм

1
@ jathanism- Правда є правда, До кінця рахунку.
dheerosaur

3

Формально, 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

І потенційно є "gotcha" з тим, що ви бачите, і тим, що бачить компілятор 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

Насправді boolтип Python - це підклас типу Python int:

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

Найважливіша частина вашого запитання - "Що є while True ?" є "що є істинним", а важливий наслідок: що є хибним?

По-перше, для кожної мови, яку ви вивчаєте, вивчіть те, що мова вважає „брудною” та „фальшивою”. Python розглядає Істину дещо інакше, ніж Perl Truth, наприклад. Інші мови мають дещо інші поняття істинного / хибного. Знайте, що ваша мова вважає істинною та хибною для різних операцій та контролю потоку, щоб уникнути багатьох головних болів пізніше!

Є багато алгоритмів, де ви хочете щось обробити, поки не знайдете те, що шукаєте. Звідси нескінченний цикл або невизначений цикл. Кожна мова, як правило, має свою ідіому для цих конструкцій. Ось загальні нескінченні цикли C, які також працюють для Perl:

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

/* or */

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

while True:Форма поширена в Python для невизначених контурів з яким - то чином вирватися з петлі. Вивчіть керування потоком Python, щоб зрозуміти, як ви вириваєтеся з while Trueциклів. Наприклад, на відміну від більшості мов, Python може мати elseречення про цикл. Є приклад в останньому посиланні.


1

whileЦикл займає умовний аргумент ( що означає те , що , як правило , або істинними , або хибними, або може бути витлумачено як такої), і виконується тільки в той час як умова дає True.

Що стосується while True? Ну, найпростіший справжній умовний - це Trueсам! Отже, це нескінченний цикл, зазвичай хороший у грі, яка вимагає великої кількості циклів. (Однак, з моєї точки зору, загальнішим є встановлення якоїсь змінної "готово" значення "false", а потім це значення true, щоб закінчити гру, і цикл буде виглядати більше while not done:або що завгодно.)



1

Щоб відповісти безпосередньо на ваше запитання: в той час як умова циклу є True. Що це завжди, у цьому конкретному фрагменті коду.


0

whileцикли продовжують цикл, поки умова не буде хибною. Наприклад (псевдокод):

i = 0
while i < 10
  i++

З кожною ітерацією циклу iбуде збільшуватися на 1, поки не стане 10. Тоді умова i < 10вже не відповідає дійсності, і цикл буде завершений.

Оскільки умова in while Trueє явно і завжди true, цикл ніколи не закінчується (поки він не буде розірваний якимось іншим способом, як правило, такою конструкцією, як breakусередині тіла циклу).


0

Ніщо не оцінює Trueшвидше, ніж True. Отже, добре, якщо ви використовуєте while Trueзамість while 1==1тощо.


0
while True:
    ...

означає нескінченний цикл.

Інструкція while часто використовується з кінцевого циклу. Але використання константи 'True' гарантує повторення оператора while без необхідності контролювати цикл (наприклад, встановлюючи логічне значення всередині ітерації), якщо ви не хочете його розірвати.

Фактично

True == (1 == 1)

0

в той час як True означає нескінченний цикл, це зазвичай використовується довгим процесом. ти можеш змінитися

while True:

з

while 1:

0

Хоча більшість з цих відповідей є різними в різній мірі правильними, жодна з них не є такою короткою, як хотілося б.

Простіше кажучи, використання while True:- це лише спосіб запуску циклу, який буде продовжувати працювати до тих пір, поки ви явно не вирветься з нього за допомогою breakабо return. Оскільки True завжди буде вважати True, вам доведеться змусити цикл закінчуватися, коли ви цього захочете.

while True:
    # do stuff

    if some_condition:
        break

    # do more stuff - code here WILL NOT execute when `if some_condition:` evaluates to True

Хоча зазвичай цикл встановлюється для роботи, поки умова while не буде хибною, або вона досягне заздалегідь визначеної кінцевої точки:

do_next = True

while do_next:

    # do stuff

    if some_condition:
        do_next = False

    # do more stuff - code here WILL execute even when `if some_condition:` evaluates to True

Ці два фрагменти коду фактично роблять те саме

Якщо умовою, яку оцінює ваш цикл, можливо є значення, яке не знаходиться безпосередньо у вашому контролі, наприклад, введене користувачем значення, тоді, як правило, необхідна перевірка даних та явне прорив із циклу, тому ви хочете зробити це за допомогою будь-якого методу .

while TrueФормат більш віщий , так як ви знаєте , що breakпорушує цикл в той точний момент, в той час як do_next = Falseмогли б зробити більше матеріалу до наступної оцінки do_next.


-4

Будь-що можна сприймати як Істину, поки не буде показано протилежне. Так працює подвійність. Це спосіб порівняння протилежностей. Чорний може бути істинним до білого, в цей момент він є помилковим. Чорний також може бути Помилковим до білого, в цей момент він істинний. Це не держава, а порівняння протилежних станів. Якщо будь-яке значення Істина, інше помиляється. Істина не означає, що вона правильна або прийнята. Це стан, де протилежне завжди хибне. Це подвійність.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.