[求助]随机数多次选取问题

【问题描述】比如有10个人,第一次随机选取3个人买菜,其他7个人打杂;
第二次买过菜的3个人就不用买了,
从其他的7人里选3个去买菜,其他的7个人打杂;
再下次也是一样,总之上一次买过菜的就不用连续两次买
【目标描述】
最后要打印3个人的名单,安排一周7天的活(共7行,21个名字)。

怎么用python写出来啊。

我只会选取3个人出来,后面的百度来百度去还是没法弄清楚,麻烦大哥们帮下忙

import random
list = [1,2,3,4,5,6,7,8,9,10]
print(random.sample(list,3))

最佳答案

写了个最基础的,用循环实现的

import random

# 买菜人列表
people_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 第一天
i = 1
while i < 8:
    # 获取当天买菜的人
    shopping_list = random.sample(people_list, 3)
    # 打印当天买菜的人
    print(str(shopping_list))
    # 将当天买菜的人从明天买菜的人的里去除
    [people_list.remove(shopping) for shopping in shopping_list]
    # 第一天不存在恢复买菜的情况
    if i != 1:
        people_list.extend(shopping_list2)
    # 当满一周后退出
    if i == 7:
        break
    # 天数加一
    i += 1

    # 挑选明天买菜的人
    shopping_list2 = random.sample(people_list, 3)
    # 打印明天买菜的人
    print(str(shopping_list2))
    # 将明天买菜的人从后天买菜的人的里去除
    [people_list.remove(shopping) for shopping in shopping_list2]
    # 将昨天买菜的人添加进明天买菜的人的列表
    people_list.extend(shopping_list)
    # 天数加一
    i += 1
3周前 评论
讨论数量: 3

写了个最基础的,用循环实现的

import random

# 买菜人列表
people_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 第一天
i = 1
while i < 8:
    # 获取当天买菜的人
    shopping_list = random.sample(people_list, 3)
    # 打印当天买菜的人
    print(str(shopping_list))
    # 将当天买菜的人从明天买菜的人的里去除
    [people_list.remove(shopping) for shopping in shopping_list]
    # 第一天不存在恢复买菜的情况
    if i != 1:
        people_list.extend(shopping_list2)
    # 当满一周后退出
    if i == 7:
        break
    # 天数加一
    i += 1

    # 挑选明天买菜的人
    shopping_list2 = random.sample(people_list, 3)
    # 打印明天买菜的人
    print(str(shopping_list2))
    # 将明天买菜的人从后天买菜的人的里去除
    [people_list.remove(shopping) for shopping in shopping_list2]
    # 将昨天买菜的人添加进明天买菜的人的列表
    people_list.extend(shopping_list)
    # 天数加一
    i += 1
3周前 评论

实在太感谢了,完美地解决了我的问题!顺祝身体健康,阖家欢乐,收入多多,开心每一天!

3周前 评论
Jason990420

Try this,

from random import sample

full_selection = set(range(10))
selected = set()

for i in range(7):
    selection = full_selection - selected
    selected = set(sample(selection, 3))
    print(sorted(selected))
[4, 7, 8]
[0, 3, 9]
[2, 6, 8]
[0, 3, 5]
[7, 8, 9]
[1, 3, 4]
[5, 6, 8]
3周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!