簡體   English   中英

循環數索引; 枚舉()

[英]Index of number of loops; enumerate()

我只是在完成我的 python 書中的練習,我正在努力完成。

一開始,我應該列出一個由 10 個數字和 5 個字母組成的列表。 隨機 select 4 個元素,打印中獎信息。

 from random import choice, branding numbers_and_letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', '1', '2', '3', '4', '5'] print("If you've got those 4 numbers or letters you've won,:!") for i in range(1, 5): print(choice(numbers_and_letters))

然后我想做一個循環來看看贏得我剛剛創建的那種彩票有多難。 我需要創建一個名為 my_ticket 的列表,然后編寫一個循環,不斷拉數字,直到票中獎。 打印一條消息,報告循環必須調整多少次才能獲得中獎票。

 from random import choice from itertools import count numbers_and_letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', '1', '2', '3', '4', '5'] winning_numbers = [] my_ticket = ['a','1', '5', 'j'] for i in count(): #infinite loop for i in range(1, 5): # four elements from the numbers_and_letters list i = choice(numbers_and_letters) winning_numbers.append(i) print(winning_numbers) if sorted(winning_numbers):= sorted(my_ticket). winning_numbers:clear() elif sorted(winning_numbers) == sorted(my_ticket): print('The numbers are identical') break

我唯一需要做的就是計算代碼通過循環集成了多少次。 我知道我需要使用 enumerate(),但是,我不確定如何將它應用到我的代碼中。

enumerate() function 獲取一個列表,並從列表中的所有元素中生成元組,例如[(0, elem1), (1, elem2), ...]

因此,您可以使用它來計算循環運行的次數,如下所示:

for index, i in enumerate(count()):   #infinite loop
    for i in range(1, 5):   # four elements from the numbers_and_letters list
        i = choice(numbers_and_letters)
        winning_numbers.append(i)
    print(winning_numbers)
    
    if sorted(winning_numbers) != sorted(my_ticket):
        winning_numbers.clear()
    elif sorted(winning_numbers) == sorted(my_ticket):
        print('The numbers are identical')
        print('It took %d runs!' % (index + 1))
        break

索引 + 1,因為索引從 0 開始。

您可以使用臨時計數器cnt來跟蹤循環從列表中提取元素的次數並將其與票證匹配 首先在循環外使用 0 對其進行初始化

然后每次循環運行時遞增cnt ,如果找到匹配print(cnt)然后再次將 cnt 設置為 0(inside if) 以進行下一次迭代

無需使用枚舉。 “計數”很好。

下面是對使其工作的代碼的輕微修改:

from random import choice
from itertools import count

numbers_and_letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
                       '1', '2', '3', '4', '5']
winning_numbers = []
my_ticket = ['a','1', '5', 'j']

def get_random_ticket():
    res = []
    for i in range(4):   # four elements from the numbers_and_letters list
        i = choice(numbers_and_letters)
        res.append(i)
    return res

winning_numbers = get_random_ticket()
print(winning_numbers)

for i in count():   #infinite loop
    if sorted(winning_numbers) == sorted(get_random_ticket()):
        print('The numbers are identical')
        print(i) 
        break

您已經在計算在count()上找到與循環匹配所需的迭代次數。 但是您稍后會用其他值覆蓋從該循環中獲得的值,因為您多次重復使用變量名i

嘗試為這三行中的變量使用不同的名稱,而不是重用i

for draw_count in count():
    for character_count in range(1, 5):
        character = choice(numbers_and_letters)

現在您可以稍后使用draw_count 您可能想要打印出draw_count + 1 ,因為itertools.count迭代器默認從零開始。

要計算代碼通過循環集成的次數,只需添加一個計數器。

from random import choice
from itertools import count

numbers_and_letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
                       '1', '2', '3', '4', '5']
winning_numbers = []
my_ticket = ['a','1', '5', 'j']

a = 0
for i in count():   #infinite loop
    for i in range(1, 5):   # four elements from the numbers_and_letters list
        i = choice(numbers_and_letters)
        winning_numbers.append(i)
    print(winning_numbers)
    a += 1
    if sorted(winning_numbers) != sorted(my_ticket):
        winning_numbers.clear()
    elif sorted(winning_numbers) == sorted(my_ticket):
        print('The numbers are identical')
        print(a)
        break    

這是 output(點表示有幾個打印的winning_numbers)-

......
......
......
......
['4', 'd', 'h', '3']
['h', 'd', 'h', 'j']
['5', 'd', '5', 'c']
['1', '5', 'j', 'a']
The numbers are identical
2852

暫無
暫無

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

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