簡體   English   中英

為什么我的 while 循環有時會卡住,但有時不會在我的“秘密聖誕老人”程序中?

[英]Why does my while loop gets stuck sometimes,but sometimes not in my "secret santa" program?

我正在嘗試創建基本的秘密聖誕老人功能,您可以在其中將名稱列表傳遞給它,它會自動生成隨機可能性,但有時循環會卡住,這是我無法理解的奇怪部分。

def santa(listi):
    from random import shuffle,choice
    my_dict = {}
    shuffle(listi)
    while len(my_dict) != len(listi):
        person = choice(listi)
        person2= choice(listi)
        if person!= person2 and person2 not in my_dict.values() and person not in my_dict.keys():
            my_dict.update({person:person2})
        else:
            continue
    return my_dict

因此,有時會發生這樣的情況:一個人(例如下面的“Y”人)是禮物的接受者和給予者:

<class 'list'>: ['X', 'W', 'Y', 'Z']
<class 'dict'>: {'X': 'W', 'Z': 'X', 'W': 'Z'}

在遇到這種情況之前,我在 PyCharm 調試器中多次運行了您的代碼。 您的 while 循環條件是:

while len(my_dict) != len(listi):

正如您所看到的,這將永遠不會發生,因為您的代碼現在被鎖定,因為 if 條件person != person2永遠不會被傳遞。

您應該再次查看您的 if 條件,如果您無法弄清楚,請在評論中提及我,我會幫助您。 一個好主意是檢查剩下的可能組合,如果僅滿足上述條件,即 Y 是接收者和給予者,則丟棄列表並繼續。 這將保證您將始終退出,但絕不是最佳選擇。

暫無
暫無

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

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