Использование необязательных аргументов в функции для изменения диапазона Python 3 - PullRequest
0 голосов
/ 30 августа 2018

Мне нужно использовать необязательный аргумент, чтобы взять диапазон и обратить его вспять, используя функцию main для вызова функции, содержащей аргументы. Мой вывод должен иметь исходный диапазон, за которым следует тот же список в обратном порядке. Я не могу понять, как поставить разворот в качестве аргумента для получения нужного мне результата. Я просто получаю диапазон, напечатанный дважды в последовательном порядке. Я играл с этим часами, поэтому любая помощь будет принята с благодарностью. Сторнирование должно быть выполнено с помощью необязательного аргумента, переданного a_range, поэтому любые ответы, говорящие, что этого не делать, мне не помогут.

Сразу ниже показано, как я получаю диапазон в последовательном порядке:

def a_range(max, step):
  return list(range(0,max,step))

def main():
  result = a_range(55,2)
  print(result)

main()

Что дает мне вывод (извините, если форматирование неверно):

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 
40, 42, 44, 46, 48, 50, 52, 54]

Когда я пытаюсь добавить третий аргумент, который переворачивает тот же список:

def a_range(max, step, opt_arg = list(range(0,55,2))[::-1]):
    return list(range(0,max,step))
    return list(range(0,max,step,opt_arg)


def main():
    result = a_range(55,2)
    opt_arg = list(range(0,55,2))[::-1]
    print(result)
    other_result = a_range(55,2,opt_arg)
    print(other_result)


main()

Я получаю вывод:

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 
40, 42, 44, 46, 48, 50, 52, 54]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,  
42, 44, 46, 48, 50, 52, 54]

Это именно то, как мне нужно, чтобы вывод выводился на печать, но 2-й повтор должен быть обратным.

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

В вашем коде есть несколько ошибок, главная из которых заключается в том, что вашим необязательным аргументом должен быть логический флаг.

Вот как вы могли бы это реализовать.

def prange(start, stop, step=1, reverse=False):
    fst = list(range(start, stop, step))
    if reverse:
        return (fst, list(reversed(fst)))
    else:
        return (fst,)

print(*prange(3, 6, reverse=True))

выход

[3, 4, 5] [5, 4, 3]
0 голосов
/ 30 августа 2018

После return выхода из функции дополнительные возвраты ничего не делают.

Вы можете добавить списки перед возвратом:

def a_range(maxx, step, reverse = False):
    k = list(range(0,maxx,step))
    return k+k[::-1] if reverse else k


print(a_range(10,2))

print(a_range(10,2,True))

Последний элемент k встречается дважды, если для reverse установлено значение True:

[0, 2, 4, 6, 8]
[0, 2, 4, 6, 8, 8, 6, 4, 2, 0]
...