检查python中的用户输入是否为int,为什么此代码有效?

时间:2017-05-18 15:37:42

标签: python python-2.7

我是编码和学习python的新手......我试图检查输入是否是数字。我在3年前的非活动帐户中找到了一个很好的答案,如下所示:

a=(raw_input("Amount:"))

try:
    int(a)
except ValueError:
    try:
        float(a)
    except ValueError:
        print "This is not a number"
        a=0
if a==0:
    a=0
else:
    print a
    #Do stuff

https://stackoverflow.com/a/26451234/8032074

我的问题是,从if a==0到结束究竟发生了什么?我可以说,如果我把它拿出来,所有输入都会被打印出来,即使它不是数字。

但是,该代码究竟是如何防止非数字条目被打印出来的?

谢谢!

4 个答案:

答案 0 :(得分:2)

它的工作原理是因为a=0a设置为0,如果它既不是float也不是int。之后,它检查a == 0 a是否等于0,如果不是else,它将打印输入。使用try...except...else语法的更好版本:

a=raw_input("Amount:")

try:
    float(a)
except ValueError:
    print "This is not a number"
else:
    print a
    #Do stuff

这是一个有趣的版本:)

import re
a = raw_input("Amount:")
if re.match("-?\d*[\.|\d]\d*", a):
    print a
else:
    print "This is not a number"

答案 1 :(得分:1)

最后if语句的要点是确保如果输入不是数字则不打印任何内容。

如果输入不是数字,try/except会确保输入设置为0。然后,如果输入为0(如果输入最初不是数字),则不会打印出来。

但是,如果输入的值实际为0,我建议将代码更改为以下内容:

a=(raw_input("Amount:"))

try:
    int(a)
except ValueError:
    try:
        float(a)
    except ValueError:
        print "This is not a number"
        a=None

if a is not None:
    print a

答案 2 :(得分:0)

'=='运算符测试变量指向的对象是否相同。在这种情况下,'0'是常数。如果你稍微重写它会更有意义:

a=(raw_input("Amount:"))

not_a_number = 0;

try:
    int(a)
except ValueError:
    try:
        float(a)
    except ValueError:
        print "This is not a number"
        a=not_a_number
if a==not_a_number:
    a=0
else:
    print a
    #Do stuff

答案 3 :(得分:0)

如果有人想知道,我最终会综合我所学到的并做到了这一点:

answer = (raw_input("gimme a number: "))

def is_numeric(number):
    try:
        int(number)
        return True
    except ValueError:
        try:
            float(number)
            return True
        except ValueError:
            print "that ain't a number"
            return False


def reply(number):
    if is_numeric(number):
        print "%s is a good number" % number

reply(answer)

(我现在正在练习各种功能。)感谢您帮助我了解我的目标!