有条件的不评估为真

根据问题,如果成绩与下一个 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 条件不起作用,因为输出生成与输入相同的等级。


翻阅古今
浏览 148回答 3
3回答

守候你守候我

使用模%5 应该可以帮助你。模是除法后得到的余数。示例8 % 5=3此外,//运算符在除法后会自动为您舍入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]

潇潇雨雨

我认为这样的事情应该有效def gradingStudents(grades):&nbsp; output =[]&nbsp; for g in filter(lambda x: x>38, grades):&nbsp; &nbsp; &nbsp;step = g + (5 - g % 5)&nbsp; &nbsp; &nbsp;output.append(step < 3 : g + step ? g)&nbsp; output.extend(filter(lambda x: x<=38, grades)):&nbsp; return output# ... Your other codeprint(gradingStudents(grades))

慕田峪4524236

简化您的方法def finalGrade(grade, multiple_of=5, limit=38):&nbsp; &nbsp; if not grade < limit:&nbsp; &nbsp; &nbsp; &nbsp; grade = int(round(grade / multiple_of) * multiple_of)&nbsp; &nbsp; return gradegrades = [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]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go