这段代码中的所有内容在我看来都是正确的,但是当我输入一些长度与 2 不同的数字或输入一个单词时,在代码末尾,“再见”下方会出现错误
我该如何解决?
提前致谢。
代码:
def main():
def inputnumber(message):
while True:
try:
inputnumber = int(input(message))
except ValueError:
print("No,no,no! Put a valid number!\n")
continue
if len(str(inputnumber)) < 2:
print("Hey! That\'s too short! Please, type a two digit number.\n")
return main()
elif len(str(inputnumber)) > 2:
print("Hey! That\'s too long! Please, type a two digit number.\n")
return main()
else:
return inputnumber
break
def yes_no(message):
userinput = str(input(message)).lower()
if userinput == "yes" :
return 1
elif userinput == "no" :
return 0
else:
return yes_no("Please, use 'yes' or 'no'.")
number = str(inputnumber("Type a two digit number: "))
total = int(number[0]) + int(number[1])
print(f"{total}\n")
answer = yes_no("Do you want to try again?\n")
if answer == 1:
print("Okay! Don\'t forget the rules!\n")
main()
elif answer == 0:
print("Good bye!")
main()
答案 0 :(得分:1)
问题是由 return main()
中的 inputnumber()
引起的。 main()
不返回任何内容,因此在这种情况下 inputnumber()
将返回 None
。然后将字符串 "None"
分配给 number
,然后尝试执行
total = int(number[0]) + int(number[1])
number[0]
是 N
,number[1]
是 o
,因此那些 int()
调用将失败,因为它们不是数字。
inputnumber()
不应在用户输入错误长度时调用 main()
。它应该只是让 while
循环重复。
def inputnumber(message):
while True:
try:
inputnumber = int(input(message))
except ValueError:
print("No,no,no! Put a valid number!\n")
continue
if len(str(inputnumber)) < 2:
print("Hey! That\'s too short! Please, type a two digit number.\n")
elif len(str(inputnumber)) > 2:
print("Hey! That\'s too long! Please, type a two digit number.\n")
else:
return inputnumber
此外,您可以使用 if inputnumber < 10:
和 if inputnumber > 99:
答案 1 :(得分:1)
您的 inputnumber
函数并不总是返回两位数(有时它返回 None
)。由于它已经在 while True
循环中运行所有内容,因此当用户输入错误的输入时,您应该使用此循环重新提示,而不是通过调用 main()
(它将返回 None
).
一般来说,当您的程序可能需要多次执行某些操作时,它应该始终如一地使用 while
循环。还有其他简化的机会——例如,如果调用者立即将其转换回 inputnumber
,那么让 int
将输入转换为 str
是没有意义的。< /p>
def main() -> None:
def inputnumber() -> str:
while True:
inputnumber = input("Type a two digit number: ")
if not inputnumber.isdigit():
print("No,no,no! Put a valid number!\n")
elif len(inputnumber) < 2:
print("Hey! That\'s too short! Please, type a two digit number.\n")
elif len(inputnumber) > 2:
print("Hey! That\'s too long! Please, type a two digit number.\n")
else:
return inputnumber
def yes_no(message: str) -> bool:
while True:
userinput = input(message).lower()
if userinput == "yes":
return True
elif userinput == "no":
return False
else:
print("Please, use 'yes' or 'no'.")
while True:
number = inputnumber()
total = int(number[0]) + int(number[1])
print(f"{total}\n")
if yes_no("Do you want to try again?\n"):
print("Okay! Don\'t forget the rules!\n")
else:
print("Good bye!")
return
main()