You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现输入指定次数生成多组不同的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 13:24:29