Ошибка при преобразовании рабочего кода в более объектно-ориентированную структуру Ошибка: строковые индексы должны быть целыми числами Python 3 - PullRequest
0 голосов
/ 17 декабря 2018

Я продолжаю сталкиваться с ошибкой: строковые индексы должны быть целыми числами при использовании заполнителей для моего скрипта.

Моя программа должна отслеживать рост овощей исключительно по расчетам.Идея состоит в том, что каждое растение имеет свои собственные характеристики (например, carrotData), но вместо того, чтобы иметь код для каждого 'plantData', я заменил код на (whichPlant, а затем whichPlantData) в качестве временного заполнителя (так что мне не нужен новый код длякаждое растение, которое есть в моем саду или которое я хочу добавить на более позднем этапе).

Это когда я получаю сообщение об ошибке в последней строке (Plant - это класс), помеченное звездочкой.Когда я использую (carrotData) вместо (whichPlantData), мой скрипт работает.Но как только я помещаю во временный заполнитель (whichPlantData) разрывы.

Что вызывает это (чтобы я мог избежать этого в будущих проектах) и как я могу это исправить?

спасибо за поддержку !!

carrotData = {'plantID': '','plantingTime': dt(year=now.year, month=3, day=1), "dateOfPlanting": 0, "numberOfPlants": 0, "germinationTime": 7, "growthTime": 227, "flowerTime": 247, "harvestTime": 254, "liveCycles": 1, "status": 0}
potatoData = {'plantID': '','plantingTime': dt(year=now.year, month=3, day=1), "dateOfPlanting": 0, "numberOfPlants": 0, "germinationTime": 7, "growthTime": 227, "flowerTime": 247, "harvestTime": 254, "liveCycles": 1, "status": 0}

print ("imported plant datasheets")

#functions:

#if plant is added

def addPlant():
    whichPlant = input("Which plant do you want to add? ")
    n = int(input("How many plants do you want to add? "))
    i = 0
    whichPlantData = whichPlant + "Data"

    if whichPlant in inventory:
            while i < n:
                    i += 1
                    if whichPlant in plants:
                            plants[whichPlant] += 1
                    else:
                            plants[whichPlant] = 1
        ***Error*** whichPlant = Plant("", whichPlantData['plantingTime'], dt.now(), n, dt.now() + timedelta(days=whichPlantData['germinationTime']), dt.now() + timedelta(days=whichPlantData['growthTime']), dt.now() + timedelta(days=whichPlantData['flowerTime']),whichPlantData['harvestTime'], whichPlantData['liveCycles'], whichPlantData['status'])

1 Ответ

0 голосов
/ 18 декабря 2018

Кажется, ваша проблема с whichPlantData = whichPlant + "Data".whichPlant - это строка, возвращаемая функцией input.Я думаю, что вы пытаетесь сделать, это получить словарь информации о заводе на основе ввода от пользователя.Более того;whichPlant + "Data" выглядит как попытка сделать whichPlant идентичным имени переменной, указывающей на словарь информации о заводе.То, что строка whichPlant может быть равна имени переменной carrotData, не делает ее такой же, как переменная.Я бы предложил создать список словарей, полный информации о заводе, а затем выполнить итерации по элементам в этом списке, чтобы увидеть, совпадает ли ключ словарей name с пользовательским вводом.Похоже на это:

plants = [{"Name": "Carrot", 'plantID': '','plantingTime':0, "dateOfPlanting": 0, "numberOfPlants": 0, "germinationTime": 7, "growthTime": 227, "flowerTime": 247, "harvestTime": 254, "liveCycles": 1, "status": 0},
{"Name": "Potato", 'plantID': '','plantingTime': 0, "dateOfPlanting": 0, "numberOfPlants": 0, "germinationTime": 7, "growthTime": 227, "flowerTime": 247, "harvestTime": 254, "liveCycles": 1, "status": 0}]

PlantName = input("Enter a Plant: ")

for plant in plants:
    if plant['Name'] == PlantName:
        print("{}'s germinationTime is {}".format(PlantName, plant["germinationTime"]))
        # DO SOMETHING
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...