英国の宝くじ番号 (1 から 49 までの 7 つの数字) を生成する簡単なスクリプトがあります。私のコードには、リストに7つの乱数を生成し、重複した数字を削除するリストで設定を実行し、リストにまだ7つのメンバーがあるかどうかを確認し、そうでない場合は関数がそれ自体を呼び出して7つの新しい数字を生成する関数があります。
ただし、関数がそれ自体を呼び出すと、リストは返されません。
ここで私が間違っていることを知っていただければ幸いです。
from random import randint
def lotto():
l = []
for r in range(1,8):
l.append(randint(1,49))
print "DEBUG: l=", l
print "DEBUG: set(l)=", set(l), len(set(l))
if(len(set(l)) !=7):
lotto()
else:
print "Before return l, l = ", l
return l
def main():
numbers = lotto()
print numbers
正しく動作しないサンプル実行を次に示します。
DEBUG: l= [44, 32, 12, 12, 33, 16, 31]
DEBUG: set(l)= set([32, 33, 44, 12, 16, 31]) 6
DEBUG: l= [46, 20, 10, 24, 16, 35, 44]
DEBUG: set(l)= set([35, 10, 44, 46, 16, 20, 24]) 7
Before return l, l = [46, 20, 10, 24, 16, 35, 44]
None
そして、正しく動作するサンプル実行:
DEBUG: l= [20, 5, 21, 37, 10, 44, 38]
DEBUG: set(l)= set([37, 38, 10, 44, 20, 21, 5]) 7
Before return l, l = [20, 5, 21, 37, 10, 44, 38]
[20, 5, 21, 37, 10, 44, 38]