"Python" da "for" loopini har bir iteratsiyadan keyin indeks qiymatini ikki barobarga oshirish uchun biron bir usul bormi?

C ++ da, ushbu maqsadga erishish uchun quyida keltirilgan osongina loopni yozishingiz mumkin

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

Python-da uchun döngüsü qilishning bir usuli bir xil narsa bormi? Yoki while esa buni amalga oshiradigan yagona usul.

7
Batafsilroq ma'lumot uchun ushbu javobni o'qing: stackoverflow.com/a/17944346/3042057
qo'shib qo'ydi muallif Emin Mastizada, manba
Siz loopdan foydalanishingiz mumkin. while i <100 va ichki kod i * = 2
qo'shib qo'ydi muallif Muhammad Haseeb Khan, manba

6 javoblar

for loops don't do any incrementing; they iterate over an iterable instead.

Raqamli ketma-ketlikni qaytaruvchi sifatida yaratadigan generator funktsiyasini yaratishingiz mumkin:

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):
    # ...

Namoyish:

>>> for i in powers_of_two(129):
...     print(i)
...
1
2
4
8
16
32
64
128
4
qo'shib qo'ydi

C ++ for loopiga o'xshash bir jenerani loop o'zgaruvchisini boshqarish uchun lambda funktsiyasi shaklida ifoda etadi.

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)
3
qo'shib qo'ydi

Bir oz aylana, lekin bu hiyla-nayrang:

>>> 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
1
qo'shib qo'ydi

Quvvat operatoridan foydalaning.

In [1]: [2**j for j in range(7)]
Out[1]: [1, 2, 4, 8, 16, 32, 64]
1
qo'shib qo'ydi
Bu jarayon yuqori chegaraga cheklanmaydi; uchun o'p faqat pastdagi sonlarni 100 ro'yxatda ko'rsatadi.
qo'shib qo'ydi muallif Martijn Pieters, manba
Buni o'qing va o'zgartiring.
qo'shib qo'ydi muallif Roland Smith, manba

generator will do the tricks

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


for i in doubler(100):
    print(i)
0
qo'shib qo'ydi

C ++ for loop - haqiqatan ham bir nechta koptokda.

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

uchun tengdir

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

Shunday qilib, aqlli bo'lishga intilmang. Faqatgina vaqt oralig'ini ishlating.

0
qo'shib qo'ydi
Python
Python
372 ishtirokchilar

Bu guruh python dasturlash tilini muhokama qilish uchun. Iltimos, o'zingizni hurmat qiling va faqat dasturlash bo'yicha yozing. Botlar mavzusini @botlarhaqida guruhida muhokama qling! FAQ: @PyFAQ Offtopic: @python_uz_offtopic

Python offtopic group !
Python offtopic group !
150 ishtirokchilar

@python_uz gruppasining offtop gruppasi. offtop bo'lsa ham reklama mumkin emas ) Boshqa dasturlash tiliga oid gruppalar @languages_programming