Python和用户输入 - 值不重置

时间:2017-02-12 17:19:54

标签: python input user-input

我在使用Python 3.4中的用户输入时遇到了麻烦。在我的代码中的两个不同位置,我要求用户输入,然后检查它的有效性。如果用户第一次输入正确的值(在这种情况下,为0或1),这将完美地起作用。但是,如果用户输入的值不正确,导致函数循环回到开头,则原始输入仍然存在。

例如,如果用户键入" asdf," "您输入了无效的规则编号"警告显示,并再次提示用户键入规则。但是,如果用户然后键入有效数字,代码将再次循环,并且强制取消会给我以下错误:

  

文件"",第1行,在文件中   " /home/squigglily/gitstore/RCPSP-RAB/RCPSP.py" ;,第9行,主要       selected_rule = select_rule()File" /home/squigglily/gitstore/RCPSP-RAB/RCPSP.py" ;,第572行,in   select_rule       if int(selected_rule)> = 0和int(selected_rule)< = 1:ValueError:对于带有基数10的int()的无效文字:' asklawer'

给我带来麻烦的代码:

def select_rule():
    selected_rule = 0
    selected_rule = input("\nPlease type the number corresponding with the " 
    "prioritization rule you would like to use: "
    "\n    0 - No prioritization, ignore all resource constraints"
    "\n    1 - Lowest task number prioritization\n")

    try:
        int(selected_rule) + 1 - 1
    except:
        print("\nYou have entered an invalid rule number.  Please try again.\n")
        select_rule()

    if int(selected_rule) >= 0 and int(selected_rule) <= 1:
        selected_rule = int(selected_rule)
        return(selected_rule)
    else:
        print("\nYou have entered an invalid rule number.  Please try again.\n")
        select_rule()

2 个答案:

答案 0 :(得分:1)

由于您没有返回递归调用的结果,如:

return select_rule()
except

,在正确完成递归调用后,您的代码将进入初始if-else调用的select_rule()部分。那是在第二次投射初始调用的无效selected_rule字符串时。

如上所示,只返回递归结果即可。

答案 1 :(得分:0)

您缺少返回select_rule()函数

如果

,你也可以做一切
if type(selected_rule) == int and int(selected_rule) >= 0 and int(selected_rule) <= 1:
    selected_rule = int(selected_rule)
    return(selected_rule)
else:
    print("\nYou have entered an invalid rule number.  Please try again.\n")
    return select_rule()