如何实现输入指定次数生成多组不同的1-45不重复随机6位数?
生成多组不同的乐透随机数问题
我已经写了一段Python代码用来生成1-45范围内的6个不重复随机数:
from random import * lotto = [] while True: m = randrange(1, 46) if m not in lotto: lotto.append(m) if len(lotto) == 6: break
现在我希望根据输入的数值生成对应组数的不同随机数组(比如输入2就生成两组不同的数组),但添加下面的代码后,打印出来的是同一组结果:
for i in range(int(input(""))): print(lotto)
请问该如何修改代码以生成多组不同的结果?
问题原因
你当前的代码只在程序启动时生成了一次lotto数组,后续循环只是重复打印这个已经生成好的数组,自然不会产生新的随机组。
修改方案
方案1:把生成逻辑放到循环内部
每次循环都重新初始化数组并生成新的随机数,确保每组都是独立生成的:
from random import randrange count = int(input("请输入组数:")) for _ in range(count): lotto = [] while len(lotto) < 6: m = randrange(1, 46) if m not in lotto: lotto.append(m) print(lotto)
方案2:封装成函数(更清晰易维护)
把生成单组号码的逻辑封装成独立函数,每次循环调用函数获取新的号码组:
from random import randrange def generate_lotto(): lotto = [] while len(lotto) < 6: m = randrange(1, 46) if m not in lotto: lotto.append(m) return lotto count = int(input("请输入组数:")) for _ in range(count): print(generate_lotto())
额外优化:用sample简化代码
Python的random模块自带sample函数,可以直接从序列中抽取指定数量的不重复元素,比手动写循环更简洁高效:
from random import sample count = int(input("请输入组数:")) for _ in range(count): # sorted用来让号码按从小到大排列,不需要的话可以去掉 print(sorted(sample(range(1, 46), 6)))
内容的提问来源于stack exchange,提问作者Sir
相关产品推荐
相关产品推荐

