Почему я получаю эту ошибку, несмотря на то, что набираю код так же, как книга? - PullRequest
0 голосов
/ 22 марта 2020

Я совершенно новичок в кодировании. Я изучаю основную c книгу для начинающих по python, и до сих пор у меня не было проблем.

Практический код в книге - сделать наш первый словарь похожим на

states = {
   'Alabama':  'AL',
   'Alaska':  'AK',
   'Arizona':  'AZ',
   'Arkansas':  'AR',
   'California':  'CA',
   'Colorado':  'CO',
   'Connecticut':  'CT',
 }

, а затем создать еще один подобный словарь с заглавными буквами.

Затем мы печатаем состояния , затем столицы, затем штаты + столицы.

Проблема в том, что я печатаю штаты,

for states, abbrev in states.items():
     print "%s is abbreviated %s" % (states, abbrev)

, и это дает мне то, что я хочу, но если я пытаюсь напечатать снова состояния в любом случае

for states, abbrev in states.items():
     print "%s is abbreviated %s" % (states, abbrev)

Я получаю следующую ошибку в моей PowerShell: AttributeError: у объекта 'str' нет атрибута 'items' .

Я набираю код точно так, как он есть в книге, и все еще получаю эту ошибку. Я не могу понять это, ища онлайн.

Итак, почему это происходит и как я могу это исправить?

1 Ответ

1 голос
/ 22 марта 2020
for states, abbrev in states.items():
     print "%s is abbreviated %s" % (states, abbrev)

Вы используете одно и то же имя (states) как для словаря, так и для ключа (for states ... states.items()).

После этого запуска l oop, states все еще ограничен до последнего ключа, который посещал l oop, и фактически вы теряете доступ к словарю states.

Используйте другое имя для словаря и переменной итерации, например:

for state, abbrev in states.items():
     print "%s is abbreviated %s" % (state, abbrev)

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

...