【问题标题】:Using the "Break" Control Flow in Python 3在 Python 3 中使用“中断”控制流
【发布时间】:2015-02-18 21:20:38
【问题描述】:

第一次来。在此先感谢您的帮助。我成功满足了以下问题的要求。但是,我正在尝试学习使用“break”语句来优雅地终止循环,而不是让程序崩溃。

虽然听起来很简单,但在使用“break”语句时,我收到了一个错误。

也许是因为“eval”提到了,它是用来输入数值的,而不是像“QUIT”这样的字符串来打破循环?

"编写一个交互式 Python 计算器程序。该程序应允许用户键入数学表达式,然后打印表达式的值。包括一个循环,以便用户可以执行许多计算。注意:要提前退出,用户可以通过键入错误的表达式或简单地关闭运行计算器程序的程序窗口来使程序崩溃。您将在后面的章节中学习终止交互式程序的更好方法。

def main():
    print("This program allows you to get the result of a math expression!")
    while True:
        expr = eval(input("Enter a mathematical expression: "))
        print ("The result of the math expression is {}".format(expr))
        if expr == "QUIT":
            break
main()

想法?

更新

正如下面的 Scott Hunter 所建议的,我对代码进行了以下更改,并且它运行良好。 “eval”语句无法识别字符串“QUIT”,因为“eval”用于评估数值。谢谢斯科特。

这是更新后的代码:

def main():
    print("This program allows you to get the result of a math expression!")
    while True:
        expr =(input("Enter a mathematical expression: "))
        if expr == "QUIT":
            break
        else:
            expr = eval(expr)
        print ("The result of the math expression is {}".format(expr))
main()

【问题讨论】:

  • 我希望eval('QUIT') 给你一个NameError - 你能提供完整的回溯吗?
  • 函数体需要缩进。
  • 如果您要在其中输入 '"QUIT"' ——也就是说,在输入行上,输入双引号 Q U I T 双引号——我希望这个版本可以工作。问题是它试图将字符串 'QUIT' 视为 Python,这是行不通的。
  • 你可以使用quit()。这应该可以完成工作

标签: python controls break flow


【解决方案1】:

你应该等待使用eval,直到你知道用户还没有输入QUIT;像这样:

while True:
    expr = input(...)
    if expire == "QUIT":
        break
    expr = eval(expr)
    print( ... )

【讨论】:

  • 谢谢斯科特。正如我所想,问题是由过早使用“eval”引发的,对吗?
  • 听起来你已经自己想通了(应该是这样)。
  • 感谢 Scott 的提醒,非常感谢。
【解决方案2】:

break 控件不会结束程序,而是“突破”您所处的任何代码级别:

i = 1
while True:
    i += 1
    if i > 10:
        break
print('Hello!')

上面代码中的break 将结束while 循环的执行。它不会结束整个程序,因此您仍然会在控制台中看到'Hello'。如果您想完全结束一个过程,请使用return。如果您尝试退出整个脚本,可以导入sys 并使用sys.exit()

【讨论】:

  • 感谢 payhima。这就是我的意思——找到一种方法来跳出循环并继续阅读下面的其余代码。感谢您的提醒和帮助!
猜你喜欢
  • 1970-01-01
  • 2011-05-01
  • 2013-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多