我试图控制输入以仅允许大于 0 的数字,但在测试此文本块时,如果我先输入非法字符(字符串、0 或负数),则接收错误输出,然后输入有效值,它返回我输入的第一个值,而不是刚刚输入的有效值(这会导致我的脚本的其余部分由于类型不匹配或不合逻辑的值而失败)。我试过移动“return x”,但它无论哪种方式都做同样的事情。在第二种情况下说“分配前引用的变量 x”。
def getPrice():
try:
x = float(input("What is the before-tax price of the item?\n"))
if x <= 0:
print("Price cannot be less than or equal to zero.")
getPrice()
return x
except ValueError:
print("Price must be numeric.")
getPrice()
和
def getPrice():
try:
x = float(input("What is the before-tax price of the item?\n"))
if x <= 0:
print("Price cannot be less than or equal to zero.")
getPrice()
except ValueError:
print("Price must be numeric.")
getPrice()
return x
我怎样才能解决这个问题?
另外,如果您好奇,这是为了学校作业,我自己完成了整个程序,但我不知道如何调试它。
编辑:
我现在有一个工作方法:
def getPrice():
while True:
try:
x = float(input("What is the before-tax price of the item?\n"))
except ValueError:
print("Price must be numeric.")
continue
if x <= 0:
print("Price cannot be less than or equal to zero.")
else:
return x
break
并修复了原始代码块(但它仍然使用递归):
def getPrice():
try:
x = float(input("What is the before-tax price of the item?\n"))
if x <= 0:
print("Price cannot be less than or equal to zero.")
x = getPrice()
except ValueError:
print("Price must be numeric.")
x = getPrice()
return x