第3章 Python基础速通:变量与数据类型、条件判断、循环、函数定义、文件读写
各位同学,欢迎来到Python基础速通。说实话,很多风电工程师一听到「编程」两个字就头大。我当年也一样,觉得搞风机控制、搞SCADA数据采集才是正事。但后来我发现,不会Python,你连分析个振动数据都得求人。所以这一章,咱们把最核心的底子打牢。
本章核心目标:用最短的时间,掌握Python最常用的5个基础模块。学完你就能写一个简单的风电数据读取脚本。
3.1 变量与数据类型:给数据贴个标签
变量是什么?说白了就是给数据起个名字。你想想看,风机转速是1500转,你总不能每次都写「1500」吧?把它存到变量里,用起来就方便多了。
# 这是我做风电项目时最常用的几个变量类型
wind_speed = 12.5 # 风速,浮点数
rotor_speed = 1500 # 转速,整数
is_running = True # 运行状态,布尔值
turbine_name = "WTG-01" # 风机编号,字符串
我个人习惯,变量名一定要见名知意。别写什么 a、b、c,三个月后你自己都看不懂。
避坑指南:我曾经在项目里用 list 做变量名,结果把Python内置的列表函数给覆盖了。排查了半天才发现。记住:别用Python关键字和内置函数名做变量。
Python的数据类型主要有这么几种:
| 类型 | 示例 | 说明 |
|---|---|---|
| int | 1500 | 整数,比如转速 |
| float | 12.5 | 浮点数,比如风速 |
| str | "WTG-01" | 字符串,比如设备编号 |
| bool | True/False | 布尔值,比如是否运行 |
| list | [1, 2, 3] | 列表,比如一组风速数据 |
| dict | {"name": "WTG-01"} | 字典,比如设备参数 |
3.2 条件判断:让代码学会做决定
风机什么时候该偏航?什么时候该变桨?这些判断逻辑,在代码里就是条件判断。说白了就是:如果……就……否则……
wind_speed = 25 # 当前风速
if wind_speed > 25:
print("切出!风机停机保护")
elif wind_speed > 12:
print("满发状态,正常发电")
else:
print("低风速,待机中")
嗯,这里要注意:Python用缩进来表示代码块,别用Tab和空格混着用。我见过太多新人因为这个报错,一脸懵。
重要提醒:条件判断里,== 是判断相等,= 是赋值。写错一个,程序逻辑全乱。我曾经在调试偏航控制逻辑时,就因为这个bug,风机在原地转了一整圈。
3.3 循环:让重复的工作自动化
做风电数据分析,经常要处理成千上万条数据。手动处理?不存在的。循环就是干这个的。
Python有两种循环:for 和 while。我个人90%的场景用 for,因为它更直观。
# 遍历风速列表
wind_speeds = [12.5, 15.3, 8.7, 20.1, 5.6]
for speed in wind_speeds:
if speed > 25:
print(f"风速{speed}m/s,需要切出!")
else:
print(f"风速{speed}m/s,正常运行")
你想想看,如果不用循环,这5条数据你得写5遍。要是5000条呢?
我的经验:处理风电SCADA数据时,经常用 for 循环配合 enumerate(),既能拿到数据,又能拿到序号。比如:for i, speed in enumerate(wind_speeds):
3.4 函数定义:把逻辑装进盒子里
函数是什么?就是把一段逻辑封装起来,给它起个名字,想用的时候直接调用。说白了就是「一次定义,多次使用」。
def calculate_power(wind_speed, rotor_diameter):
"""
计算风机理论发电功率
:param wind_speed: 风速 (m/s)
:param rotor_diameter: 风轮直径 (m)
:return: 功率 (kW)
"""
import math
area = math.pi * (rotor_diameter / 2) ** 2
power = 0.5 * 1.225 * area * (wind_speed ** 3) * 0.4 # 0.4为风能利用系数
return power / 1000 # 转换为kW
# 调用函数
power = calculate_power(12.5, 100)
print(f"理论发电功率:{power:.2f} kW")
我建议每个函数只做一件事。别搞那种几百行的「万能函数」,调试起来能让你怀疑人生。
核心要点:函数定义用 def 关键字,参数可以设默认值,返回值用 return。写注释是个好习惯,尤其是给函数写docstring(就是函数名下面那个三引号注释)。
3.5 文件读写:和硬盘打交道
做风电系统,数据都在文件里。CSV文件、TXT文件、JSON文件……不会读写文件,等于白学。
# 读取风速数据文件
with open("wind_data.txt", "r", encoding="utf-8") as f:
data = f.readlines()
# 处理数据
wind_speeds = []
for line in data:
line = line.strip() # 去掉换行符
if line: # 跳过空行
wind_speeds.append(float(line))
print(f"共读取{len(wind_speeds)}条风速数据")
print(f"平均风速:{sum(wind_speeds)/len(wind_speeds):.2f} m/s")
# 写入结果
with open("result.txt", "w", encoding="utf-8") as f:
f.write(f"平均风速:{sum(wind_speeds)/len(wind_speeds):.2f} m/s\n")
这里有个关键点:with 语句。它会在文件用完后自动关闭,省得你忘了写 f.close()。我早期写代码就经常忘,导致文件句柄泄漏,程序跑着跑着就崩了。
避坑指南:文件路径别写死。我曾经把路径写成 C:\Users\我的电脑\data.txt,结果换台电脑就报错。用相对路径或者 os.path 模块来处理路径,才是正道。
知识体系总览
下面这张图,把本章的核心知识点串起来了。你可以把它当作一个速查地图。
好了,这一章的内容就这些。变量、条件、循环、函数、文件读写——这五个东西,你练熟了,风电数据分析的基本功就算打牢了。别贪多,把每个例子自己敲一遍,比看十遍都管用。