如果条件不等于true

问题描述 投票:1回答:3

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

python
3个回答
0
投票

我认为类似的方法应该起作用

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

0
投票

简化您的方法

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]

0
投票

使用模% 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]
    
© www.soinside.com 2019 - 2024. All rights reserved.