Python 使用'continue'作为中断语句
我知道很多人都在争论Python 使用'continue'作为中断语句,python,structure,break,readability,continue,Python,Structure,Break,Readability,Continue,我知道很多人都在争论中断与如果条件:退出==True在中,而和直到循环。我听到一个关于break的普遍观点是,它不冗长,而且可能导致糟糕的代码结构。虽然我在为CS110做一个项目,我需要制作一个菜单,它会循环运行,直到用户输入'Q',并将命令添加到列表中,直到输入'X',然后它会执行这些命令。如果命令以'X'开头,您可以执行其他操作,例如播放歌曲,但我不希望用户看到这一点。这是我用Python编写的代码 usrCommands = [] def menu(): global usrCo
中断
与如果条件:退出==True
在中,而和直到
循环。我听到一个关于break
的普遍观点是,它不冗长,而且可能导致糟糕的代码结构。虽然我在为CS110做一个项目,我需要制作一个菜单,它会循环运行,直到用户输入'Q'
,并将命令添加到列表中,直到输入'X'
,然后它会执行这些命令。如果命令以'X'
开头,您可以执行其他操作,例如播放歌曲,但我不希望用户看到这一点。这是我用Python编写的代码
usrCommands = []
def menu():
global usrCommands
# Take user input
quit = False
while not quit :
print("Please enter a command for the Finch :")
print("\tW - Move Forward")
print("\tS - Move Backward")
print("\tA - Turn Left")
print("\tD - Turn Right")
print("\tX - Execute Commands")
print("\tQ - Quit")
usrIn = input("> ").upper()
print()
# Parse for valid input
contains = False
for letter in 'WSADQ' :
if usrIn.find(letter) != -1:
contains = True
# execute if command is invalid unless the command starts with 'X'
if not( (contains and len(usrIn) == 1) or (usrIn.find('X') == 0) ):
displayInvalid()
continue
if usrIn == 'Q' :
quit = True
continue
if usrIn != 'X':
usrCommands.append(usrIn)
print(usrCommands)
我的问题在后面
if usrIn == 'Q' :
quit = True
continue
街区。在这里,我得到了与if
终止的语法相同的语法,而以正常的方式循环,但是我没有在末尾包含它,而是具有与使用break语句相同的效果。但是,在这里您可以很容易地看到quit
现在等于True
。由于缺少更好的词语,这是不是一种介于break
和标准方法之间的有效媒介?在其他项目中是否存在任何可预见的问题?这在语义上与break
的效果非常相似。您正在使用关键字提前中止循环。因此,出于同样的原因,您不会在那里使用break
,也不会使用continue
这就是说,您的结构会使事情变得复杂:首先,它引入了一个额外的循环条件变量,除了为中断提供解决方案之外,它没有其他职责。但这确实会使代码变得更复杂(例如,您不会立即看到quit
仅在发生continue
时才会更改)。第二,它需要重新评估循环条件,尽管您已经知道其结果。因此,如果我们要查看字节码,而不是跳转到循环的末尾(如break
),我们跳转到开始,重新检查条件,然后跳转到结尾
所以,为了让它更简单,我绝对会在那里使用break
。请注意,不使用break
的常见原因不是关键字本身,而是它从循环中引入了一个额外的出口(就像在函数的早期使用返回
一样);在那里使用continue
根本不会改变这一点。因此,要么使用break
,要么根本不中断循环。它在语义上等同于break
,同时添加更多的代码:我认为这更糟糕。对break
没问题的人更喜欢break
;不喜欢break
的人因为跳转而不喜欢它,而且continue
也会有同样的问题。然而,这是一个意见问题,很容易因此而被关闭。@Amadan,如果它真的关闭了,哦,好吧。这不是一个重要的问题,只是我对自己感到好奇,在这种情况下,break似乎是一个更明确的指示,因此是更符合逻辑的选择。我不认为有任何关于休息的困惑。这只会结束循环。但这只是我的观点。所以你会建议我使用而不是True:
并直接调用break吗?我知道这是一个非常固执己见的问题,但在这种情况下,break
会被认为是一个合适的用法吗?我不是一个只允许单个退出点的纯粹主义者,所以是的,我个人更喜欢简单的break
来尽早结束循环。我相信它能更好地传达意图,简化整体结构。