Этим летом я сдаю 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()
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])
Проблема в том, что 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])
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.