【问题标题】:Can't use break in a while-loop [duplicate]不能在while循环中使用break [重复]
【发布时间】:2021-04-15 08:27:01
【问题描述】:

我在让 break 在 while 循环中工作时遇到了一些麻烦。

我创建了一个函数main(),其中包含三个关于全局作用域的input(),这三个直接紧随其后。如果您在其中一个ìnput() 中输入了不正确的值,我希望程序立即结束,并尝试使用break 完成此操作,但没有成功。所以问题是为什么我不能在我的while循环中使用break?

我的全局范围内的允许值: Scenario 1 或 2 games 应该大于零 board_size 3、5 或 7

def main():
    
    while True:    
        board_size = int(input("How big playing surface (3/5/7)? "))
        
        if board_size != 3 or board_size != 5 or board_size != 7:
            break
        
    while True:
        games = int(input("How many games do you want to simulate? "))

        if games <1:
            break

    while True:
        scenario = int(input('What scenario (1/2)? '))

        if scenario != 1 or scenario != 2:
            break

    print_stats(games, scenario, board_size)

【问题讨论】:

  • if board_size != 3 or board_size != 5 or board_size != 7: 肯定会总是为真。由于电路板具有单一尺寸,因此它将无法具有这三种尺寸中的至少两种。使用if board_size not in [3,5,7]:
  • “如果您输入了错误的值,我希望程序立即结束” 但这不是 break 所做的。 break 只是结束当前循环,而不是整个程序。
  • 如果您希望程序结束,请使用exit()。如果要终止函数,请使用return;此外,“全球范围”并不意味着您认为它会做什么。作为初学者谈论编程时,通常使用简单的英语是个好主意,直​​到您对术语有很好的理解。
  • 您应该在条件表达式中使用and,而不是or!或者,您可以写,例如,if board_size not in [3,5,7]: break。无论如何,这只会停止相应的循环while,而不是函数。如果要停止函数的执行,请使用return 而不是break。
  • 谢谢@kaya3的澄清,那我之前对break的使用有误解。

标签: python


【解决方案1】:

你的代码总是会出错,因为board_size 永远不可能等于3, 5 or 7:

此外,程序不会在打破while True 循环后“结束”,有很多方法可以做到这一点,包括sys.exit()、raise SystemExit()、exit()... 我想你想要:

def main():
    
    while True:    
        board_size = int(input("How big playing surface (3/5/7)? "))
        
        if board_size not in [3, 5, 7]:
            raise SystemExit()
        
    while True:
        games = int(input("How many games do you want to simulate? "))

        if games <1:
            raise SystemExit()

    while True:
        scenario = int(input('What scenario (1/2)? '))

        if scenario not in [1, 2]:
            raise SystemExit()

    print_stats(games, scenario, board_size)

【讨论】:

  • 谢谢!所以我在输入if board_size != 3 or board_size != 5 or board_size != 7:etc 之后错误地使用了True?
【解决方案2】:

您可以使用not 逻辑来检查board_size 是否等于3、5 或7。您可以使用sys.exit() 退出程序,但请务必使用import sys。

import sys

def main():
    
    while True:    
        board_size = int(input("How big playing surface (3/5/7)? "))
        
        if not (board_size == 3 or board_size == 5 or board_size == 7):
            sys.exit()
        else:
            break
    while True:
        games = int(input("How many games do you want to simulate? "))

        if games <1:
            sys.exit()
        else:
            break

    while True:
        scenario = int(input('What scenario (1/2)? '))

        if not (scenario == 1 or scenario == 2):
            sys.exit()
        else:
            break

    print(games, scenario, board_size)

main()

【讨论】:

  • 谢谢!不幸的是exit() 对我不起作用,也许我需要导入一些东西才能使用它?我会阅读更多关于exit ()的信息。
猜你喜欢
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 2013-10-24
  • 1970-01-01
相关资源
最近更新 更多