address_string.split()
Это означает: создать новый список со словами из address_string
, а затем игнорировать его . address_string
равно без изменений . Вам нужно дать результат этого .split()
называть его собственным именем. Точно так же, как если вы напишете 3 + 4
, значение 3
не изменится, и полученное 7
будет полезно, только если вы сделаете с ним что-то .
for house_number, street_name in enumerate(address_string):
Это означает: каждый раз, проходя через l oop, house_number
становится числом , начиная с нуля и считая вверх , а street_name
становится следующей буквой в address_string
(потому что мы все еще работаем с исходной строкой).
if address_string[0].isnumeric():
house_number = address_string
Это означает: каждый раз через l oop, house_number
будет заменяться на целиком address_string
, если первый символ в address_string
- это число c. address_string
никогда не меняется, поэтому это сравнение всегда дает один и тот же результат. Строка типа "123 Main Street"
начинается с "1"
, что является числовым значением c, поэтому house_number
становится всей строкой "123 Main Street"
.
Каждый раз через l oop, house_number
заменяется условием for
l oop, а затем снова в этом if
. В общем, вы не хотите присваивать переменные l oop; это не очень полезно, так как они будут повторно назначаться l oop.
elif address_string.isalpha():
street_name = address_string
Так как условие if
выполняется, этот elif
никогда не тестируется.
Чтобы решить проблему, нужно ясно мыслить. Что вы хотите повторить? Какое хорошее имя использовать для этих вещей? Какое правило говорит вам, следует ли использовать эту вещь для house_number
? Какое правило говорит вам, следует ли использовать эту штуку для address_string
? Затем убедитесь, что используемые вами тесты имеют смысл - вы проверяете значение, которое действительно хотите использовать? Вы назначаете его в нужном месте?