#python #loops
#python #циклы
Вопрос:
Я пытался сделать так, чтобы моя программа продолжала просить пользователя ввести определенное значение, и если пользователь этого не делает, он продолжает спрашивать, пока они не сделают.
Я пытался использовать «while» вместо «if», но я знаю, что, вероятно, где-то что-то упускаю.
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. Вам нужно использовать
while True
then break, когда пользователь вводит соответствующий ввод. Что ты пропустил?2. Я бы предложил создать какую-нибудь функцию проверки, а затем сделать что-то вроде
a = input(); while not validate(a): a = input()
Ответ №1:
Проблема в том, что вы используете 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
списка in он запускает цикл while, проверяя каждое условие проверки, определенное в его валидаторе, если оно действительно, оно прерывает цикл while и переходит к следующему param
и повторяет тот же процесс снова