Словари не работают, также я получаю сообщения об ошибках KeyError: 0, и я не знаю, что это значит: / (python кстати) - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь выяснить, какое здание лучше всего покупать в Cook ie Clicker в любое время. Прямо сейчас у меня проблемы с последней строкой. «стоимость [число] = базовая стоимость [число] * 1,15 ** (без суммы)». Там написано «KeyError: 0», и я понятия не имею, что это значит, так что простите меня за расплывчатое название. Также, если вы можете рассказать мне, как его оптимизировать, потому что я сомневаюсь, что копирование и вставка словарей - это хороший способ go об этом.

basecost = {
    
    "cursor" : 15,
    "grandma" : 100,
    "farm" : 1100,
    "mine" : 12000,
    "factory" : 130000,
    "bank" : 1400000,
    "temple" : 20000000,
    "wizardtower" : 330000000,
    "shipment" : 5100000000,
    "alchemylad" : 75000000000,
    "portal" : 1000000000000,
    "timemachine" : 14000000000000,
    "antimattercondenser" : 170000000000000,
    "prism" : 2100000000000000,
    "chancemaker" : 26000000000000000,
    "fractalengine" : 310000000000000000,
    "javascriptconsole" : 71000000000000000000

    }

cost = {

    "cursor" : None,
    "grandma" : None,
    "farm" : None,
    "mine" : None,
    "factory" : None,
    "bank" : None,
    "temple" : None,
    "wizardtower" : None,
    "shipment" : None,
    "alchemylad" : None,
    "portal" : None,
    "timemachine" : None,
    "antimattercondenser" : None,
    "prism" : None,
    "chancemaker" : None,
    "fractalengine" : None,
    "javascriptconsole" : None,
    
    }

basecps = {
    
    "cursor" : 0.1,
    "grandma" : 1,
    "farm" : 8,     
    "mine" : 47,
    "factory" : 260,
    "bank" : 1400,
    "temple" : 7800,
    "wizardtower" : 44000,
    "shipment" : 260000,
    "alchemylad" : 1600000,
    "portal" : 10000000,
    "timemachine" : 65000000,
    "antimattercondenser" : 430000000,
    "prism" : 2900000000,
    "chancemaker" : 21000000000,
    "fractalengine" : 150000000000,
    "javascriptconsole" : 1100000000000,

    }

buildingplural = [
    
    "Cursors",
    "Grandmas",
    "Farms",
    "Mines",
    "Factories",
    "Banks",
    "Temples",
    "Wizard Towers",
    "Shipments",
    "Alchemy Labs",
    "Portals",
    "Time Machines",
    "Antimatter Condensers",
    "Prisms",
    "Chancemakers",
    "Fractal Engines",
    "Javascript Consoles"

    ]


for number, item in enumerate(buildingplural):

    amount = int(input("How many "+ item +" do you have?"))
    free = int(input("How many "+ item +" did you get for free?"))

    cost[number] = basecost[number]*1.15**(amount-free) 

Ответы [ 3 ]

0 голосов
/ 04 августа 2020

Ну, ошибка связана с тем, что вы пытаетесь получить значение элемента dict basecost по числу, а не по его ключу в for l oop, и что вам нужно сделать, это что-то вот так:

for item in buildingplural:

    amount = int(input("How many "+ item +" do you have?"))
    free = int(input("How many "+ item +" did you get for free?"))
    key_dict = item.lower()[:-1] 
    cost[number] = basecost[key_dict]*1.15**(amount-free)

Как вы могли видеть, вам нужно создать key_dict, потому что элементы buildingplural являются множественным числом других элементов dicts. Надеюсь, это поможет вам :)

Что касается второго вопроса и того, как оптимизировать создание диктовок, вы не можете сделать так много, потому что их значения разные и между ними нет никакой связи.

0 голосов
/ 04 августа 2020

cost [number] не будет работать, так как стоимость - это словарь, а не список.

Вам нужно сделать что-то вроде ниже. Это создаст новый словарь с именем 'newcost' и словарь с ключами из словаря 'cost' и новыми производными значениями.

newcost = {}
for number, item in enumerate(buildingplural):
    amount = int(input("How many "+ item +" do you have?"))
    free = int(input("How many "+ item +" did you get for free?"))
    newcost.update({(list(cost.keys())[number]): list(basecost.values())[number]*1.15**(amount-free) })
0 голосов
/ 04 августа 2020

Нет необходимости перечислять здесь список. Ваши ключи - это элементы в списке.

for item in buildingplural:

    amount = int(input("How many "+ item +" do you have?"))
    free = int(input("How many "+ item +" did you get for free?"))

    cost[item] = basecost[item]*1.15**(amount-free) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...