Python создает переменную на основе другой переменной с использованием vars () [mystring] не работает, когда внутри функции

У меня следующее задание.

«Создайте 5 переменных с именем factorN, где N - это числа от 1 до 5, и установите их от 1 до 5 соответственно».

Конкретно задание выглядит так.

def exercise()
    #Create 5 variables named factorN where N is the numbers 1 to 5, 
    #and set them 1 through 5 respectively.

    # ------ Place code below here \/ \/ \/ ------

    # ------ Place code above here /\ /\ /\ ------

    return factor1, factor2, factor3, factor4, factor5

Когда я запускаю следующий код вне функции, он работает нормально.

for n in range(1,6):
    name = "factor" + str(n)
    vars()[name] = n

 print(factor1) #prints 1
 print(factor2) #prints 2

Но когда я пытаюсь поместить этот код внутрь функции, вот так, и если я сначала не запустил указанную выше функцию ...

def exercise():
    for n in range(1,6):
        name = "factor" + str(n)
        vars()[name] = n
    return factor1, factor2, factor3, factor4, factor5

exercise()

Затем я получаю следующую ошибку:

"NameError: имя 'factor1' не определено."

Кто-нибудь знает альтернативу vars () [], которая работает внутри функции? Я не хочу, чтобы переменная factor1 существовала вне функции.

Я уже отправил это задание, но изначально я использовал globals () вместо vars (). Он прошел модульный тест упражнения (), возвращающего числа от 1 до 5, но был помечен как неправильный, потому что он создал factor1 как глобальную переменную. Теперь я понимаю риски создания глобальных переменных внутри функции, но я не знаю, как получить factor1 как переменную, существующую только внутри функции.

Это ужасное упражнение. Должна быть только одна оценивающая последовательность переменная с именем factor. Например, factor = [1,2,3,4,5].

chepner 13.09.2018 21:21

python уже имеет представление о ваших переменных в функции. Функция уже скомпилирована, так что в принципе уже слишком поздно.

Jean-François Fabre 13.09.2018 21:22

Нет, Python работает не так.

Klaus D. 13.09.2018 21:24

Да, @chepner, каждая связанная с этим ссылка, которую я нашел по этому вопросу, в основном говорила: «Динамическое создание имен переменных - ужасная идея». Я понимаю, что это так, но мне все еще было интересно, смогу ли я научиться делать то, что вам на самом деле не следует делать для выполнения упражнения lol.

hmgeiger 14.09.2018 22:48

Обновление: оказывается, профессор буквально просто хотел, чтобы мы сделали 5 разных переменных. Например. factor1 = 1, factor2 = 2 и т. д. Я слишком много обдумывал.

hmgeiger 16.09.2018 23:20
1
5
34
0

Другие вопросы по теме