为了账号安全,请及时绑定邮箱和手机立即绑定

有条件的不评估为真

有条件的不评估为真

Go
翻阅古今 2022-12-26 09:43:28
根据问题,如果成绩与下一个 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 条件不起作用,因为输出生成与输入相同的等级。
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

使用模%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]


查看完整回答
反对 回复 2022-12-26
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

我认为这样的事情应该有效


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))


查看完整回答
反对 回复 2022-12-26
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

简化您的方法


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]


查看完整回答
反对 回复 2022-12-26
  • 3 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号