[英]Calculating the average grade in Python?
我试图获得两个及格分数的平均值。 输出应为:
到目前为止,这是我的代码:
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)
由于您尚未指定,我只是在这里猜测您的问题,但是在“功能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)
应该:
elif grade1 <= 50.0 and grade2 >= 50.0:
print (grade2)
elif grade1 >= 50.0 and grade2 <= 50.0:
print (grade1)
如果您查看原始条件,则继续检查0.0 >= gradeN
,这意味着仅当等级为负数时才为true。 您的其他某些部分也存在类似的问题。
您的比较搞砸了。 他们没有说您的意思,而且许多人总是认为False。 不能存在等级1使得0.0 >= grade1 >= 50.0
,因为不存在大于等于50的非正数。我建议您“漫长的路途”写出多个比较,直到您清楚要说的是什么,而不是使用Python的这种节省按键功能的功能。 在Python中, a < b < c
表示a < b and b < c
而不是a < b or 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。
尽管以下内容可能会过大,但我不得不提一下它:在上面的函数可以轻松地概括为需要任意等级的分数:
def average_passing_grade(* grades):
'''Return the average of the passing grades among grades.'''
passing_grades = [g for g in grades if 50 <= g <= 100]
return sum(passing_grades)/max(1, len(passing_grades))
您可以这样使用:
>>> average_passing_grade()
0.0
>>> average_passing_grade(35.3)
0.0
>>> average_passing_grade(75.5)
75.5
>>> average_passing_grade(35.3, 88)
88.0
>>> average_passing_grade(88, 20)
88.0
>>> average_passing_grade(50, 100)
75.0
>>> average_passing_grade(40, 50, 60, 70, 80, 90)
70.0
除了其他答案中指出的不良逻辑之外,您还可以使用max和min对某些情况进行一次逻辑检查。
if grade1 >= 50.0 and grade2 >= 50.0:
可
if min (grade1, grade2) >= 50.0: # Both are >= 50.0
同样
if max(grade1, grade2) < 50.0 # both are less than 50.0
一旦这两个显示为假,则else表示在限制的每一侧。
同样,要测试无效值,您可以使用
if max(grade1, grade2) > 100.0 or min(grade1, grade2) < 0:
表示至少一个等级无效
if min(grade1, grade2) > 100 or max(grade1, grade2) <0:
表示两个等级都以相同的方式无效。
我不是Python专家。 但是,我很确定您的错误是由于您的if
条件造成的。
if 0.0 < grade1 > 100.0 and 0 < grade2 > 100.0:
应该是这样的
if (grade1 < 0 or grade1 > 100) and (grade2 < 0 or grade2 > 100):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.