Этим летом я сдаю GCSE и не понимаю, почему эта строка кода не будет принята.
Любая помощь будет полезна.

Ошибка исходит из строки print('First gen \nJuveniles in gen 1',new_gens[0][0],'\nAdults in gen 1',new_gens[0][1],'\nSeniles in gen 1',new_gens[0][2])

Я пытаюсь создать первое поколение зеленых мух, однако мне трудно даже напечатать их, а python говорит, что целое число не подлежит индексированию.

def Menu():
    again = True
    while again == True:
        print('\n------------------GreenFly Model------------------\n\n')
        print('MENU\n')

        print('Option 1\t Set the Generation 0 values')
        print('Option 2\t Display the Generation 0 values')
        print('Option 3\t Run the model')
        print('Option 4\t Quit')
        print('Select an option from above')
        choice = str(input('What is your option?'))
        if choice == '1':
            Generation_0()
        elif choice == '2':
            Display_Generation_0()
        elif choice == '3':
            model()
        elif choice == '4':    
            quit_model()
            again = False
        else:
            print('invalid option, Try again') 

def Generation_0():
    global gen0
    Juveniles = int(input('How many Juveniles? '))
    Adults = int(input('How many Adults? '))
    Seniles = int(input('How many Sentiles? '))
    BR = int(input('What is your birthrate? ')) 
    J_Survrate = int(input('Juvenile survival rate between 0&1'))
    A_Survrate = int(input('Adult survival rate between 0&1'))
    S_Survrate = int(input('Senile survival rate between 0&1'))
    num_gen=int(input('Birth rate between 5 and 25'))
    gen0 = [[Juveniles,Adults,Seniles], #stores all the information in a 2d array
            [BR],
            [J_Survrate,A_Survrate,S_Survrate],
            [num_gen]]
    gens.append(gen0)
    print(gen0)
    Menu()


def Display_Generation_0(): #lists out the 2d array
    print('Generation 0\nJuvenile numbers are ',gen0[0][0], "\nAdult numbers are ",gen0[0][1],'\nSenile numbers are ',gen0[0][2],'\nBirth rate is ',gen0[1][0],'\nJunior survival rate is ',gen0[2][0], '\nAdult survival rate is ',gen0[2][1], '\nSenile survival rate is ',gen0[2][2], '\nNumber of generations is ',gen0[3][0],)    


def model():
    new_gens = [(gen0[0][1]*gen0[1][0]),(gen0[0][0]*gen0[2][0]),((gen0[0][1]*gen0[2][1])+(gen0[0][2]*gen0[2][2]))]
    print('First gen \nJuveniles in gen 1',new_gens[0][0],'\nAdults in gen 1',new_gens[0][1],'\nSeniles in gen 1',new_gens[0][2])

#Main
gens=[]
Menu()
0
m.doe 23 Окт 2018 в 18:36

2 ответа

Лучший ответ

New_gens - это одномерный массив, вы индексируете его, как если бы это 2D-массив. Вы пытаетесь проиндексировать число, которое не работает. Для наглядности new_gens на самом деле выглядит примерно так:

new_gens = [122, 35, 88]

new_gens[0][0] говорит: получить 1-й элемент в массиве new_gens, а затем получить 1-й элемент всего, что было в этой корзине. Вы можете видеть, что 122 - это просто число, а не другой список.

Вы можете получить нужный индекс, просто проиндексировав его следующим образом:

    JUVENILES_INDEX, ADULTS_INDEX, SENILES_INDEX = 0, 1, 2

    print('First gen \nJuveniles in gen 1',new_gens[JUVENILES_INDEX],'\nAdults in gen 1',new_gens[ADULTS_INDEX],'\nSeniles in gen 1',new_gens[SENILES_INDEX])
0
LeKhan9 23 Окт 2018 в 17:18

Проблема в том, что new_gens на самом деле представляет собой массив из трех данных.

Итак, когда вы выполняете new_gens[0][0], это похоже на выполнение (int (1)) [0], вы получите

TypeError: 'int' object has no attribute '__getitem__'

Так должно получиться что-то вроде:

print("First gen \nJuveniles in gen 1",new_gens[0],"\nAdults in gen 1",new_gens[1],"\nSeniles in gen 1",new_gens[2])
0
PilouPili 23 Окт 2018 в 16:34
52952915