这是我的代码片段,但它没有按我想要的方式执行。如果输入是非负/字符值,则第一个if语句成功执行,但如果它是负值,则忽略elif语句。问题是什么。我正在使用Python 2.6
from math import sqrt
import cmath
y = raw_input("Enter your number:")
if y.isdigit():
x = int(sqrt(float(y)))
print "Answer is", x
elif y < 0:
print "Negative number", cmath.sqrt(y)
else:
print "Not a valid number"
raw_input("Press <enter> to Exit")
答案 0 :(得分:5)
s.isdigit()
字符串方法表示“字符串s
是一个或多个字符长,所有字符都是数字”,表示每个字符0123456789
之一。请注意该集合中其他字符(例如+
和-
)在信号中是如何缺失的; - )。
您的elif y < 0:
测试适用于字符串 y,因此无意义。如果你想检查一下用户输入的是一个数字,那么正确的方法与你所拥有的完全不同......:
try:
thenum = float(y)
except ValueError:
print "Not a valid number"
else:
if thenum >= 0:
x = int(sqrt(thenum))
print "Answer is", x
else:
print "Negative number", cmath.sqrt(thenum)
答案 1 :(得分:1)
您的elif
永远不会被评估if
y是一个数字
程序执行if范围内的语句,然后跳到最后一行(raw_input ...
)
答案 2 :(得分:0)
elif float(y) < 0:
print "Negative number", cmath.sqrt(float(y))
现在可以进行正确的比较,cmath.sqrt
将起作用,因为它需要浮动。
答案 3 :(得分:0)
为什么不呢:
from math import sqrt
from cmath import sqrt as neg_sqrt
y = raw_input("Enter your number:")
try:
number = float(y)
if number > 0:
print 'Answer is', sqrt(number)
else:
print 'Negative number:', neg_sqrt(number)
except ValueError:
print 'Not a valid number'