последовательность в питоне через for или while

1 2 3 5 6 8 11 12 13 15 16 18 и так до 40 то есть 3 цифры пишешь пропускает 1, 2 пишешь пропускает 1, 1 пишешь пропускает 2, и так по кругу до 40

и да я знаю что это для многих легко но я еще полный профан в программирование и многих команд еще не знаю( покрайней мере могу тут спросить


Ответы (2 шт):

Автор решения: Zhihar

когда не знаешь как делать - делай в лоб:

алгоритм:

мы помещаем в список последовательно по 3 числа, одно число пропускам, по 2 числа, одно число пропускам и т.д.

а затем выбираем из полученного списка только число не больше 40 (потому что в список могли попасть числа и больше)

res = []

pos = 0

while pos <= 40:
    for i in range(0, 3):
        pos += 1
        res.append(pos)

    pos += 1

    for i in range(0, 2):
        pos += 1
        res.append(pos)

    pos += 1

    for i in range(0, 1):
        pos += 1
        res.append(pos)

    pos += 2

print(*filter(lambda x: x <= 40, res))

тот же алгоритм, но слегка покороче

res = []

pos = 1

while pos <= 40:
    res += [(pos + i) for i in range(0, 3)]

    pos += 4

    res += [(pos + i) for i in range(0, 2)]

    pos += 3

    res += [(pos + i) for i in range(0, 1)]

    pos += 3

print(*filter(lambda x: x <= 40, res))

но честно говоря цикл while тут не нужен от слова совсем:

res = []

for pos in range(1, 40, 10):
    res += [0 + pos + i for i in range(0, 3)]
    res += [4 + pos + i for i in range(0, 2)]
    res += [7 + pos + i for i in range(0, 1)]

print(*filter(lambda x: x <= 40, res))
→ Ссылка
Автор решения: vp_arth

Всё просто, так как у вас есть период 10:

for i in range(40):
    if i % 10 in (4, 7, 9, 0):
        continue
    print(i, end=' ')
print()

Ну, или с list comprehensions:

res = [i for i in range(40) if i % 10 not in (4, 7, 9, 0)]
print(' '.join(map(str, res)))
→ Ссылка