鱼C论坛

 找回密码
 立即注册
查看: 2680|回复: 7

[已解决]请教在调用随机模块如何能够让数据添加到多个列表至少大于N个数据

[复制链接]
发表于 2021-4-25 19:03:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. '''
  2. 8位老师,3个办公室,随机分配8位老师到3个办公室
  3. 1.需要有8位老师的数据
  4. 2.验证办公室数据

  5. 3.[color=Red]每个办公室最起码要一人 ##求思路这个地方该怎么写,谢谢指点[/color]
  6. '''
  7. import random
  8. teachers =['A','B','C','D','E','F','G','H'] #八位老师
  9. offices =[[],[],[]] #三间教室
  10. for teacher in teachers:    #先遍历老师的名字
  11.     num = random.randint(0,2)   #随机分配3间教室
  12.     offices[num].append(teacher)    #把老师随机添加到三间教室
  13. i = 1   #办公室的序号
  14. for office in offices:  #把每个办公室的老师遍历出来
  15.     print(f'办公室的人数是{len(office)},老师分别是:')
  16.     for tea in office:  #把每间办公室的名字打印出来
  17.         print(tea)
  18.     i += 1
复制代码


求助,如何实现第3步骤,就是保证分配到每个办公室的人数至少是一人
求助,如何实现第3步骤,就是保证分配到每个办公室的人数至少是一人
求助,如何实现第3步骤,就是保证分配到每个办公室的人数至少是一人
最佳答案
2021-4-26 15:48:43
  1. import random


  2. def group():  # 分组
  3.     offices = office1, office2, office3 = [], [], []
  4.     for i in range(1,9):
  5.         random.choice(offices).append(i)
  6.     return offices

  7. def check(offices):  # 验证
  8.     for each in offices:
  9.         print(len(each))
  10.         if len(each) == 0:
  11.             return True
  12.     return False

  13. while True:
  14.     offices = group()
  15.     if check(offices):
  16.         continue
  17.     else:
  18.         break
  19. print(offices)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-4-26 15:48:43 | 显示全部楼层    本楼为最佳答案   
  1. import random


  2. def group():  # 分组
  3.     offices = office1, office2, office3 = [], [], []
  4.     for i in range(1,9):
  5.         random.choice(offices).append(i)
  6.     return offices

  7. def check(offices):  # 验证
  8.     for each in offices:
  9.         print(len(each))
  10.         if len(each) == 0:
  11.             return True
  12.     return False

  13. while True:
  14.     offices = group()
  15.     if check(offices):
  16.         continue
  17.     else:
  18.         break
  19. print(offices)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-26 18:31:40 | 显示全部楼层
OMG。。审错题。。我以为要求所有可能的分配方案。。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-26 19:07:47 | 显示全部楼层
你可以将随机3个分别分配到3个房间,剩下5位老师再随机分配
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-27 19:11:39 | 显示全部楼层
qq1151985918 发表于 2021-4-26 19:07
你可以将随机3个分别分配到3个房间,剩下5位老师再随机分配

这这这还是有点难度啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-27 19:39:42 | 显示全部楼层
偏爱小仙女 发表于 2021-4-27 19:11
这这这还是有点难度啊

这有难度吗?很简单吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-27 19:49:19 | 显示全部楼层
偏爱小仙女 发表于 2021-4-27 19:11
这这这还是有点难度啊

  1. '''
  2. 8位老师,3个办公室,随机分配8位老师到3个办公室
  3. 1.需要有8位老师的数据
  4. 2.验证办公室数据

  5. 3.[color=Red]每个办公室最起码要一人 ##求思路这个地方该怎么写,谢谢指点[/color]
  6. '''
  7. import random
  8. teachers =['A','B','C','D','E','F','G','H'] #八位老师
  9. offices =[[],[],[]] #三间教室

  10. rand_teachers = random.sample(teachers,8) #将老师顺序随机打乱

  11. for office,teacher in zip(offices,rand_teachers[:3]):
  12.     office.append(teacher)
  13.     # 现将打乱顺序的前三名老师分别分配到三个房间,一间一人
  14.    
  15. for teacher in rand_teachers[3:]:    #先遍历老师的名字(后五位老师)
  16.     num = random.randint(0,2)   #随机分配3间教室
  17.     offices[num].append(teacher)

  18. i = 1   #办公室的序号
  19. for office in offices:  #把每个办公室的老师遍历出来
  20.     print(f'办公室的人数是{len(office)},老师分别是:')
  21.     for tea in office:  #把每间办公室的名字打印出来
  22.         print(tea)
  23.     i += 1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-28 01:26:15 | 显示全部楼层

大佬大佬,膜拜了,确实是好思路啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-24 16:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表