[英]Is the `in` part of the for-loop called on each iteration in Python?
[英]How do I double my step variable for each for-loop iteration in Python 3?
我是Python的新手,我只是為了練習而使用遞歸函數。
我制作了以下算法,將數字取為x並將其減半直到等於1。n是x減半的次數。
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-loop
將i
增加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.