簡體   English   中英

如何在Python 3中為每個for循環迭代將step變量加倍?

[英]How do I double my step variable for each for-loop iteration in Python 3?

我是Python的新手,我只是為了練習而使用遞歸函數。

我制作了以下算法,將數字取為x並將其減半直到等於1。nx減半的次數。

def binary(x, n = 0):
    print(n,":",x)
    x = x // 2
    n += 1
    if x > 0:
       binary(x, n)
       return x
    return x

我正在嘗試制作一個循環,該循環將調用帶有多個x值的binary()。 我希望我的步驟在每次迭代中加倍。 我讓它像下面的循環一樣工作。

i = 1
while i < 1000000000:
    print("when x is", i, ":")
    binary(i)
    i += i

但是由於某種原因,我似乎無法通過For循環實現相同的目的。 這就是我現在所擁有的。

for i in range(1,1000):
    print("when x is", i, ":")
    binary(i)
    i += i

在上面的代碼中, i += i似乎不影響標題中的i 我知道range()需要一個名為step的第三個參數,但是我已經嘗試過了:

for i in range(1,1000, i += i):
    # statements

這給我一個名稱錯誤,並說“我未定義”。 我大部分的編程經驗是使用JavaScript和C#。 使用這兩種語言,我都不會遇到任何麻煩。

如何使用Python 3在For循環中使用它?

range的第三個參數的確是步進。 但是您應該將其與以下計算值一起使用:

for i in range(1,1000,2):
    #statements

您的i += i無法工作的原因是,在后台,for循環在迭代結束時執行類似於i = next(...)的操作,從而覆蓋了您的最后一個增量。

編輯

您可以使用生成器來達到所需的效果,但是它會殺死“試圖避免while循環”的事情:

def myrange(start, stop):
    i = start
    while i < stop:
        yield i
        i += i

for i in myrange(1, 1000):
    print(i)

無論如何,while循環是完全有效的構造,在這種情況下,我會親自使用一個。 不要忘記,for循環在python中的語義與您習慣的兩種語言完全不同。 因此,如果您需要的只是while循環,則嘗試使用for循環是因為您可以使用javascript這樣做似乎是一個壞主意。

range可以逐步增加一個固定的數量,但不能變化。 使用while-loopi增加i

i += i

您可以用迭代器替換while-loop ,例如:

import itertools as IT
for i in (2**i for i in IT.count()):
    if i >= 1000000000: break
    print("when x is", i, ":")
    binary(i)

但是我認為這比簡單的while-loop沒有任何優勢。

如果您要做的只是將i加倍,那么為什么不將其提高呢?

for p in range(int(1000000000**0.5)):
    print(binary(2**p)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM