我遇到了一些我正在为学校作业做的编码问题,同样的事情发生了,我设法修复它,但我这样做却不知道我是怎么做的。
def number():
num = input("please enter the number of people that would like play:")
try:
if int(num) >= 2:
if int(num) <=7:
return num
else:
print("number must be 7 or less")
number()
else:
print("number must be greater than 2")
number()
except:
print("that is not a valid number. number must be between 2 and 7")
number()
number = number()
print(number,"people are playing")
这是导致问题的代码。如果我输入一个无效的号码,它可以正常工作,我可以重新输入一个新的号码,但你可以看到我想要打印出“玩的人数”,但它返回“没有人在玩”但这个仅在我输入无效号码后。我该怎么办?
答案 0 :(得分:4)
在理想情况下,没有任何错误,number()
会返回输入的num
,一切都很顺利。但是,在所有其他情况下,您通过递归调用number()
来结束该函数,而不实际返回任何内容。因此该函数隐式返回None
(即没有)。
只需将每次递归调用更改为return number()
即可。
顺便说一下。你应该为此避免递归;请参阅this answer,了解如何最好地向用户反复询问有效输入。
答案 1 :(得分:0)
你需要使用一个循环,而不是再次调用你的例程,这将不会产生你想要的效果(查看递归)。像下面的方法会更好:
def number():
while True:
num = input("please enter the number of people that would like play: ")
try:
num = int(num)
if num > 7:
print("number must be 7 or less")
elif num <= 2:
print("number must be greater than 2")
else:
return num
except:
print("that is not a valid number. number must be between 2 and 7")
number = number()
print(number, "people are playing")
您看到None
的原因是,如果不使用return
,就可以到达功能的底部。在这种情况下,Python将返回值默认为None
。