发布
社区首页 >问答首页 >Python: except下的if语句

Python: except下的if语句
EN

Stack Overflow用户
提问于 2016-03-06 03:04:36
回答 4查看 34关注 0票数 1

我有一个空的列表n。n应该有10个来自用户的浮点值。如果用户输入e,代码应该会跳出循环。如果用户输入任何其他文本(不是数字),它应该显示"Not a number“,并继续从用户获取值。我尝试了以下代码。当我输入e作为输入时,代码不会跳出for循环,总是转到else块,并显示"Not a number“。我该如何纠正这个问题呢?

代码语言:javascript
代码运行次数:0
复制
n = []
for i in range(10):
    try:
        inp_val = float(input('Enter value (e to exit)'))
        n.append(inp_val)

    except ValueError:
        if inp_val == 'e'
            break
        else:
            print("not a number")
            continue
EN

回答 4

Stack Overflow用户

发布于 2016-03-06 03:09:10

代码语言:javascript
代码运行次数:0
复制
inp_val = float(input('Enter value (e to exit)'))

这是这样执行的:

代码语言:javascript
代码运行次数:0
复制
temp_val = input('Enter value (e to exit)')
temp_val = float(temp_val)
inp_val = temp_val

因此,由于您正在尝试转换ValueError,因此在引发'e'时,尚未分配inp_val。因此,当您在except块中检查inp_val的值时,并不是在比较输入的值。

为此,您需要单独存储输入的字符串:

代码语言:javascript
代码运行次数:0
复制
try:
    text_input = input('Enter value (e to exit)')
    inp_val = float(text_input)
    n.append(inp_val)
except ValueError:
    if text_input == 'e':
        break
    else:
        print("not a number")
        continue
票数 0
EN

Stack Overflow用户

发布于 2016-03-06 03:10:01

inp_val是用float值设置的,因此它永远不能为e。一种解决方法是将inp_val赋值给输入值,并在追加列表时将其转换为浮点数:

代码语言:javascript
代码运行次数:0
复制
n = []
for i in range(10):
    try:
        inp_val = input('Enter value (e to exit)')
        n.append(float(inp_val))

    except ValueError:
        if inp_val == 'e'
            break
        else:
            print("not a number")
            continue
票数 0
EN

Stack Overflow用户

发布于 2016-03-06 03:10:19

如果你想确保你得到10个数字,使用一个while loop,它会一直循环直到你在列表中得到10个数字,并且忘记让用户退出,在此之前,如果我有一个空的列表n,那么退出是没有意义的。n应该有10个来自用户的浮点值。

代码语言:javascript
代码运行次数:0
复制
n = []
while len(n) < 10:
    try:
        inp_val = float(input('Enter value'))
        n.append(inp_val)
    except ValueError:
        print("not a number")

len(n) < 10赋值为False时,你将在列表中存储10个浮点数,你不能使用range来做同样的事情,因为当迭代结束时,就没有回头路了。

要纠正你自己的代码,你只需要做几处修改,只有在你检查输入是否等于e之后才进行强制转换,如果它是break,或者试图将浮点数附加到列表中,else/continue在你自己的代码中也是多余的,你无法中断并到达打印,并且无论何时到达代码的最后一行,循环都将继续:

代码语言:javascript
代码运行次数:0
复制
n = []
for i in range(10):
    try:
        inp_val = (input('Enter value (e to exit)'))
        if inp_val == "e":
            break
        n.append(float(inp_val))
    except ValueError:
        print("not a number")

但同样,如果你想确保你得到10个数字,那么这个或任何使用range的逻辑都不会起作用,你需要while。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35818500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档