def main():
prompt = input('How many players? ')
if prompt.isdigit():
num_players = int(prompt)
else:
print('Invalid input!')
main()
print(num_players)
main()
如果我从第一次输入一个有效的整数,一切都能正常工作,但如果我先输入一个字符串,'else'就会执行,然后我又得到提示,但是,当我实际输入一个整数时,我得到UnboundLocalError。感谢任何帮助
问题在于这个函数是递归的。当你第二次正确地输入一个整数时,函数的最内层实例 main
的外部实例,返回到 main
刚过 else
块。接下来它要做的事情是 print(num_players)
在内部实例中工作正常,但在外部实例中却没有绑定。
试着将打印移动到内层的 if
注意,这并不是真正的递归问题,如果你去掉对 main
. 递归只是意味着你不会看到错误,直到你最终输入一个整数。
你根本不应该用递归来做这个。
def main():
while True:
prompt = input('How many players? ')
if prompt.isdigit():
break
print('Invalid input!')
print(num_players)
没有理由使用 isdigit
和 int
;你从来没有使用过 int
值,因为它立即变成了一个 str
再由 print
.
但是,您可以使用 int
而是 的 isdigit
(特别是如果计划使用 int
值,而不是 只是 打印它。
def main():
while True:
prompt = input('How many players? ')
try:
num_players = int(prompt)
break
except ValueError:
pass
print(num_players)