设计一个程序,从一个人名单中随机抽取人名,结果显示为五组,每组分为上下两部分,每部分是一个三人列表,每部分不能出现相同人名
时间: 2024-09-08 12:03:41 浏览: 43
设计一个这样的程序,你可以使用Python的random模块和一些数据结构来实现。首先,你需要创建一个包含所有人名的列表。以下是简单的步骤:
1. **准备数据**:
- 创建一个包含所有人的名字列表(例如 `all_names`)。
```python
all_names = ['Alice', 'Bob', 'Charlie', ..., 'Zoe'] # 这里省略实际的人名
```
2. **生成随机分组**:
- 分别创建五个空列表,用于存储五个小组的上下半部分,如 `groups`。
- 对于每个小组,先确定上半部分的三个随机索引,然后检查这三个人名是否已经在其他小组中出现过。如果不出现,则添加,直到满足条件。
```python
import random
groups = [[], [], [], [], []]
for _ in range(5):
while True:
top_half_indices = random.sample(range(len(all_names)), 3)
top_half = [all_names[i] for i in top_half_indices]
bottom_half_indices = [i for i in range(len(all_names)) if i not in top_half_indices]
random.shuffle(bottom_half_indices)
bottom_half = [all_names[i] for i in bottom_half_indices[:3]]
if len(set(top_half + bottom_half)) == 6: # 确保六个名字互不相同
groups[_].extend(top_half)
groups[_].extend(bottom_half)
break
```
3. **显示结果**:
- 输出每个小组。
```python
for group_id, (top, bottom) in enumerate(groups):
print(f"组{group_id+1} 上半部分: {top}")
print(f"组{group_id+1} 下半部分: {bottom}\n")
```
注意:这个过程可能会因为循环次数较多而需要较长时间,如果人名单很大,可以考虑优化算法,比如预先筛选出不符合条件的部分。
阅读全文