Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用'continue'作为中断语句_Python_Structure_Break_Readability_Continue - Fatal编程技术网

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
来尽早结束循环。我相信它能更好地传达意图,简化整体结构。