Вы пытаетесь использовать строку x для доступа к имени переменной, которое не будет работать так, как вы ожидаете, так как, например, x содержит значение «Pen». Это не обязательно рекомендуемый подход, но вы можете использовать функцию locals
для динамического получения значения переменной следующим образом:
def FindPriceFunction(x):
Pen = (9,'always','monday')
Paper = (1,'always','tuesday')
print(locals()[x][0],'dollar')
while True:
name = input("name of the product?")
FindPriceFunction(name)
break
Здесь locals возвращает словарь локально определенных переменных, и Вы можете использовать строку x в качестве ключа для доступа к значению переменной. Таким образом, locals()['Pen']
даст вам значение (9,'always','monday')
Однако , было бы лучше (и безопаснее) просто хранить свои кортежи прямо в словаре где-то или, возможно, в файле из которого вы читаете, если вам не нужен длинный блок в вашем коде, а затем получаете доступ к данным через него, как вы изначально пытались, за исключением того, что вы можете сохранить весь кортеж, а не только цену, и затем получить доступ к первому элементу кортеж по цене. locals
возвращает словарь с именем переменной в качестве ключа и значение переменной в качестве значения, так что это, по сути, выполняет то, что вы могли бы сделать в первую очередь, сохраняя значение в dict
Если вы хотели например, чтобы сохранить все это в файле JSON, поскольку у вас будут сотни диктов, вы можете сделать следующее:
JSON file:
{
"Pen": [9, "always", "monday"],
"Paper": [1, "always", "tuesday"]
}
Код:
import json
with open('prices.json', 'r') as f:
prices = json.load(f)
def FindPriceFunction(x):
print(prices[x][0], 'dollar')