0より大きい数字のみを許可するように入力を制御しようとしていますが、このテキストブロックをテストするときに、最初に不正な文字(文字列、0または負の数)を入力すると、エラー出力を受け取り、有効な値を入力します、入力したばかりの有効な値ではなく、最初に入力した値を返します(これにより、型の不一致または非論理的な値が原因で、スクリプトの残りの部分が失敗します)。「returnx」を動かしてみましたが、どちらの方法でも同じことをします。2番目のケースでは、「割り当て前に参照される変数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