-7

Когда я пытаюсь выполнить этот код, у меня вылезает ошибка

"can't assign to literal"

 1 = 'Нет - ****** ответ!'

Вот. Может, не знаю, надо переменную ставить не как число? но это вряд ли, потому что Питон выделяет красным именно пустое пространство от символа "'" и до конца того, что я вижу справа. Что за фигня, спрашивается?

Abs3akt
  • 845

3 Answers3

6

Имена в Питоне не могут на цифры начинаться, поэтому 1 здесь интерпретируется как число (константа):

$ python -mtokenize <<<'1 = ".."' 
1,0-1,1:            NUMBER         '1'            
1,2-1,3:            OP             '='            
1,4-1,8:            STRING         '".."'         
1,8-1,9:            NEWLINE        '\n'           
2,0-2,0:            ENDMARKER      ''             

Поменять, что 1 означает в исходном коде таким способом нельзя. Поэтому SyntaxError возникает. На старых версиях Питона, можно было изменить к каким объектам True, False имена прикреплены (в современных версиях это ключевые слова. Всегда: True == 1 и False == 0). В образовательных целях, можно попробовать поменять объект int, соответствующий константе, или даже сам код трансформировать.

Оператор присваивания достаточно интересный в Питоне. Попробуйте представить как [] = [] работает (или в качестве бонуса: (a, b) = a[b] = {}, 5). Экспериментировать с казалось бы бессмысленными конструкциями полезно, чтобы границы понимания, реализаций обнаружить (буквально подобный код не стоит использовать).

jfs
  • 52,361
2

Это можно сделать так:

>>> globals()[1] = 'Нет - ****** ответ!'
>>> print(globals()[1])
Нет - ****** ответ!

Или так:

>>> locals()[1] = 'Нет - ****** ответ!'
>>> print(locals()[1])
Нет - ****** ответ!

Но не очень понятно, зачем.

  • Ой, вопрос протухший, оказывается. Ну ничего, пусть будет. –  Dec 03 '17 at 21:07
  • на вопрос можно хоть через 10 лет ответить. Основная аудитория Stack Overflow (~95%) это посетители из гугла. Нельзя публиковать ответы, только на закрытые вопросы (вопросы, неподходящие для SO). Я получаю плюсы на ответы, которые ещё в 2008 дал. – jfs Dec 06 '17 at 12:11
1

Вы пытаетесь числу задать какое то значение но это в априоре невозможно! невозможно сохранити какуюто информацию в число, для этого создаются переменные в которых хранится путь к памяти в которой хранится это значение.

Вы должны число 1 сделать переменной!

Abs3akt
  • 845