我正在为猜测游戏编写一个Python程序,我正在实现主循环的当前方式有效,但感觉错误:
# Guess Loop
while not(guess(ans)):
pass
它会起作用,但我想知道这是不好的做法(我认为是)。
答案 0 :(得分:1)
在PEP-8,Python的事实上的编码标准中没有任何反对意见。这正是while循环的用途。
我认为你很担心,因为while循环是空的,但是在一个非平凡的程序中它不会,并且你有东西要放在那里。
答案 1 :(得分:0)
我更喜欢
while True:
if guess(ans):
break
但你的代码
while not(guess(ans)):
pass
功能完全相同。它甚至可能稍微高效一点!
from dis import dis
from random import choice
def foo(): return choice([True, False]) # flip a coin
# My code
def bar1():
while True:
if foo(): break
# Your code
def bar2():
while not(foo()):
pass
>>> dis(bar1)
2 0 SETUP_LOOP 12 (to 14)
3 >> 2 LOAD_GLOBAL 0 (foo)
4 CALL_FUNCTION 0
6 POP_JUMP_IF_FALSE 2
8 BREAK_LOOP
10 JUMP_ABSOLUTE 2
12 POP_BLOCK
>> 14 LOAD_CONST 0 (None)
16 RETURN_VALUE
>>> dis(bar2)
2 0 SETUP_LOOP 10 (to 12)
>> 2 LOAD_GLOBAL 0 (foo)
4 CALL_FUNCTION 0
6 POP_JUMP_IF_TRUE 10
3 8 JUMP_ABSOLUTE 2
>> 10 POP_BLOCK
>> 12 LOAD_CONST 0 (None)
14 RETURN_VALUE
您的代码段可以省略" BREAK_LOOP
"那里可能会提高性能。当然POP_JUMP_IF_TRUE
也可能比POP_JUMP_IF_FALSE
略强一些。反之亦然。
无论如何,它们的功能相同。使用你喜欢的任何一个。我更喜欢"永远循环的外观,如果guess(ans)
为真,那就打破"到"循环直到guess(ans)
的否定为假。"
答案 2 :(得分:-1)
有多种方法可以处理这个想法 - 循环的任何问题(特别是可能发生的一段时间(真)循环的错误)在这里都不会成立,但也许会出现在其他语言中,也许是什么让你停下来。