2017-10-13 39 views
7

我想弄清楚如何計算一個特定的整數(作爲一個範圍)在兩個不同的數字,如2和3之間交替。因此,輸出將是2 5 7 10 12 15等Python 3 - 計數兩個不同的值

我開始試圖改變一個簡單而像下面的循環取兩個值:

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

,但它只是結束了由5

高達數到100我已經嘗試過數字範圍和循環和像itertools模塊來嘗試找出aw唉,要做到這一點,我完全難倒了。

我已經完成搜索搜索後,所有我能找到的是由一個單一的數字與循環和範圍。

+0

如果答案之一以下解決您的問題,您應該接受它(單擊複選標記旁邊合適的答案)。這有兩件事。它讓每個人都知道你的問題已經得到解決,讓你滿意,並且它可以幫助你幫助你。請參閱[此處](http://meta.stackexchange.com/a/5235)以獲取完整說明。如果你不能決定選擇哪一個,你應該選擇最能幫助你的答案,或者你最容易理解的答案,但最終取決於你自己決定。 –

+0

非常感謝大家。我非常感謝你們所有人的幫助。堆棧溢出很好。我仍然需要學習,這真是太神奇了。並感謝PM 2Ring讓我知道如何證明我的問題已經解決。 –

回答

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

使用循環的另一個方法 - 直接迭代它,並檢查該循環內是否有一個<100' –

+0

不夠公平。我想知道OP是否會理解我的答案。 ;) –

+0

非常感謝大家。我非常感謝你們所有人的幫助。堆棧溢出很好。我仍然需要學習,這真是太神奇了。 –

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

使用發電機是明智的方式,但對於OP來說可能有些過於先進。 –

+1

您的第一個解決方案需要在第二次添加之前進行檢查,否則可能會超出界限。 – schwobaseggl

+1

@ PM2Ring,schwolbaseggl:謝謝。更新:) –

0

如果我理解正確的話,這應該這樣做:

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=' ') 
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=' ') 
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 
+0

爲什麼要額外打印聲明? – toonarmycaptain

+1

@toonarmycaptain因爲我想在輸出結尾處換行。否則,我的終端提示不會從行的開頭開始。 –

+0

噢,好的。我所有的都做到了。 – toonarmycaptain

0

你可以這樣做或多或少你在做什麼,只是分裂的2加有三:

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=' ') 
2
import numpy as np 

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

非常感謝大家。我非常感謝你們所有人的幫助。堆棧溢出很好。我仍然需要學習,這真是太神奇了。 –

0

這種短表達作品:

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

(但我不能建議)