在我的main function def model中,我能做些什么来去掉'int'对象是不可下标的错误:

2024-06-19 19:25:02 发布

您现在位置:Python中文网/ 问答频道 /正文

今年夏天我要考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])

我正在尝试制作第一代greenflies,但是我甚至很难将它们打印出来,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()

Tags: theinnewinputrateisgenerationint
2条回答

新的数组是一个一维数组,你在索引它,好像它是一个二维数组。你正在尝试索引一个不起作用的数字。为了清楚起见,新的氏族实际上是这样的:

new_gens = [122, 35, 88]

new_gens[0][0]的意思是获取新的\u gens数组中的第一个元素,然后获取桶中任何东西的第一个元素。你可以看到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])

问题是new_gens实际上是一个由3个数据组成的数组

所以当你做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])

相关问题 更多 >