我是编码和学习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
到结束究竟发生了什么?我可以说,如果我把它拿出来,所有输入都会被打印出来,即使它不是数字。
但是,该代码究竟是如何防止非数字条目被打印出来的?
谢谢!
答案 0 :(得分:2)
它的工作原理是因为a=0
将a
设置为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)
(我现在正在练习各种功能。)感谢您帮助我了解我的目标!