"""
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計算機では、2つのリスト(list2 [0] * list3 [0] ...)の一致する要素を移動して乗算する必要があります入力が何であれ。コードは、すべてが同じ長さであることを確認するために既にチェックしています。実行されると、エラー 'リストの範囲外のインデックス'が表示されます。予期しないエラー 'リストの範囲外のリスト'
私が聞いたことは、変数が範囲を超えて拡張されたときですが、 'y'がlist1の長さを超えてはいけないことがわかります(これはリスト2の長さ3つ)。私はwhile文でも '<'だけを使ってみました。
サイドノート:私はすでにこのプログラムが完全にフォーマットされていないことを知っていますが、私はクラス7週目にしかいません。
他のサイドノート:私は私のコンパイラ
スタックトレースをもう一度見てください。どのコード行でエラーが発生するかを示します。 – DyZ
それを私のポストに含めるのを忘れてしまった!これは具体的には でした。 weight = float(list3 [y] * list2 [y]) –
補足として、 'list1 [i] .upper()not in'は、_first_グレードが無効であるかどうかをチェックします'list2 [a] .isdigit()== False'は最初の数字だけをチェックします。おそらくあなたが望むものではありません。 – DyZ