用Python计算平均成绩?

2024-09-28 01:28:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想得到两个及格分数的平均分。输出应为:

  • 0.0,如果两个成绩都不及格<;50
  • 如果只有一个成绩是及格分数(如果 一个大于50)
  • 两个等级的平均值,如果两个等级都通过(如果两者都通过 大于50)

以下是我目前为止的代码:

def passing_grade(grade1,grade2):
    '''(number, number)--> number
    This function definition prints the average of all passing grade(s)
    '''
    # Function 1 - If both numbers are outside the grading range (0-100)
    if 0.0 < grade1 > 100.0 and 0 < grade2 > 100.0:
           print ('Not available grading')

    elif 0.0 >= grade1 <= 50.0 and 0.0 >= grade2 <= 50.0:
            print (0.0)

    #Function 2 - If one of the grades is passing then, print passing grade
    elif 0.0 >= grade1 <= 50.0 and 0.0 >= grade2 >= 50.0:
        print (grade2)
    elif 0.0 >= grade1 >= 50.0 and 0.0 >= grade2 <= 50.0:
        print (grade1)

    #Function 3 - If both grades are passing >50 then print the average
    elif 50.0 > grade1 <= 100.0 and 50.0> grade2 <= 100.0:
        print ((grade1+grade2)/2)

Tags: andofthenumberiffunction分数grade
3条回答

除了其他答案中指出的错误逻辑之外,您可以使用max和min对某些情况进行一次逻辑检查。在

if grade1 >= 50.0 and grade2 >= 50.0: 

可以

^{pr2}$

同样

^{3}$

一旦这两个被证明是错误的,另一个意味着一个在极限的两边。在

类似地,为了测试可以使用的无效值

if max(grade1, grade2) > 100.0 or min(grade1, grade2) < 0:

意味着至少有一个等级无效

if min(grade1, grade2) > 100 or max(grade1, grade2) <0:

意味着两个等级都是无效的。在

你的比较搞砸了。他们不会说出你的意思,很多人的评价总是错误的。不可能有一个等级为0.0 >= grade1 >= 50.0,因为没有大于等于50的非正数。我建议你写下你的多次比较“漫长的路”,直到你明白你的意思,而不是使用Python的这个按键保存功能。a < b < c在Python中的意思是a < b and b < c而不是{},这是你想在第一个“if”语句中说什么的形式。在

最后,当在一个表达式中编写多个比较时,不要混淆比较的方向,这是不必要的混淆(首先对您来说)。在

一种更简洁的编写(计算部分)函数的方法:

def avg_passing_grade(grade1, grade2):
    passing_grades = [g for g in (grade1, grade2) if 50 <= g <= 100]
    return sum(passing_grades)/max(1, len(passing_grades))

这使得一个列表passing_grades只包含提供给正在传递的函数的等级。函数返回他们的平均值,注意不要除以0,以防没有分数通过。在

虽然下面的功能可能有些过火,但我不得不提一下:上面的函数很容易概括为取任意分数的函数:

^{pr2}$

你可以这样使用:

^{3}$

我只是在猜测你的问题,因为你还没有具体说明,但在“函数2”的第二部分中,你的逻辑似乎很糟糕:

elif 0.0 >= grade1 <= 50.0 and 0.0 >= grade2 >= 50.0:
    print (grade2)
elif 0.0 >= grade1 >= 50.0 and 0.0 >= grade2 <= 50.0:
    print (grade1)

应该是:

^{pr2}$

如果查看原始条件,则继续检查0.0 >= gradeN,这意味着只有当分数为负数时才为真。你的其他部分也有类似的问题。在

相关问题 更多 >

    热门问题