根据问题,如果等级与下一个5的倍数之间的差小于3,则将等级向上舍入到5的下一个倍数。如果等级的值小于38,则不会进行四舍五入,因为结果仍将是不合格的等级。
这是我的解决方法,
def gradingStudents(grades):
for i in grades:
if (5 * round(1 + i/5) - i) < 3 and i>= 38:
print (5 * round(1 + i/5))
else:
print (i)
grades_count = int(input().strip())
grades = []
for p in range(grades_count):
g = int(input(''))
grades.append(g)
result = gradingStudents(grades)
但是,在检查输出时,我注意到if条件不起作用,因为输出生成与输入相同的等级。
我认为类似的方法应该起作用
def gradingStudents(grades):
output =[]
for g in filter(lambda x: x>38, grades):
step = g + (5 - g % 5)
output.append(step < 3 : g + step ? g)
output.extend(filter(lambda x: x<=38, grades)):
return output
# ... Your other code
print(gradingStudents(grades))
简化您的方法
def finalGrade(grade, multiple_of=5, limit=38):
if not grade < limit:
grade = int(round(grade / multiple_of) * multiple_of)
return grade
grades = [20, 34, 37, 38, 39, 41, 45, 48, 52]
finalGrades = [finalGrade(grade) for grade in grades]
# [20, 34, 37, 40, 40, 40, 45, 50, 50]
使用模%
5应该可以为您提供帮助。此外,//
运算符在除法后也会自动为您舍入]
grades = [1, 9, 37, 38, 43, 47, 49, 99, 91]
rounded_grades = [grade if grade < 38 or grade % 5 in [0, 1, 2] else 5 * (grade // 5 + 1) for grade in grades]
print(grades)
print(rounded_grades)
#Output
[1, 9, 37, 38, 43, 47, 49, 99, 91]
[1, 9, 37, 40, 45, 47, 50, 100, 91]