list.reverse () не дает правильного вывода - PullRequest
0 голосов
/ 06 сентября 2018

Вопрос: Напишите функцию, которая принимает два положительных целых числа a и b (a меньше, чем b) и возвращает список, который содержит все нечетные числа между a и b (включая a и включая b, если применимо) в порядке убывания.

Программа:

def odd(a,b):
    c=[]
    for i in range(a,b+1):
        if i%2==1:
            c.append(i)
            c.sort()
            c.reverse()
        return c

Разъяснение: Я получаю правильный вывод только тогда, когда использую c.sort , а затем меняю его. Но c.reverse должен дать правильный вывод, верно? Когда я «не сортирую» и не переворачиваю список, список вывода поступает в неправильном порядке, хотя элементы входят в список в отсортированном порядке. Может кто-нибудь объяснить мне, почему?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

другие указали на ваши ошибки. Я хотел бы предоставить более эффективное решение:

def odd(a,b):
    return list(range(b if b%2 else b-1,a-1,-2))

print(odd(1,10))
print(odd(1,11))

результат:

[9, 7, 5, 3, 1]
[11, 9, 7, 5, 3, 1]

он использует range с 2 шагами в обратном направлении и гарантирует, что он начинается с нечетного числа.

0 голосов
/ 06 сентября 2018

list.append() можно вызывать после цикла вместо каждой итерации цикла. Оператор возврата также должен находиться вне цикла.

def odd(a,b):
    c=[]
    for i in range(a,b+1):
        if i%2==1:
            c.append(i)
    c.reverse()
    return c

print(odd(1,10))

# Returns   [9, 7, 5, 3, 1]
...