2014-12-27 4 views
-5

Я хочу сделать следующее в Python:Изменение имени переменной в Python

for i in range (1,2): 
    string = 2 
    string="string"+str(i) 
print string1 
print string2 

Я ожидаю, что выходной string1 = 2 и string2 = 2, но получаю следующее сообщение об ошибке.

NameError: name 'string1' is not defined. 

Я хочу, чтобы сохранить значение строки в новой переменной, как string1 и string2, как определено выше, но я получаю вышеуказанную ошибку. Любая помощь будет оценена по достоинству.

+0

Никакие динамические имена не поддерживаются Python. Думаю, вам нужен массив здесь? – SMA

+0

Назначение строки '' string1 "' переменной с именем 'string'.Это все, что происходит здесь. Обратите внимание, что 'range (1,2)' также просто '[1]'. Вы составляете конструкции на языке, который не существует, и спрашиваете, почему он не работает. –

+1

Можете ли вы объяснить на английском языке, почему вы пытаетесь это сделать? Вероятно, вам лучше использовать массив или словарь для хранения ваших строк, а не динамически названных переменных. –

ответ

1

Здесь есть логическая ошибка. Прежде всего, не используйте динамические имена как переменные, они зарезервированы Python (например, строка, печать)

Также вы пытаетесь напечатать string1 и string2, нет такой переменной, как они. У вас есть переменная в для петля под названием строка, равная . После того, как вы переопределите его до string + str (i) thats it. Вы можете распечатать только строка переменная. Потому что здесь больше нет переменной.

string=2 
string=string+"1" 

Это не значит, string1 это означает, что переменная называется строка и его равным строке + "1".

Также для г в диапазоне (1,2) будет только . 2 не входит. Если вы хотите , вы должны написать его (1,3).

0

Во-первых. Когда вы делаете print string1, python пытается найти переменную string1, но вы не указали эту переменную раньше. Для определения переменной в Python вам нужно написать что-то вроде этого:

string1 = <some value or expression> 

Также есть еще способы определения переменных, но они находятся за пределами нашей проблемы.

Во-вторых. Когда вы определяете переменную внутри цикла, переменная доступна внутри этого цикла (локальная переменная) и будет уничтожена после выполнения цикла. Поэтому, если вы создаете переменную внутри своего цикла for, вы не можете вызывать переменную вне цикла.

Тем не менее. Для того, чтобы ваша идея действительно, вы могли бы использовать EXEC-заявление:

i = 1 
exec "string" + str(i) + " = " + str(i) 

i = 2 
exec "string" + str(i) + " = " + str(i) 

print string1 
print string2 

Результат ехес-заявление будет понятно, интерпретатор Python как типичный питона линии и будет выполняться. Фактически, exec-statements опасны и могут быть источниками многих ошибок и уязвимостей. Я бы не рекомендовал вам слишком часто использовать это.

Смежные вопросы