Как мне изменить эту функцию, чтобы она печатала целые числа между 1 и ее параметром, используя определенный алгоритм? - PullRequest
1 голос
/ 25 июня 2019

Мне дали следующее упражнение:

Создать функцию «MyFunction» с 1 параметром, которая будет печатать целые числа между 1 и его параметром, используя определенный алгоритм:

MyFunction(25)
1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21, 25

MyFunction(29)
1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21, 25, 26, 27

Мне удалось создать функцию, которая печатает числа между 1 и ее параметром, но как мне изменить ее для печати этого конкретного алгоритма?

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

def my_function(n):
    for index in range(n):
        print (index + 1)

my_function(25)
my_function(29)

Мой код выводит целые числа между 1 и параметром, но я не знаю, как распечатать алгоритм.

Кроме того, примечание: как я могу использовать префиксатор кода для будущего использования?

Ответы [ 2 ]

2 голосов
/ 25 июня 2019

Примерно так должно получиться:

def my_function(n):
    i = 1
    while i <= n:
        print(i)
        if i % 3 == 0:
            i += 3
        i += 1

По сути, каждый раз, когда вы собирались перейти к непечатаемым целым числам, вы просто jump over переходите к следующему печатному. Как вы заметили, вы всегда хотите напечатать 3 числа, а не печатать следующие 3 элемента. Версия, которая делает это явным, может быть закодирована как:

def my_function(n):
    should_print = True
    i = 1
    while i <= n:
        if should_print:
            print(i)
        if i % 3 == 0:
            should_print = not should_print
        i += 1

Выражение i % 3 == 0 - это True каждая 3-я итерация, то есть именно тогда, когда мы переключаемся между режимами печати и печати

0 голосов
/ 25 июня 2019

Это альтернативное решение

def my_function(n):
   for i in range(1, n + 1):
       if 0 < i % 6 <= 3:
          print(i)

Другим менее лаконичным, но более эффективным решением является следующее, где в каждом цикле печатаются три числа:

def my_function(n):
    i = -3
    for i in range(3, n + 1, 6):
        print(i - 2, i - 1, i, sep='\n')

    if i + 5 == n:
        print(n - 1, n, sep='\n')
    elif i + 4 == n:
        print(n)
...