Вопрос: Python 3 - подсчет с двумя разными значениями


Я пытаюсь выяснить, как подсчитать до определенного целого (в виде диапазона), чередующегося между двумя разными номерами, например 2 и 3. Таким образом, выход будет равен 2 5 7 10 12 15 и т. Д.

Я начал пытаться изменить простой цикл while следующим образом, чтобы взять два значения:

a = 0 
while a < 100: 
    a = a + 2 + 3
    print(a, end=' ')

Но это только заканчивается подсчетом до 100 на 5.

Я попробовал диапазоны номеров, а для циклов и модулей, таких как itertools, попытался выяснить способ сделать это, и я полностью в тупике.

Я выполнил поиск после поиска по этому вопросу, и все, что я могу найти, подсчитывается одним числом с циклами и диапазонами.


7


источник


Ответы:


Вы можете использовать itertools.cycle для этого

import itertools
a = 0
it = itertools.cycle((2,3))
while a < 100:
    a += next(it)
    print(a)

Вывод

2
5
7
10
...
95
97
100

itertools.cycle генератор будет просто непрерывно возвращать кортеж по кортежу столько раз, сколько вы его вызываете.


11



Вам нужно распечатать содержимое a после добавления двух и после добавления трех:

a = 0
while a < 100: 
    a = a + 2
    print(a, end=' ')
    if a < 100:
        a = a + 3
        print(a, end=' ')

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

def add_two_three(a):
    while True:
        a += 2
        yield a
        a += 3
        yield a

Затем вы можете распечатать содержимое генератора до 100 или более:

from itertools import takewhile

print(' '.join(takewhile(lambda x: x < 100,add_two_three(0))))

6



Вы должны увеличивать a с разным значением каждый раз (2 и 3). Вы можете просто поменять два значения, используемые для увеличения a на каждой итерации для достижения этого.

a = 0
inc1 = 2   # values being used to increment a
inc2 = 3
while a < 100:
    a = a + inc1
    inc1, inc2 = inc2, inc1    # swap the values
    print(a, end=' ')

2



Просто для удовольствия ...

# Count from zero to 100, alternating between i and j
i, j = 2, 3
k = i + j

a = 0 
while a < 100: 
    a += a % k and j or i
    print(a, end=' ')
print()

вывод

2 5 7 10 12 15 17 20 22 25 27 30 32 35 37 40 42 45 47 50 52 55 57 60 62 65 67 70 72 75 77 80 82 85 87 90 92 95 97 100 

2



import numpy as np

np.cumsum([2,3] * 20)

2



Если я правильно вас понимаю, это должно сделать это:

a = 0 
while a < 100: 
    a = a + 2
    print(a, end=' ')
    a = a + 3
    print(a, end=' ')

Вместо печати вы можете добавить эти значения в список для последующего использования.


0



def createRange(a,end,step1,step2):
    output=[]
    while a < end: 
        a += step1
        output.append(a)
        if a < end:
            a += step2
            output.append(a)
    return output

array = createRange(2,100,2,3)
print array

0



Используйте if заявление вроде этого:

a = 0
i = 0
while a < 100:
    if i % 2:
        a = a + 3
    else:
        a = a + 2
    i += 1
    print(a, end=' ')

0



Вы могли бы сделать больше или меньше того, что делаете, просто разделите дополнения 2 и 3:

a = 0 
while a < 100: 
    a = a + 2
    print(a, end=' ')
    if a > 97:  # you don't actually need this because of how the numbers 2/3 work
        break   # but this will check if a will be >100 after addition of the second number
    a = a +3
    print(a, end=' ')

0



Это короткое выражение работает:

for a in (x // 10 for x in range(0,1000,25)):
    print(a)

(но я не могу рекомендовать его)


0