Python 3.x - 仅输入 returns 第一项

Python 3.x - Input only returns first item

我在一个小项目中遇到了一段代码问题,我似乎无法修复它。

在下面的代码中,我定义了 inputrace() 以便玩家输入一个大于 0 小于 13 的数字(有 12 个选择,每个由一个数字决定);它还会检查空行和字符串,并让程序声明存在错误,如果检测到它们,将再次要求用户输入。如果通过检查,则返回 RaceInp 并将其设置为 RaceChoice,这允许它下面的代码根据玩家的选择将 Race 分配给玩家。

#race check
def inputrace():
    print ("Input number")
    RaceInp = input()
    Check = RaceInp
    try:
        int(RaceInp)
    except ValueError:
        print("Numbers only!")
        inputrace()
    if not int(Check)>12 or int(Check)<1:
            return RaceInp
            print (RaceInp) #this is here so I can check the value returned
Race = "NA"
RaceChoice = inputrace()
print (RaceChoice)
#assign race
if RaceChoice == "1":
    Race = "Human"
#continues down to twelve

输入有效字符串(1-12 中的任意数字)时一切正常,但当我故意输入无效字符串时,一切都会崩溃。似乎 RaceInp 只保留第一个用户输入并且不会更改,即使在从错误中召回函数之后也是如此。这意味着如果我输入 "a," 程序会告诉我这是错误的并再次询问。但是,当我输入“1”试图更正它时,它会接受它但仍将 RaceInp 保持为 "a." 有什么办法解决这个问题吗?我不知道发生了什么。

非常感谢您的帮助,如果我在问题中有任何错误,我深表歉意!

问题似乎出在你将 inputrace 放在递归而不是循环中。这样的事情可能会更好:

def input_race():
    while True:
        print("Input a number between 1 and 12.")
        race_input = input()

        try:
            race_input = int(race_input)

            if race_input >= 1 and race_input <= 12:
                return race_input

        except ValueError:
            pass

        print ("'{input}' is not a number.".format(input=race_input))


race = "NA"
race_choice = input_race()

if race_choice == 1:
    race = "Human"

print(race)