我试图区分不同的循环写作方式。
我正在为扑克游戏专门写这篇文章,我区分不同的手型。在编写is_pair
函数时,我首先说pair = False
。我发现继续循环的唯一方法就是我说while pair == False: ...
。对于我的is_flush
函数,我可以设置flush = True
并且while
循环在while flush
上运行,继续循环直到flush
不再为真。
我尝试了while not pair:
但是没有用。我希望它在pair
为False
时继续,因此当找到一对时,它将返回True
。
我认为flush
的陈述看起来更清晰,我想知道是否有另一种方法可以将这种风格融入我的配对功能中。
答案 0 :(得分:4)
由于您的while not pair:
循环不起作用,您发现了一个重要区别:pair == False
仅在pair
设置为0
或False
时才会测试为真(唯一的两个值测试等于False
),而while not pair
测试any truth value(反转该值)。
您似乎已为pair
分配了一些其他值,这两个值都不是导致行为发生变化的两个值(一个truthy值提前爆发,或者一个falsey值为保持循环比预期更长。)
差异是Python style guide建议您始终使用if true_expression
或if not false_expression
而非使用== True
的原因之一或== False
:
请勿使用
True
将布尔值与False
或==
进行比较。是的:
if greeting:
不:if greeting == True:
更糟糕的是:if greeting is True:
最后但并非最不重要的是,对于仅针对单个布尔标记(while ...:
或while flag:
)进行测试的while not pair:
循环,请考虑使用while True:
和{{1}而是。所以而不是:
break
改为:
flag = True
while flag:
# ...
if condition:
flag = False
答案 1 :(得分:0)
除了实际上几乎没有差别之外,
在 == 比较中使用 False 允许使用0和1.
0 == False
1 == True
使用不是当前值的反转。
not 0 == True
not 1 == False
not False == True
您可以在程序中使用假设对只能包含布尔值:
while not pair:
如果您仍然想要使用可以包含布尔值和数字的变量,则可以使用:
while pair is False: