用Python中的字母计算等级

用Python中的字母计算等级,python,Python,我正在写一个程序来计算一个班级的平均成绩和字母分数。每次我运行代码时,它都会打印“你的成绩是A”。我认为我的def average()函数有问题,但我无法解决 它也只打印字母等级,不打印分数 homework1 = int(raw_input('Enter homework1 score: ')) homework2 = int(raw_input('Enter homework2 score: ')) quiz = int(raw_input('Enter quiz score: ')) ex

我正在写一个程序来计算一个班级的平均成绩和字母分数。每次我运行代码时,它都会打印“你的成绩是A”。我认为我的def average()函数有问题,但我无法解决

它也只打印字母等级,不打印分数

homework1 = int(raw_input('Enter homework1 score: '))
homework2 = int(raw_input('Enter homework2 score: '))
quiz = int(raw_input('Enter quiz score: '))
exam = int(raw_input('Enter Final Exam Score: '))
if homework1 > 100:
        print 'Score cannot be greater than 100'
if homework1 < 0:
        print 'Score cannot be less than 0'
if homework2 > 100:
        print 'Score cannot be greater than 100'
if homework2 < 0:
        print 'Score cannot be less than 0'
if quiz > 100:
        print 'Score cannot be greater than 100'
if quiz < 0:
        print 'Score cannot be less than 0'        
if exam > 100:
        print 'Score cannot be greater than 100'
if exam < 0:
        print 'Score cannot be less than 0'   

numbers = [homework1, homework2, quiz, exam]               

def average(numbers):
    total = sum(numbers)
    total = float(total)
    return total / len(numbers)

def get_average(numbers):
    homework = average("homework1, homework2")
    quiz = average("quiz")
    exam = average("exam")
    return .2*quiz + .2*exam + .6*homework    

def get_letter_grade(score):
    if score >= 93.333:
        return "Your grade is an A"
    elif score >= 90:
        return "Your grade is an A-"
    elif score >= 86.667:
        return "Your grade is a B+"
    elif (avg >= 83.333):
        return "Your grade is a B"
    elif (avg >= 80):
        return "Your grade is a B-"
    elif (avg >= 76.667):
        return "Your grade is a C+"
    elif (avg >= 73.333):
        return "Your grade is a C"
    elif (avg >= 70):
        return "Your grade is a C-"
    elif (avg >= 66.667):
        return "Your grade is an D"
    elif (avg >= 65):
        return "Your grade is an D-"
    else:
        return "Your grade is a F"
    if (avg == 0):
        return "There is an error"

print get_letter_grade(get_average)
homework1=int(原始输入('Enter homework1 score:'))
家庭作业2=int(原始输入('输入家庭作业2分数:'))
测验=int(原始输入('输入测验分数:'))
考试=int(原始输入('输入期末考试分数:'))
如果家庭作业1>100:
打印“分数不能大于100”
如果家庭作业1<0:
打印“分数不能小于0”
如果家庭作业2>100:
打印“分数不能大于100”
如果家庭作业2<0:
打印“分数不能小于0”
如果测验>100:
打印“分数不能大于100”
如果测验<0:
打印“分数不能小于0”
如果检查>100:
打印“分数不能大于100”
如果检查<0:
打印“分数不能小于0”
数字=[家庭作业1、家庭作业2、测验、考试]
def平均值(数字):
总数=总和(个数)
总计=浮动(总计)
返回总数/长度(数字)
def get_平均值(数字):
家庭作业=平均值(“家庭作业1,家庭作业2”)
测验=平均值(“测验”)
考试=平均(“考试”)
返回.2*测验+0.2*考试+0.6*家庭作业
def获取字母等级(分数):
如果得分>=93.333:
return“你的成绩是A”
elif得分>=90:
return“你的成绩是A-”
elif得分>=86.667:
return“你的成绩是B+”
elif(平均值>=83.333):
返回“你的成绩是a B”
elif(平均值>=80):
return“你的成绩是a B——”
elif(平均值>=76.667):
return“你的成绩是C+”
elif(平均值>=73.333):
返回“你的成绩是C”
elif(平均值>=70):
return“你的成绩是C-”
elif(平均值>=66.667):
return“你的成绩是D”
elif(平均值>=65):
return“你的成绩是D-”
其他:
返回“你的成绩是F”
如果(平均值==0):
返回“有错误”
打印get_字母等级(get_平均值)

调试完代码后,我可以看到您正在将get_average()(函数)作为参数传递给get_letter_grade()

print get_letter_grade(get_average)
所以这是第一件事。另外,Tom Karzes已经说过,当字符串显然需要一个数字列表时,它会将字符串解析为average()

你每次都会得到“你的分数是a”,因为你调用
get\u letter\u grade
函数,将函数
get\u average
作为输入

由于评估
get_average>93333
总是
True
,因此您不会得到任何其他答案


再试试。

我建议您检查一下代码。但要解决代码中的问题,可以这样做:

homework1 = int(raw_input('Enter homework1 score: '))
homework2 = int(raw_input('Enter homework2 score: '))
quiz = int(raw_input('Enter quiz score: '))
exam = int(raw_input('Enter Final Exam Score: '))
if homework1 > 100:
        print 'Score cannot be greater than 100'
if homework1 < 0:
        print 'Score cannot be less than 0'
if homework2 > 100:
        print 'Score cannot be greater than 100'
if homework2 < 0:
        print 'Score cannot be less than 0'
if quiz > 100:
        print 'Score cannot be greater than 100'
if quiz < 0:
        print 'Score cannot be less than 0'        
if exam > 100:
        print 'Score cannot be greater than 100'
if exam < 0:
        print 'Score cannot be less than 0'   

numbers = [homework1, homework2, quiz, exam]               

def average(numbers):
    total = sum(numbers)
    total = float(total)
    return total / len(numbers)

def get_average(numbers):
    # you accessed your array in the wrong way
    homework = average(numbers[0:1])
    quiz = average([numbers[2]])
    exam = average([numbers[3]])
    return .2*quiz + .2*exam + .6*homework    

def get_letter_grade(numbers):
    # here, you mixed up 'score' and 'avg' which were both not defined
    score = get_average(numbers)
    if score >= 93.333:
        return "Your grade is an A"
    elif score >= 90:
        return "Your grade is an A-"
    elif score >= 86.667:
        return "Your grade is a B+"
    elif (score >= 83.333):
        return "Your grade is a B"
    elif (score >= 80):
        return "Your grade is a B-"
    elif (score >= 76.667):
        return "Your grade is a C+"
    elif (score >= 73.333):
        return "Your grade is a C"
    elif (score >= 70):
        return "Your grade is a C-"
    elif (score >= 66.667):
        return "Your grade is an D"
    elif (score >= 65):
        return "Your grade is an D-"
    else:
        return "Your grade is a F"
    if (score == 0):
        return "There is an error"

# You used to call the get_letter_grade with a (not called) function as an argument
print get_letter_grade(numbers)
homework1=int(原始输入('Enter homework1 score:'))
家庭作业2=int(原始输入('输入家庭作业2分数:'))
测验=int(原始输入('输入测验分数:'))
考试=int(原始输入('输入期末考试分数:'))
如果家庭作业1>100:
打印“分数不能大于100”
如果家庭作业1<0:
打印“分数不能小于0”
如果家庭作业2>100:
打印“分数不能大于100”
如果家庭作业2<0:
打印“分数不能小于0”
如果测验>100:
打印“分数不能大于100”
如果测验<0:
打印“分数不能小于0”
如果检查>100:
打印“分数不能大于100”
如果检查<0:
打印“分数不能小于0”
数字=[家庭作业1、家庭作业2、测验、考试]
def平均值(数字):
总数=总和(个数)
总计=浮动(总计)
返回总数/长度(数字)
def get_平均值(数字):
#您以错误的方式访问了阵列
家庭作业=平均(数字[0:1])
测验=平均值([数字[2]])
考试=平均值([数字[3]])
返回.2*测验+0.2*考试+0.6*家庭作业
def获取字母等级(数字):
#在这里,您混淆了未定义的“分数”和“平均值”
分数=获得平均值(数字)
如果得分>=93.333:
return“你的成绩是A”
elif得分>=90:
return“你的成绩是A-”
elif得分>=86.667:
return“你的成绩是B+”
elif(得分>=83.333):
返回“你的成绩是a B”
elif(分数>=80):
return“你的成绩是a B——”
elif(得分>=76.667):
return“你的成绩是C+”
elif(得分>=73.333):
返回“你的成绩是C”
elif(分数>=70):
return“你的成绩是C-”
elif(得分>=66.667):
return“你的成绩是D”
elif(得分>=65):
return“你的成绩是D-”
其他:
返回“你的成绩是F”
如果(分数=0):
返回“有错误”
#您曾经使用(未调用)函数作为参数调用get_letter_grade
打印获得字母等级(数字)

您正在将字符串传递给
平均值
。尝试向它传递一个数字列表。@Tomkarze虽然这是真的,但代码中似乎根本没有调用
average()
,否则它会异常失败,而不会打印一些内容。是的,你说得对,问题远不止这些。为什么要将函数传递到
get_letter_grade
?我最初没有代码:
def average(numbers):total=sum(numbers)total=float(total)return total/len(numbers)
,但它不起作用,所以我想我需要定义averageFirst,你的代码在问题中被切断了,最重要的部分都不见了。第二,你的代码太大了:试着把它分成更小的部分,分别测试它们,找到行为不正确的部分,只发布不正确的部分而不是整个代码。虽然我理解不能参与评论很烦人,但请不要发布answ