Python NameError

1
list1 = [a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]

for item in list1:
    print item

Не знаю, почему этот код вызывает эту ошибку:

NameError: "name 'a' is not defined"
Теги:
syntax

7 ответов

12
Лучший ответ

В дополнение к правильному использованию кавычек не повторяйте алфавит.

>>> import string
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> L = list(string.ascii_lowercase)
>>> print L
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', ...
>>> help(string)
  • 2
    Ну, строка является итеративной, так что можно сделать: для s в string.ascii_lowercase: print (s)
  • 0
    Спасибо за чаевые! :)
Показать ещё 1 комментарий
7

Вы должны поместить строки в (двойные) кавычки

list1 = ["a","b","c",...] 

должен работать

  • 0
    Ааа! : P Спасибо
  • 0
    Да, я думаю, мы все знаем, что мы болтаем ... иногда это слишком очевидно: D
Показать ещё 3 комментария
2

Строковый литерал должен быть заключен в кавычки:)

list1 = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
1

Каждый язык должен различать константы и имена/переменные. Самое сбивающее с толку - это когда вы должны различать строковые константы и идентификаторы/имена/переменные.

Оболочка (sh, bash, ksh, csh, cmd.com и т.д.) имеет тенденцию использовать константы; поэтому вы можете просто ввести константу и указать имя/переменную со специальным символом ($ для unix shells,% для cmd.com и т.д.), когда вы хотите его значение.

$ echo hello
hello
$ echo $PWD
/home/tzot
$ cd /tmp
$ cd $OLDPWD

Большинство других общих языков программирования имеют тенденцию использовать переменные гораздо больше, чем константы, так что это наоборот: вы просто вводите имя переменной, и вы (обычно) включаете строковые константы в кавычки ('', "", [ ] и т.д.):

# assumed: a_name= "the object it points to"

>>> print ("a constant")
a constant
>>> print (a_name)
the object it points to
1

Выбор и выбор лучших предыдущих сообщений - это то, как я буду делать это, так как строка может быть итерирована.

>>> import string
>>> for letter in string.ascii_lowercase:
...     print(letter)
... 
1

python интерпретирует членов в вашем списке как переменные, вы вставляете их в

'или "

0

Когда мне нужно составить список символов, если они еще не доступны в том, что определено в std lib, и если мне действительно нужен список, а не просто строка, я использую эту форму:

punc = list(r";:`~!@#$%^&*()_-+=[]{}\|,./<?>")
vowels = list("aeiou")  # or sometimes list("aeiouy")

Гораздо проще, чем все эти дополнительные кавычки и запятые, и яснее читателю, что я действительно имел в виду, что мне нужен список, а не просто строка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню