- 0
- 0
- 约1.35万字
- 约 28页
- 2026-02-13 发布于四川
- 举报
2026年中小学信息技术教师(中学)实操考核试题及答案
一、算法与程序设计(20分)
【情境】
某校“智慧农场”社团需监测土壤湿度,当湿度连续5次低于30%时触发灌溉,灌溉时长为(50‐湿度值)×2秒。控制器为ESP32,数据通过MQTT上传至本地RabbitMQ,Web端实时折线图展示。
任务1.1编写Python脚本,模拟生成2026年4月1日0:00至4月3日23:59、间隔10分钟的湿度数据,要求:
(1)整体呈正弦波动,日均值35%,振幅±15%,叠加标准差3%的高斯噪声;
(2)将数据写入“humidity.csv”,字段:timestamp,humidity;
(3)在同一脚本内完成数据清洗,剔除明显异常值(|x‐μ|3σ),生成新文件“humidity_clean.csv”;
(4)绘制清洗前后对比折线图,保存为“compare.png”,dpi=300,图例中文。
任务1.2基于清洗后的数据,编写函数irrigation_plan(),返回一个列表,列表元素为字典,键包括“start”“duration”,表示每次灌溉的起始时间与持续秒数;规则:连续5点低于30%触发,灌溉时长计算如上;若两次灌溉间隔不足30分钟,合并为一次,时长累加。
任务1.3将任务1.2结果以JSON格式保存为“plan.json”,并进一步生成面向ESP32的Arduino代码文件“irrigation.ino”,实现:
①通过DHT11采集湿度(软模拟);
②每10分钟上报一次;
③收到MQTT下行指令“irrigate:XX”后,打开继电器XX秒;
④上报格式为{id:esp32_001,humidity:34,irrigation:0}。
评分细则:
数据生成符合波动规律4分;清洗算法正确3分;可视化清晰3分;irrigation_plan逻辑完整5分;Arduino代码语法正确、逻辑吻合5分。
参考答案与解析:
任务1.1关键代码(节选,完整脚本存为“D:\IT_2026\answer\t1_1.py”)
```python
importnumpyasnp,pandasaspd,matplotlib.pyplotasplt
np.random.seed(42)
times=pd.date_range(2026-04-0100:00,2026-04-0323:59,freq=10T)
h_base=35+15np.sin(2np.pinp.arange(len(times))/144)+np.random.normal(0,3,len(times))
df=pd.DataFrame({timestamp:times,humidity:h_base})
df.to_csv(humidity.csv,index=False,float_format=%.2f)
清洗
mean,std=df.humidity.mean(),df.humidity.std()
mask=(df.humidity=mean-3std)(df.humidity=mean+3std)
df_clean=df[mask].copy()
df_clean.to_csv(humidity_clean.csv,index=False)
绘图
plt.figure(figsize=(8,4))
plt.plot(df.timestamp,df.humidity,alpha=0.6,label=原始)
plt.plot(df_clean.timestamp,df_clean.humidity,label=清洗后)
plt.legend();plt.savefig(compare.png,dpi=300)
```
解析:正弦周期设为144个数据点(24h×6),振幅15%,高斯噪声3%,符合农业环境真实波动;3σ准则剔除突变噪声,保留趋势。
任务1.2关键逻辑
```python
defirrigation_plan():
df=pd.read_csv(humidity_clean.csv,parse_dates=[timestamp])
below=(df.humidity30).astype(int)
grp=(below!=below.shift()).cumsum()
plans,s,i=[],None,0
for_,gindf.groupby(grp):
if(g.humidity30).all()andlen(g)=5:
start=g.iloc[0].timestamp
duration=int((50-g.iloc[0].humidity
原创力文档

文档评论(0)