使用多线程模拟10个人参加百米赛跑,最后把成绩按顺序打印出来
时间: 2024-12-16 16:31:23 浏览: 2
为了模拟10个人参加百米赛跑并按照成绩排序,我们可以创建一个简单的多线程程序,这里以Python的threading库为例:
首先,我们可以定义一个`Runner`类,它有姓名和初始速度两个属性,并有一个代表跑步过程的函数,如`run_race`。然后,我们创建一个线程列表`threads`,每个线程对应一个参赛者,他们的起始位置和速度不同。
```python
import threading
import random
class Runner(threading.Thread):
def __init__(self, name, initial_speed):
threading.Thread.__init__(self)
self.name = name
self.speed = initial_speed
self.distance_covered = 0
def run(self):
# 模拟随机干扰因素影响速度
interference_factor = random.uniform(0.9, 1.1)
adjusted_speed = self.speed * interference_factor
for _ in range(100): # 百米赛跑
if adjusted_speed > 0:
self.distance_covered += adjusted_speed
if self.distance_covered >= 100:
break
time.sleep(0.01) # 简化时间计算,实际应用可能需要更精确的时间间隔
print(f"{self.name} finished with a time of {self.distance_covered:.2f}")
# 创建10个参赛者
runners = [Runner(f"Person{i+1}", random.randint(8, 12)) for i in range(10)]
# 启动所有线程
for runner in runners:
runner.start()
# 等待所有线程完成
for runner in runners:
runner.join()
# 打印结果,此时会按照随机生成的速度排序,因为每个人跑完的时间取决于其速度和随机干扰
print("Results:")
runners.sort(key=lambda r: r.distance_covered)
for runner in runners:
print(runner.name, ":", runner.distance_covered)
```
在这个例子中,由于线程之间是并发执行的,所以最终的结果并不保证完全按照速度排序,而是按线程完成比赛的实际时间。如果你想得到稳定排序,你需要同步线程或者采用其他方式记录每个参赛者的初始速度和完成时间。
阅读全文