2017-03-14 17 views
8

Trong C++, tôi có thể dễ dàng viết một vòng lặp for như dưới đây mà đạt được mục đích nàyCó cách nào để tạo vòng lặp "for" trong python gấp đôi giá trị chỉ mục của tôi sau mỗi lần lặp không?

for(int i = 1; i < 100; i *= 2){} 

Có cách nào để thực hiện một vòng lặp for bằng Python làm điều tương tự? Hoặc là vòng lặp while cách duy nhất tôi có thể thực hiện việc này.

+2

Bạn đã thử những gì cho đến nay? –

+1

Bạn có thể sử dụng vòng lặp while. 'while i <100' và vòng lặp bên trong' i * = 2' –

+0

Đọc câu trả lời này để biết thêm chi tiết: http://stackoverflow.com/a/17944346/3042057 –

Trả lời

4

for vòng lặp không làm tăng thêm; thay vào đó họ lặp qua một lần lặp.

Bạn có thể tạo một hàm máy phát điện sản xuất chuỗi số của bạn như một iterable:

def powers_of_two(start, stop=None): 
    if stop is None: 
     start, stop = 1, start # start at 1, as 0 * 2 is still 0 
    i = start 
    while i < stop: 
     yield i 
     i *= 2 

for i in powers_of_two(129): 
    # ... 

Demo:

>>> for i in powers_of_two(129): 
...  print(i) 
... 
1 
2 
4 
8 
16 
32 
64 
128 
3

Một máy phát điện có thể được viết rằng, phần nào giống với C++ cho vòng lặp, có một biểu thức dưới dạng một hàm lambda để thao tác biến vòng lặp.

def func_range(func, start, stop=None): 
    start, stop = (0, start) if stop is None else (start, stop) 
    while start < stop: 
     yield start 
     start = func(start) 


for i in func_range(lambda x: x*2, 1, 100): 
    print(i) 
1

Sử dụng toán tử nguồn.

In [1]: [2**j for j in range(7)] 
Out[1]: [1, 2, 4, 8, 16, 32, 64] 
+0

Điều này không giới hạn sự tiến triển đến giới hạn trên; vòng lặp OP C 'for' chỉ liệt kê các số dưới 100. –

+0

Chỉ cần đọc và thay đổi nó. –

0

generator sẽ làm các thủ thuật

def doubler(n): 
    x = 1 
    while x < n: 
     yield x 
     x *= 2 


for i in doubler(100): 
    print(i) 
1

Một vòng xoay chút, nhưng hiện các trick:

>>> for i in itertools.takewhile(lambda t: t < 100, (2**x for x in itertools.count())): 
... print(i) 
... 
1 
2 
4 
8 
16 
32 
64 
0

Một C++ cho vòng lặp thực sự chỉ là một vòng lặp while trong ngụy trang.

for (int i = 1; i < 100; i *= 2) 
{ 
    // do stuff 
} 

tương đương với

int i = 1; 
while (i < 100) 
{ 
    // do stuff 
    i *= 2 
} 

Vì vậy, không nên cố gắng để trở nên thông minh. Chỉ cần sử dụng một vòng lặp while.

Các vấn đề liên quan