乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快? 编写程序一: 输入格式:输入在一行中给出比赛时间T(分钟)。 输出格式:在一行中输出比赛的结果:乌龟赢输出@_@,兔子嬴输出^_^,平局则输出-_-;后跟1空格,再输出胜利者跑完的距离。 编写程序二: 使用Python扩展库numpy中的piecewise()函数实现分段函数模拟兔子的行走轨迹,然后使用matplotlib.pyplot模块中的plot( )函数绘制折线图表示兔子和乌龟的时间-位移图像。
时间: 2024-03-27 11:34:54 浏览: 20
程序一:
```python
T = int(input()) # 输入比赛时间T(单位:分钟)
turtle_distance = 3 * T # 乌龟跑的距离
rabbit_distance = 0 # 兔子跑的距离
rest_time = 0 # 兔子休息的时间
for i in range(T):
rabbit_distance += 9 # 兔子每分钟前进9米
if (i + 1) % 10 == 0: # 兔子每跑10分钟休息一次
if rabbit_distance > turtle_distance: # 如果兔子超过乌龟,则休息30分钟
rest_time += 30
else:
rest_time = 0 # 兔子没有超过乌龟,则不休息
else:
if rabbit_distance > turtle_distance: # 如果兔子超过乌龟,则休息30分钟
rest_time += 30
else:
rest_time = 0 # 兔子没有超过乌龟,则不休息
turtle_distance += 3 # 乌龟每分钟前进3米
if rabbit_distance > turtle_distance: # 判断兔子是否赢得比赛
print("^_^", end=" ")
print(rabbit_distance)
elif rabbit_distance == turtle_distance: # 判断是否平局
print("-_-")
else:
print("@_@", end=" ")
print(turtle_distance)
```
程序二:
```python
import numpy as np
import matplotlib.pyplot as plt
T = 60 # 比赛时间60分钟
time = np.arange(0, T + 1) # 时间轴
turtle_distance = 3 * time # 乌龟跑的距离
rabbit_distance = np.piecewise(time, [(t + 10) % 10 == 0 and t != 0 for t in time],
[lambda t: 0 if rabbit_distance <= turtle_distance else rabbit_distance + 0.5 * 30 * 9,
lambda t: rabbit_distance + 9]) # 兔子跑的距离
plt.plot(time, turtle_distance, label="turtle")
plt.plot(time, rabbit_distance, label="rabbit")
plt.legend()
plt.xlabel("time/min")
plt.ylabel("distance/m")
plt.show()
```
说明:程序二中使用了numpy中的piecewise()函数实现分段函数,当兔子跑了10分钟时,如果兔子超过乌龟,则休息30分钟,否则继续跑10分钟,即跑了9米;当兔子没有跑满10分钟时,兔子每分钟前进9米。函数最终返回兔子的跑步距离。然后使用matplotlib.pyplot模块中的plot()函数绘制折线图表示兔子和乌龟的时间-位移图像。