Я пытаюсь создать непрерывный пользовательский ввод, но не хочу, чтобы он перезапускался с самого начала, если введена неверная информация. Например,

a = 1
while a ==1:
    Number = raw_input("Number: ")
    if len(Number) != 3:
        print "\n Error, please enter 4 digits \n"
    else:    
        Day = raw_input("Day: ")
        if not Day.isdigit():
            print "\n Error, please enter day in digits \n"

Здесь, если человек вводит не 4-значную цифру для первого ввода, цикл завершится и снова вернется к началу. Однако, если он доберется до второго ввода и введет нецифровую строку, цикл также завершится и вернется к началу. Как мне заставить его не возвращаться к началу, а снова просить День?

0
TYL 22 Фев 2018 в 10:25

5 ответов

Лучший ответ

Вы можете упростить это с помощью функции:

def input_number(prompt, digits_num=0):
    while 1:
        s = raw_input(prompt)

        if not s.isdigit():
            print "\n Error, please input digits \n"
            continue

        if digits_num:
            if len(s) != digits_num:
                print "\n Error, please enter %d digits \n" % digits_num
                continue

        result = int(s)
        break

    return result


number = input_number("Number: ", 4)
day = input_number("Day: ")

print "\n number=%d, day=%d" % (number, day)
2
DDGG 22 Фев 2018 в 07:44

Повышение исключения до действительного ввода

a = 1
while a ==1:
    try:
        Number = input("Number: ")
        if len(Number) != 3:
            print("\n Error, please enter 4 digits \n")
            raise RuntimeError()
    except RuntimeError:
        continue
    break
-3
Rayadurai 22 Фев 2018 в 07:44

Для этого вам понадобятся два отдельных while цикла. Один для number, а другой для day. Вот исправленный код:

number = ""
day = ""

while True:
    number = raw_input("Number: ")
    if not number.isdigit() or len(number) != 4:
        print "Error, Please enter a 4 digit number \n"
    else:
        break


while True:
    day = raw_input("Day: ")
    if not day.isdigit():
        print "\n Error, please enter day in digits \n"
    else:
        break

print "Number: ", number
print "Day: ", day
1
Mushif Ali Nawaz 22 Фев 2018 в 07:51

Если вы можете использовать Python 3, используйте Enum в таких сценариях для кода производственного уровня. Вы всегда можете управлять условиями в соответствии с вашими потребностями. Вот так :

from enum import Enum

class Status(Enum):
    START = 1
    ‎MIDDLE = 2
    ‎END = 3

state = Status.START

while state != Status.END:
    while state == Status.START:
    ‎    Number = input("Number:")
    ‎    if len(Number) != 3:
    ‎        print("Invalid Number !")
    ‎    else:
    ‎        state = Status.MIDDLE

    while state == Status.MIDDLE:
    ‎    Day = input("Day:")
    ‎    if not Day.isdigit():
    ‎        print("Invaid Day !")
    ‎    else:
    ‎        state = Status.END 
    ‎
1
Shasha99 22 Фев 2018 в 08:16
def myMethod():
    a = 1
    while True:
        if a is 1 and len(raw_input("NUMBER: ")) is not 3:
            print "ERROR IS HERE IN NUMBER"
        else:
            a = 2
            if a is not 1 and raw_input("DAY: ").isdigit() is True:
                a = 1
            else:
                print "ERROR IS HERE IN DAY"
myMethod()

Вы можете использовать это для своих целей. главное, вам нужно сохранить ключ для проверки, есть ли ошибка в ДЕНЬ или НОМЕР.

Пожалуйста, дайте мне знать, если вам нужны другие разъяснения. это спросит вас ДЕНЬ: и НОМЕР: бесконечно

3
th3g3ntl3m3n 22 Фев 2018 в 07:49