Предложите пользователю ввести что-то еще, если первый ввод недопустим - PullRequest
0 голосов
/ 08 марта 2012

Я очень новичок в Python, так что простите мой вопрос новичка.У меня есть следующий код:

[a while loop starts]

print 'Input the first data as 10 characters from a-f'

input1 = raw_input()
if not re.match("^[a-f]*$", input1):
    print "The only valid inputs are 10-character strings containing letters a-f"
    break
else:
[the rest of the script]

Если бы я хотел, вместо того, чтобы прерывать цикл и выходить из программы, отправлять пользователя обратно в исходное приглашение до тех пор, пока он не введет действительные данные, что бы я писал вместоперерыв?

Ответы [ 2 ]

6 голосов
/ 08 марта 2012

Чтобы перейти к следующей итерации цикла, вы можете использовать оператор continue .

Обычно я выделяю вход для специальной функции:

def get_input(prompt):
    while True:
        s = raw_input(prompt)
        if len(s) == 10 and set(s).issubset("abcdef"):
            return s
        print("The only valid inputs are 10-character "
              "strings containing letters a-f.")
0 голосов
/ 08 марта 2012
print "Input initial data.  Must be 10 characters, each being a-f."
input = raw_input()
while len(input) != 10 or not set(input).issubset('abcdef'):
    print("Must enter 10 characters, each being a-f."
    input = raw_input()

Небольшая альтернатива:

input = ''
while len(input) != 10 or not set(input).issubset('abcdef'):
    print("Input initial data.  Must enter 10 characters, each being a-f."
    input = raw_input()

Или, если вы хотите разбить его на функцию (эта функция излишня для этого использования, но целая функция для особого случая является неоптимальной imo):

def prompt_for_input(prompt, validate_input=None, reprompt_on_fail=False, max_reprompts=0):
    passed = False
    reprompt_count = 0
    while not (passed):
        print prompt
        input = raw_input()
        if reprompt_on_fail:
            if max_reprompts == 0 or max_reprompts <= reprompt_count:
                passed = validate_input(input)
            else:
                passed = True
        else:
            passed = True
        reprompt_count += 1
   return input

Этот метод позволяет вам определить ваш валидатор. Вы бы назвали это так:

def validator(input):
    return len(input) == 10 and set(input).subset('abcdef')

input_data = prompt_for_input('Please input initial data.  Must enter 10 characters, each being a-f.', validator, True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...