Как сделать так, чтобы программа зацикливалась до выполнения условий? - PullRequest
0 голосов
/ 13 апреля 2019

Я пытался сделать так, чтобы моя программа продолжала просить пользователя ввести определенное значение, а если пользователь этого не делает, он продолжает спрашивать, пока они этого не сделают.

Я пытался использовать «пока» вместо «если», но я знаю, что, возможно, что-то упустил где-то.

def terrain(surface):
    surface = raw_input("What surface will you be driving on? ")
    if surface == "ice":
                u = raw_input("what is the velocity of the car in meters per second? ")
                u = int(u)
                if u < 0:
                    u = raw_input("Velocity must be greater than 0")
                    return
                if u == 0:
                    u = raw_input("Velocty must be a number greater than zero")
                    return
                a = raw_input("How quickly is the vehicle decelerating? ")
                a = int(a)
                if a > 0:
                    print ("Deceleration cannot be a positive integer")
                    return
                else: 
                        s1 = u**2
                        s2 = 2*.08*9.8
                    s = s1/s2
                    print "This is how far the vehicle will travel on ice: "
                    print ("The vehicle will travel %i meters before coming to a complete stop" % (s))
terrain("ice")

1 Ответ

0 голосов
/ 13 апреля 2019

Проблема в том, что вы используете return после проверки условия, при котором функция возвращает None, для этого вам нужно использовать break вместо return с циклом while вместо if.Лучший способ проверки и получения данных - ниже

class ValidationError(Exception):
    pass

def validate_and_get_data_count(x):
    if int(x) < 0:
        raise ValidationError("Cannot be less than 0")
    return int(x)

def validate_and_get_data_name(x):
    if len(x) < 8:
        raise ValidationError("Length of name cannot be less than 8 chars")
    elif len(x) > 10:
        raise ValidationError("Length of name cannot be greater than 10 chars")
    return x

validators = {
    "count": validate_and_get_data_count,
    "name": validate_and_get_data_name
}

data = {}

params = [
    ("count","Please enter a count: "),
    ("name","Please enter a name: "),
]

for param in params:
    while True:
        x = input(param[1])
        try:
            data[param[0]] = validators[param[0]](x)
            break
        except ValidationError as e:
            print(e)

print(data)

. То, что делает приведенный выше код, - для каждого param в params списке он выполняет проверку цикла while для каждого условия проверки, определенного в его валидаторе, еслидопустимо, он прерывает цикл while и переходит к следующему param и повторяет тот же процесс снова

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...