30. Почтовые индексы.

(открыть в новой вкладке)

Условие:

Первый, третий и пятый символы в канадском почтовом индексе представляют собой буквы, а второй, четвертый и шестой – цифры. Провинцию или территорию, которой принадлежит индекс, можно определить по первому символу индекса, как показано в словаре:
post_index = {
"A": "Ньюфаундленд",
"B": "Новая Шотландия",
"C": "Остров Принца Эдуарда",
"E": "Нью-Брансуик",
"G": "Квебек",
"H": "Квебек",
"J": "Квебек",
"K": "Онтарио",
"L": "Онтарио",
"M": "Онтарио",
"N": "Онтарио",
"P": "Онтарио",
"R": "Манитоба",
"S": "Саскачеван",
"T": "Альберта",
"V": "Британская Колумбия",
"X": "Нунавут или Северо-Западные территории",
"Y": "Юкон"
}
Символы D, F, I,O, Q, U, W и Z в настоящее время не используются в почтовых индексах Канады.
Второй символ в почтовом индексе определяет, расположен ли интересующий нас адрес в городе или в сельской местности. Если на этом месте стоит ноль, значит, это сельская местность, иначе город.
Напишите программу, которая будет запрашивать почтовый индекс у пользователя и отображать провинцию или территорию, которой он принадлежит, с указанием того, городская это территория или сельская. Например, если пользователь введет индекс T2N1N4, программа должна определить, что речь идет о городе на территории провинции Альберта. А индекс X0A1B2 соответствует сельской местности в провинции Нунавут или в Северо-Западных территориях. Используйте словарь для хранения информации о соответствии первого символа индекса конкретной провинции или территории. Выведите на экран соответствующее сообщение.

Код:

# ввод данных
post_index = {
    "A": "Ньюфаундленд",
    "B": "Новая Шотландия",
    "C": "Остров Принца Эдуарда",
    "E": "Нью-Брансуик",
    "G": "Квебек",
    "H": "Квебек",
    "J": "Квебек",
    "K": "Онтарио",
    "L": "Онтарио",
    "M": "Онтарио",
    "N": "Онтарио",
    "P": "Онтарио",
    "R": "Манитоба",
    "S": "Саскачеван",
    "T": "Альберта",
    "V": "Британская Колумбия",
    "X": "Нунавут или Северо-Западные территории",                                                  # здесь ключу соответствуют две территории (не может быть два одинаковых ключа)
    "Y": "Юкон"
}
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
digits = "0123456789"

print()
while True:
    index = input("%100s" % "Введите индекс Канады (6 символов): ")
    index = index.upper()    
    if len(index) != 6:
        print("%99s" % "Индекс не той длины.")
    elif index[0] not in alphabet and index[2] not in alphabet and index[4] not in alphabet:
        print("%99s" % "Первый, третий или пятый символ не буква.")
    elif index[1] not in digits and index[3] not in digits and index[5] not in digits:
        print("%99s" % "Второй, четвёртый или шестой символ не цифра.")  
    elif index[0] not in post_index:                                                                # внимательно, есть буквы, кот. не соответствуют ни одной провинции
        print("%99s" % "Первый символ не соответствует ни одной провинции.")
    elif index[1].isdigit() == False:
        print("%99s" % "Второй символ не соответствует ни одной территории в провинции.")
    elif index[1] == "0":
        print("%99s" % f"Это провинция: {post_index[index[0]]}. Сельская местность.")
        break
    elif index[1] in "123456789":
        print("%99s" % f"Это провинция: {post_index[index[0]]}. Городская территория.")
        break