Python 3 - 使用两个不同的值进行计数

时间:2017-10-13 12:17:16

标签: python loops iteration

我试图弄清楚如何计算两个不同数字(如2和3)之间交替的某个整数(作为范围)。这样输出将是2 5 7 10 12 15等。

我开始尝试改变一个简单的while循环,如下所示,取两个值:

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

但它最终只计算到100乘以5.

我已经尝试了数字范围以及像itertools这样的循环和模块,试图找到一种方法来做到这一点,我完全被难倒了。

我在搜索之后执行了搜索,我所能找到的只是一个带有循环和范围的数字。

10 个答案:

答案 0 :(得分:11)

您可以将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生成器只会在你调用它的时候连续循环遍历元组。

答案 1 :(得分:6)

添加两个内容后,您需要打印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))))

答案 2 :(得分:2)

每次必须增加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=' ')

答案 3 :(得分:2)

只是为了好玩......

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let identifier: String
    if indexPath.item == 1 {
        identifier = trendingCellId

    } else if indexPath.item == 2 {
        identifier = subscriptionCellId
    } else {
        identifier = cellId
    }
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: identifier, for: indexPath)

            return cell
}

<强>输出

# 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()

答案 4 :(得分:2)

import numpy as np

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

答案 5 :(得分:0)

如果我理解正确,应该这样做:

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

您可以将这些值添加到列表中供以后使用,而不是打印。

答案 6 :(得分: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

答案 7 :(得分:0)

使用if语句,如下所示:

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

答案 8 :(得分: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=' ')

答案 9 :(得分:0)

这个简短的表达方式有效:

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

(但我不推荐)