请使用生成器函数完成一个抽奖程序,目前有四个人参加抽奖,每次点击空格键产生一名幸运儿,要求:被抽中者不能 重复。
时间: 2024-11-04 10:14:22 浏览: 13
当然可以。生成器函数是一种特殊的迭代器,它可以在需要的时候逐次生成值,而不是一次性生成所有结果。我们可以创建一个生成器函数来模拟这个过程。这里是一个简单的Python实现:
```python
import random
class Lottery:
def __init__(self):
self.participants = ['Person1', 'Person2', 'Person3', 'Person4']
self.drawn = []
def draw(self):
while True:
winner = random.choice(self.participants)
if winner not in self.drawn:
self.drawn.append(winner)
yield winner # 通过yield暂停并返回当前元素,直到下次请求下一个
self.participants.remove(winner) # 从参与者列表移除已经抽出的人
# 使用示例
lottery = Lottery()
while True:
input("按下空格键抽一次奖...")
try:
print(next(lottery))
except StopIteration:
break # 当所有参与者都被抽出时,停止迭代
```
在这个程序中,`Lottery` 类有一个 `draw` 生成器函数,每次循环都会随机选择一个未被抽出的参与者,并通过 `yield` 返回给调用者。当所有的参与者都已经被抽出后,调用 `next` 会抛出 `StopIteration` 异常,这时我们捕获异常并结束程序。
阅读全文