我正在尝试控制输入以仅允许大于0的数字,但在测试此文本块时,如果我首先输入非法字符(字符串,0或负数),则接收错误输出然后输入一个有效的值,它返回我输入的第一个值而不是刚输入的有效值(由于类型不匹配或不合逻辑的值,这会导致我的其余脚本失败)。我试过移动“返回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
答案 0 :(得分:0)
我不会拼出答案,因为它是作业,但我会指出你正确的方向。首先,我建议使用while循环而不是递归。
代码可能类似于:
while True:
try:
x = <get input>
if input is good:
break
else:
<print error>
except badstuff:
<Print error>
next #redundant in this case as we'd do this anyways
其次,您现在遇到的问题与变量范围有关。当输入错误时,再次调用该函数,但不对输出执行任何操作。
请记住,第一个函数调用中的x与第二个函数调用中的x完全分开。
因此,如果您打算使用递归,则需要弄清楚如何传递x值“备份链”。