Exec не присваивает значение перерменной
В общем, я делаю программу, с помощью которой можно будет ходить по спискам в списке и смотреть содержимое в них. Код:
import os
class listTraveler:
def __init__(self, array: list):
self.array = array
self.position = array
def printElements(self):
os.system("cls")
print("--items--")
for index, item in enumerate(self.position):
print(f"{index} - {item}")
print("---------")
print("b - back")
print("e - exit")
def goForward(self, itemNumber: int):
self.position = self.position[itemNumber]
self.printElements()
def goBack(self):
pass
def main():
array = [[1, 2, 3, 4, 5, [6, 7, 8]], [[9], 10, [11, 12]]]
traveler = listTraveler(array)
traveler.printElements()
while True:
userInput = input(">>> ")
if userInput != "b" and userInput != "e":
if type(traveler.position[int(userInput)]) == list:
traveler.goForward(int(userInput))
else:
traveler.printElements()
elif userInput == "b":
traveler.goBack()
elif userInput == "e":
exit()
if __name__ == "__main__":
main()
Сейчас она может переходить в списки, но не может вернуться в прошлый список, так как у меня возникли трудности с реализацией.
Думаю, что лучшим решением будет функция, которая принимает список и индекс в виде строки, так как если это строка, то можно менять эти индексы. Вот функция:
def func(array: list, index: str):
item = 0
exec(f"item = array{index}")
return item
item = func([1, 2, 3, 4], "[2]")
print(item)
Но в итоге она возращает 0, а должна была вернуть 3. exeс()
почему то не присвоил значение item, оно так и осталось равно 0. Как это исправить? Или может быть другой вариант решения?