"""
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] ...),以获得输入的长度。代码已经检查以验证所有内容的长度是否相同。运行时,会出现错误'list index out of range'。
经过一些谷歌搜索,我听说这是因为变量超出了它应该的范围,但是从我看到的'y'不应超出list1的长度(这也是列表2的长度和三)。我试过只使用'&lt;'在while语句中也是如此。
旁注:我知道这个程序可能没有完美格式化,但我只是在课堂的第7周。
另一方面说明:我正在使用Spyder 3 IDE作为我的编译器
答案 0 :(得分:1)
最初的问题是您使用了上部 属性而不是上部 方法。你需要这个:
for letter in list1:
if letter.upper()=='A':
list3.append(4*list2[x])
然后你会遇到list2是一个字符列表而不是整数的问题。试试这个:
list3.append(4*int(list2[x]))
那些应该让你超过下一个驼峰。
答案 1 :(得分:1)
while y<len(list1):
而不是
while y<=len(list1):
索引在大多数语言中都是从零开始的,因此这是您通常想要做的事情。