具有两个附加功能的测试平均值和等级

时间:2014-10-16 02:09:40

标签: python function average

我已经有一段时间了,我被困住了。我必须编写一个程序,询问用户每个分数和平均测试分数。我需要函数calcAverage,它接受五个测试分数并返回分数的平均值。确定接受分数并根据标准分级等级将等级作为字符串返回的等级(90-100是A,80-89是B,70-79是C等)。但我还需要一个getValidScore函数,它会提示并读取一个有效的测试分数,一旦输入分数,它就会返回到调用模块。最后,isInValidScore是一个函数,用于检查传递的测试分数是否在0-100范围内,并返回一个布尔值,让我知道它是否有效。 这就是我所拥有的:

def main():

   test1 = int(input('Enter test grade 1: '))
   test2 = int(input('Enter test grade 2: '))
   test3 = int(input('Enter test grade 3: '))
   test4 = int(input('Enter test grade 4: '))
   test5 = int(input('Enter test grade 5: '))

   grade = (test1 + test2 + test3 + test4 + test5)

   input('press enter to continue')
   print(calc_average)
   print(determine_grade)
   print(getValidScore)
   print(isInvalidScore)
   return;

def calcAverage():

   grade / 5
   return averageScore

def determinGrade(score):
   if grade >= 90 and grade <= 100:
       return 'A'
   elif grade >= 80 and grade <= 89:
       return 'B'
   elif grade >= 70 and grade <= 79:
       return 'C'
   elif grade >= 60 and grade <= 69:
       return 'D'
   else:
       return 'F'

def getValidScore():
   grade = int(input('input score'))isInvalidScore(score)
   while isInvalidScore == false:
       print('ERROR')
   grade = int(input('input correct score'))
   return score

def isInvalidScore(score):
   status = True
   if score < 0 or score > 100:
      status = True
   else: status = False
   return status

main() 

所以我添加了回报,当我运行程序时,我得到了这个:

输入测试成绩1:99

输入测试成绩2:88

输入测试成绩3:77

输入测试成绩4:66

输入测试成绩5:55

按Enter继续

函数calc_average位于0x02BAD228&gt;

函数determine_grade在0x02BAD270&gt;

函数getValidScore位于0x02BAD2B8&gt;

函数isInvalidScore at 0x02BAD300&gt;

2 个答案:

答案 0 :(得分:1)

这里有一些问题:

  1. 您打印出的函数本身由内存中的位置表示,而不是执行的结果。在句点末尾添加括号以打印出结果。
  2. 您应该调用getValidScore并返回整数结果,而不是在未经验证的情况下读入输入(请参阅main)。
  3. 您的某些功能会使用参数,但您没有传递任何参数(提示:determinGradeisInvalidScore)。
  4. 您的某些功能应该接受参数(提示:calcAverage)。
  5. calcAverage应返回实际平均值的实数。 (提示:return grade/5
  6. 您的while循环应以while isInvalidScore(grade)开头,无需拨打前一行的电话。
  7. main中,您正在调用未定义的函数(determine_grade,这是一个错字吗?)
  8. 这就是我能快速看到它的全部内容。祝你好运!

答案 1 :(得分:0)

来自@tdlive aw'sum的答案实际上非常好(我只是赞成它)。阅读他的评论并使用这些东西。我会为你提供一个校正实施..我希望你研究你不理解的方面,但从中拿走一些好的部分。祝你好运。

isValidScore = lambda n: 0 <= n <= 100

calcAverage = lambda *args: sum(args)/len(args)

determinGrade = lambda s: ['F', 'D', 'C', 'B', 'A'][max(0, (min(60, 99)/10)-5)]

def getValidScore():
   while True:
        try:
            if isValidScore(int(raw_input('Input score: '))):
                return score              
        except ValueError:
            pass
        print('Score has to be an integer in the range 0 to 100')

if __name__ == "__main__":
    scores = []
    for _ in range(5):
        scores.append(getValidScore())
    print('\nThe scores are: ' + str(scores))
    print('The average is: ' + str(calcAverage(*scores)))
    print('The grade is: ' + determinGrade(calcAverage(*scores)))