def p_parameter(p):
     if p < 10 or p > 100:
        int(input("Please try again: "))
        newp = p
        return newp
    else:
        newp <10 or newp >100
        input("Good bye")
        bye()
def main():
        speed(0)
        R=100
        r=4
        p=int(input("Please enter a number between 10 and 100: "))
        p_parameter(p)
        t_iter(R,r,p)
        Xcord(R,r,p,t_iter(R,r,p))
        Ycord(R,r,p,t_iter(R,r,p))
        input("Hit enter to close porgram")
        bye()
main()这是我绘制螺旋图的程序的代码。程序运行良好,但我在这里发布的是我试图让用户为p输入一个介于10-100之间的值。
我想做的是检查p是< 10还是p > 100。如果是的话,那么给用户一个机会重新输入一个新的p值,并使用该值,只要它符合允许的限制。在第二次检查之后,如果用户仍然输入了不正确的p值,我希望程序关闭。
问题是,它检查'p',然后再次请求p,但它只接受'p‘的第一个值,而不预先形成第二个检查,也不给p新的值。
发布于 2014-09-11 18:25:51
您可能应该在函数中提示。这是写这类验证的标准成语:
def validate():
    while True:
        # begin inf. loop
        p = input("some prompt goes here")
        if some_validation:
            break
            # end inf. loop
        # therefore if the validation fails, it reprompts
    # once you're out of the inf. loop...
    return p这是你可以为之建造一个相当好的装饰师的东西之一。
def validate(validation, not_valid_warning=None):
    if not hasattr(validation, '__call__'):
        raise TypeError("validation must be callable")
    def wrapper(f):
        def wrapped(*args):
            while True:
                p = f(*args)
                if validation(p):
                    break
                if not_valid_warning:
                    print(not_valid_warning)
            return p
        return wrapped
    return wrapper
@validate(lambda x: x < 10 or x > 100)
def v_input(*args):
    return __builtins__.input(*args)
# Example..........
if __name__ == "__main__":
    v_input("Enter a number less than 10 or more than 100: ")发布于 2014-09-11 18:26:21
问题与您的解决方案&更正:
它只使用
p的第一个值,而不给p新的值。
p,但不要将这个新值分配给newp变量,如下所示:
newp =int(输入(“请重试:”)不预置第二次检查。
else语句正在检查newp变量范围之外的newp上的条件,该变量位于if语句中。您应该将对newp变量的检查封装在if语句中,如下所示:
p_parameter(p):如果p <10或p >100: newp =int(输入(“请重试:”),如果newp < 10或newp > 100:return语句的实例,在p_parameter()函数中没有if语句。所以应该是这样的:
def p_parameter(p):如果p <10或p >100: newp =int(输入(“请重试:”),如果newp < 10或newp > 100:打印(“再见”)拜拜(),否则:返回newp #需要返回语句像这样:返回p#需要这样的返回语句为您的问题提供了解决方案,
我要做的是检查'p‘>是< 10还是'p’> 100,然后给用户一个机会重新输入一个新的'p‘值,并使用这个值,只要它符合允许的参数。
while True:语句的break无限循环退出。try、except和else块与ValueError一起使用1. to catch any errors due to inputs that are not integers.
2. to detect any inputs that are out of the allowed range.
在第二次检查之后,如果用户仍然输入了一个不正确的值'p‘,我希望程序关闭。
为了关闭程序,您可以:
ctrl+c (我的个人喜好),或者while循环来检查新输入,然后如果使用sys.exit(0)达到了限制,则强制程序退出(注意:首先您需要import sys才能使用它;我认为您的bye()就是这样做的)。把所有东西放在一起:
main()函数中,删除input()语句,只调用p_parameter()函数,如下所示:P= p_parameter()p_parameter()函数如下:
导入sys def p_parameter():exit_counter =1#计数器,在2次尝试后退出,而True: try: P= int(输入(“请输入10到100之间的数字"),除了ValueError: print(”不是数字,(重试“)其他:如果10 2 ):打印(“再见”) sys.exit(0) #拜()返回phttps://stackoverflow.com/questions/25794490
复制相似问题