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

虽然什么是正确的?

我认为“虽然为真”是简写,但是为什么呢?为变量“手”分配值时?如果没有为变量“ hand”赋值,该怎么办?


1
真实是那种对1的排序相关的问题一个别名,我问可以在这里找到stackoverflow.com/questions/885908/...
COPAS

17
@Copas,True不是的别名1。尽管在许多语言1中,布尔上下文都对真相进行了评估。
亚当斯2010年

2
亚当斯:在某些版本的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的整数值,并且不是其他类型。)”。
Cristian Ciupitu

@adamse在python中不是,但是在许多语言中都是。我认为这是一个更普遍的问题。就像巴巴对初学者所说的那样,“真是1的别名”是非常准确的。我在Python中同意True不是1的别名。我没有说是。
古巴杯2010年

Answers:


107

while True意味着永远循环。该while语句接受一个表达式并执行循环主体,同时该表达式的值评估为(布尔值)“ true”。True总是计算为布尔值“ true”,从而无限期地执行循环体。这是一个习惯,您最终会习惯的!您可能会遇到的大多数语言都有相同的成语。

请注意,大多数语言通常都有一些机制可以尽早脱离循环。在Python中,这是您问题中示例的break陈述cmd == 'e'


9
为了清楚起见,我相信您可以在大多数语言中使用while(true == true)。这可能有助于新程序员更好地理解其背后的逻辑。
克里斯(Chris

9
克里斯,while True==True丑陋。它就像while 'apples'!='oranges':)一样丑陋:
dheerosaur

34
正如我的一位老师指出的那样:如果您认为这true==true是一种进步,那么您将在哪里停下来?会不会(true==true)==true更好?

10
@Chris,最终应该意识到可以使用布尔值或变量来代替逻辑表达式,并且“最终”应该尽快。
Mark Ransom 2010年

6
@Mark最终应该意识到,有时需要一些额外的帮助才能使新程序员了解布尔逻辑等。我想做的就是帮助他理解它。
克里斯,2010年

53

我的问题:什么是正确的?

虽然TrueTrue

只要条件表达式的值为,就会运行while循环True

由于True始终计算为True,因此循环将无限期运行,直到循环returns或breaks中的某物为止。


4
这是python。没有括号的表达; P
Mike Axiak 2010年

嘿,好点。我不习惯在Python中思考。虽然我想如果您愿意的话,您可以在它周围放些东西……
Dagg Nabbit 2010年

10

我的问题:什么是正确的?

while语句()中的所有内容都将被评估为布尔值。这意味着它会转换为true或false。

在声明中考虑 while(6 > 5)

它首先计算表达式6 > 5,其是true如此是等于说while(true)

任何非FALSE,0,空字符串“”,null或undefined都可能被评估为true。

当我刚开始编程的时候,我曾经做过类似的事情if(foo == true),但我并没有意识到这与if(foo)

所以当你说它while(true)在说while(true == true)

因此,请回答您的问题:TRUE为True时。


10

虽然True是正确的-即始终如此。这是一个无限循环

请注意,此处的重要区别在于True,“用语言表示特定类型的常数”和“ true”是数学概念。


从技术上讲,您错了。该构造的意思是“虽然真不是假”。如果while(5)用C编写,没有适当的布尔值,则可以看到区别。不是意思while(5==1),是意思while(5!=0)
Blindy

2
我认为说“无限循环”更为合适;假设必须是循环将在某个点被中断或返回中断。真正的“无限”循环是程序员的错误;“无限循环”是设计导致的。
Dagg Nabbit 2010年

3
@Blindy:在具有自动强制转换的弱类型语言中,您可以说x'评估为'y ...不是5并不严格等于0,而是5大致等于True。
Dagg Nabbit

@Blindy,while(5)用C表示while5是真实的,而不是whiletrue0,这是完全不同的。 5永远是真的。通常,当语言具有关键字时true,其常量为true,但不是唯一的常量true。同样false,不一定是唯一的错误值。
克里斯·多德


3

True一直存在True,因此while True将永远循环。

所述while关键字接受一个表达,并循环而表达式为真。True是永远正确的表达。

作为一个可能澄清的示例,请考虑以下内容:

a = 1
result = a == 1

在这里,a == 1将返回True,因此把Trueresult。因此,

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

等效于:

while True:
  ...

前提是您不更改循环a内部的值while


1
True并非总是如此 True,例如True = False。;-)
贾森主义

1
@ jathanism-真理是真理,到最后才算清算。
dheerosaur

3

从形式上看,True是一个Python内置恒定布尔类型。

您可以对布尔类型使用布尔运算(例如在交互式python提示符下)并将数字转换为布尔类型:

>>> 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如何在内部存储布尔类型,您可以将布尔类型转换为整数,然后True会变成1,而False会变成0:

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

实际上,Pythonbool类型是Python类型的子类int

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

您问题中最重要的部分是“什么是while True?” 是“什么是真实的”,是一个重要的推论:什么是错误的?

首先,对于您正在学习的每种语言,都要学习该语言认为的“真实”和“虚假”。例如,Python认为真相Perl真相略有不同。其他语言的对/错概念略有不同知道您的语言对于不同的操作和流控制认为是对还是错,以免以后出现很多麻烦!

在找到所需的内容之前,有很多算法需要处理一些东西。因此,无限循环或无限循环。对于这些结构,每种语言都有自己的成语。以下是常见的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==1etc则很好。


0
while True:
    ...

表示无限循环。

while语句通常用于有限循环。但是使用常量'True'可以保证while语句的重复,而无需控制循环(例如,在迭代过程中设置一个布尔值),除非您想破坏它。

事实上

True == (1 == 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格式更具pythonic风格,因为您知道该代码break在该确切点中断了循环,而do_next = False在下次评估时可以做更多的工作do_next


-4

在出现相反的情况之前,任何东西都可以视为真。这就是二元性的工作方式。这是比较对立面的一种方式。黑色可​​以为True,直到白色为止为False。黑色也可以是False,直到白色时才是True。它不是状态,而是相反状态的比较。如果其中一个为True,则另一个为错误。True并不表示它正确或被接受。在这种状态下,对立始终为False。这是双重性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.