Проверьте, является ли конкретный символ строки числовым или буквенным (python)

#python #string #if-statement

#python #строка #if-оператор

Вопрос:

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

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

1. Похоже на задание для регулярных выражений

2. вы можете использовать try:except блок и преобразовать каждый символ в int . В качестве альтернативы import string , а затем используйте string.ascii_lowercase , например. Для SStackOverflow вы также должны попробовать решить проблему самостоятельно и объяснить, где ваш подход дает сбой, чтобы люди могли вам помочь, а не ожидать, что они сделают это за вас.

3. Попробуйте регулярные выражения

Ответ №1:

Здесь можно использовать регулярные выражения:

 postcode = "1A2B3"
if re.search(r'^d[A-Za-z]d[A-Za-z]d$', postcode):
    print("postal code is valid")
  

Приведенное выше регулярное выражение указывает на:

 ^             from the start of the postal code
    d        match a digit
    [A-Za-z]  match a letter
    d        match a digit
    [A-Za-z]  match a letter
    d        match a digit
$             end of the postal code
  

Ответ №2:

Вы можете разделить почтовый индекс на список символов и использовать isnumeric() и isalpha(), чтобы проверить тип для каждого символа в их конкретных местоположениях вашего строкового почтового индекса.

 postal_code = '1A2B3'


def split(word):
    return [char for char in word]

def postal_code_checker(postal_code):

    # check the length of the post_code
    if len(postal_code) != 5:
        return False
    
    #split the postal code  ['1', 'A', '2', 'B', '3']
    char_list = split(postal_code)
    
    #check the type for the specific position
    if char_list[1].isnumeric() or char_list[3].isnumeric():        
        return False

    if char_list[0].isalpha() or char_list[2].isalpha() or char_list[4].isalpha() :        
        return False
    
    #if all is OK return True
    return True


if postal_code_checker(postal_code):
    print('no error')
else:
    print('There was an error')