我想检查输入是否为数字(浮点数为0,一位或两位小数)且大于0
def getnumber():
print ( "write a number: \n")
isValid = False
while not isValid:
try:
number = float(raw_input().replace(",","."))
if number >= 0:
isValid=True
else:
print ("Number not valid")
isValid = False
getnumber()
except:
print ("Number not valid")
return number
我有以下问题:
1-我不知道如何检查是否只有两位小数
2-如果我首先引入负数
,代码不会返回数字有谁知道如何修复它?
非常感谢
答案 0 :(得分:1)
您的代码不使用负数的原因是因为函数在数字为负数时递归调用自身,但在该调用之后isValid
的值始终为false,因此循环重复。 / p>
实际上不需要布尔变量。
这会让你遇到检测两个小数位的问题。为了能够在字符串级别执行此操作,您必须保留转换为浮点数的字符串。假设您将其存储为s
,您可以使用len(s) > 3
和s [-3] =='。'`之类的测试来验证它。
这会给你一个解决方案:
def getnumber():
while True:
try:
s = raw_input("Write a number:").replace(",",".")
number = float(s)
if number >= 0 and len(s) > 3 and s[-3] ==".":
return number
else:
print("Negative or not two decimal places")
except Exception:
print("Invalid number")
print(getnumber())