Python生成6个不重复随机数时重复问题及修正咨询
问题分析与修改方案
原代码的判断逻辑完全无效,因为make_lotto()、randrange(1,46)以及append里的randrange(1,46)是三个独立的随机数生成操作——你判断的是前两个随机数是否不等,但最终添加到列表里的是第三个全新的随机数,根本没检查这个要添加的数是否已经存在于lotto列表中,所以必然会出现重复。
下面提供两种可行的修改方案:
方案一:修复原循环逻辑
先固定生成一个随机数,再检查它是否未被加入列表,符合条件再添加:
from random import randrange def make_lotto(): return randrange(1, 46) lotto = [] while len(lotto) < 6: num = make_lotto() if num not in lotto: lotto.append(num) lotto.sort() print(lotto)
核心逻辑:每次生成一个固定的num,通过num not in lotto确保这个数还没在列表里,只有满足条件才添加,直到列表长度达到6。
方案二:使用内置方法简化实现
Python的random.sample()可以直接从序列中抽取指定数量的不重复随机元素,代码更简洁高效:
from random import sample lotto = sample(range(1, 46), 6) lotto.sort() print(lotto)
sample(range(1,46), 6)会直接从1到45的整数中随机挑选6个不重复的数,无需手动编写循环判断,从根源避免逻辑错误。
内容的提问来源于stack exchange,提问作者Sir
相关产品推荐
相关产品推荐

