Проверка правильности форматирования входных данных в Python 3

#python

#python

Вопрос:

итак, мне было назначено назначение (очевидно) для проверки правильности форматирования введенных пользователем входных данных способом AA99AAA (где A — буква, а 9 — число от 0 до 9). Итак, для первого символа во входных данных это должна быть буква, иначе python вернет какую-то ошибку и так далее, вы поняли идею. Я понятия не имею, с чего начать, я попытался поискать вокруг и ничего не нашел — думаю, я просто не знаю, что именно я ищу. Любые указания были бы высоко оценены, спасибо!

Комментарии:

1. Вы можете использовать регулярное выражение. Проверка: docs.python.org/2/library/re.html . и 1, поскольку вы не запрашивали решение, а только начало

2. регулярное выражение может быть немного сложным, в качестве альтернативы вы можете выполнить итерацию по вашей строке и проверить, что значение ascii каждого символа находится в диапазоне значений ascii 0-9 и A (или любого другого символа, который вам нужен)

3. Я попробую использовать метод регулярных выражений, но если это окажется слишком сложным, как бы вы поступили с использованием ASCII? Просто используйте какой-то цикл и проверяйте его каждый раз?

4. ДА. Цикл над строкой и проверка внутри нее. Используйте ord(ch) для нахождения значения в формате ascii ch . Если предполагается, что строка имеет фиксированную длину, используйте len(string) для определения длины строки. Если вы хотите проверить, является ли первый символ строки A , используйте string[0] == A

Ответ №1:

Для этого вы могли бы разделить строку на 3 части (первая группа букв, цифры, а затем вторая группа букв). Затем вы можете использовать s.isalpha() и s.isnumeric() .

Например:

 while True:
    c=input('Password: ')
    if len(c)==7 and c[:2].isalpha() and c[2:4].isnumeric() and c[4:].isalpha():
        break
    else:
        print('Invalid input')
print('Valid input')
  

Комментарии:

1. Я не знал, что вы могли бы сделать:2 или 4: вот так. Он разобрался с моим форматированием, и теперь оно работает для меня. Спасибо!

2. [:2] и [4:] являются соединениями с обоими концами списка. Они полезны для экономии времени при написании кода.

Ответ №2:

Не могли бы вы предоставить дополнительную информацию относительно вопроса, соответствует ли приведенный вами пример формату, который вы пытаетесь сопоставить? AA99AAA , то есть 2-альфа, 2-числовой, 3-альфа?

Есть два подхода, которые приходят мне в голову, которые вы могли бы использовать здесь, один из них заключался бы в использовании регулярных выражений для сопоставления с чем-то вроде [w]{2}[d]{2}[w]{3} , в качестве альтернативы вы могли бы выполнять итерации по строке (напомним, что строки представляют собой массивы символов).

Для этого подхода вам пришлось бы сгенерировать подстроки, чтобы изолировать интересующие вас части. So..

 for c in user_input[0:2]:
    if c.isdigit:
        print('Invalid Input')
for c in user_input[3:5]:
...
...
  

Определенно есть более питоновские способы решения этой проблемы, но этой информации должно быть достаточно, чтобы помочь вам формализовать решение.

Комментарии:

1. Нехорошо отказываться от решения из-за кого-то, когда OP просто хочет получить преимущество и хочет научиться программированию. Изучение программирования на собственном опыте делает людей лучшими программистами 🙂

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

Ответ №3:

Я, наконец, сделал это! Примерно через час…

Итак, я использовал форматирование [] и .isdigit /.isalpha для проверки каждой части кода, как рекомендовано выше, однако я сделал это немного по-другому:

 while True:
regNo = input("Registration number:")
if len(regNo) != 7:
    print("Invalid Registration Number! Please try again")
elif regNo[:2].isdigit():
    print("Invalid Registration Number! Please try again!")
elif regNo[2:4].isalpha():
    print("Invalid Registration Number! Please try again!")
elif regNo[4:].isdigit():
    print("Invalid Registration Number! Please try again!")
else:
    break
  

Надеюсь, это поможет всем, кто столкнется с этой проблемой!