"""
calcGPA
@author: nick young
"""
# GPA Calculator. Weights letter grade and credit hours and divides to return final GPA value
def calcGPA():
error=('Improper Input, asshole. GPA is -1.') #Snarky error message
i=0 #tally numbers to count from
a=0
x=0
y=0
list1=list(input("Enter your letter grades earned on an A-F scale:"))
list2=list(input('Enter the credit hours earned for each course in the same order as your first input \nNo spaces:'))
list3=[] #empty list to append weighted values to
if len(list1)!=len(list2) or len(list1)+len(list2)<=0: #verifies lists are same length and not empty
print(error)
elif list1[i].upper() not in ['A','B','C','D','F']:
print(error)
i=i+1
elif list2[a].isdigit()==False:
a=a+1
print(error)
for letter in list1: #loop determines letter grade and returns numeric value per element in list1
if letter.upper=='A': #runs through until each element in list1 has been converted into a numeric value to be weighted
list3.append(4*list2[x])
x=x+1
elif letter.upper=='B':
list3.append(3*list2[x])
x=x+1
elif letter.upper=='C':
list3.append(2*list2[x])
x=x+1
elif letter.upper=='D':
list3.append(1*list2[x])
x=x+1
elif letter.upper=='F':
list3.append(0)
x=x+1
y=0
while y<=len(list1): #loop gathers the collective weight of each class to be divided
weight=float(0)
weight=float(list3[y]*list2[y])
y=y+1
gpa=float(weight/sum(list2))
print(gpa)
calcGPA()
Для этого калькулятора GPA мне нужно переместить и умножить соответствующие элементы в двух списках (list2 [0] * list3 [0] ...) для длины независимо от ввода. Код уже проверяет, что все имеет одинаковую длину. Когда он запускается, появляется индекс списка ошибок за пределами диапазона.Неопределенная ошибка «индекс индекса за пределами диапазона»
После некоторого поиска в Google, я слышу, что это означает, что переменная выходит за пределы диапазона, который должен быть, но из того, что я вижу 'y', не должно выходить за пределы длины списка1 (что также было бы длиной списка 2 и три). Я попытался использовать только «<» в инструкции while.
Замечание: Я знаю, что эта программа, вероятно, не отформатирована отлично, но я только на седьмой неделе моего класса.
Другая сторона Примечание: Я использую Spyder 3 IDE для моего компилятора
Посмотрите еще раз на трассировку стека. Он сообщает, какая строка кода вызывает ошибку. – DyZ
Забыл включить это в мой пост! Он специально сделал это для weight = float (list3 [y] * list2 [y]) –
В качестве примечания стороны 'list1 [i] .upper() not in ...' проверяется, только если оценка _first_ недействительна , а 'list2 [a] .isdigit() == False' проверяет только первое число. Наверное, не то, что вы хотели. – DyZ