Получение другого результата при использовании и без использования return () в Python 3 - PullRequest
0 голосов
/ 11 июня 2018

поэтому я занимался практическим вопросом на другом сайте, когда столкнулся с этой проблемой.Предполагается, что мне нужно округлить массив чисел до ближайшего числа, кратного 5.

Если число меньше 38, округление не произойдет.Если оно больше 38, проверьте, не меньше ли разница между grades[x] и ближайшим кратным 5 числом. Если true: округлено, иначе округления нет

Моя проблема здесь: если я введу 4, 73, 67, 38, 33, 38 не будут округлены, даже если предполагается, что они округлены.Однако, когда я уберу строку return(grades), она будет правильно округлена.Я не могу понять, почему.Кто-нибудь может помочь?

def gradingStudents(grades):
    for x in range(n):
        if grades[x] >= 38:
            if grades[x] % 5 >= 3:
                grades[x] = grades[x]+5-grades[x]%5
        return(grades)

f = open(os.environ['OUTPUT_PATH'], 'w')
n = int(input())

grades = []

for _ in range(n):
    grades_item = int(input())
    grades.append(grades_item)

result = gradingStudents(grades)

f.write('\n'.join(map(str, grades)))
f.write('\n')

f.close()

1 Ответ

0 голосов
/ 11 июня 2018

У вас есть return(grades) внутри цикла .Поэтому цикл не завершается и выходит из функции слишком рано.Переместите return из цикла:

def gradingStudents(grades):
    for x in range(n):
        if grades[x] >= 38:
            if grades[x] % 5 >= 3:
                grades[x] = grades[x]+5-grades[x]%5
    return(grades)

Если вы не хотите изменять входной аргумент, сделайте что-то вроде этого:

def gradingStudents(grades):
    return [x+5-x%5 for x in grades if x >= 38 and x%5 >= 3]
...