【人工智能驱动的电催化研究-02】计算机、文件、终端与Python运行环境
上一节,我们认识了人工智能、机器学习、神经网络和深度学习的区别。这一节先解决一个更基础的问题:
怎样把一段科研代码正确保存下来,让Python执行,并留下可以核查的运行记录?
这一步是后续所有学习的共同基础。催化剂性能预测需要找到正确的数据文件;界面模拟需要读取正确的参数;反应动力学计算需要使用确定的程序版本;反应器模型需要保存工况和结果。它们都从正确管理文件和运行程序开始。
本节不要求你独立编写变量、循环或函数。这些内容将按照目录,在后续课程逐步学习。
一、本节课的学习目标
完成本节后,你应当能够:
- 区分文件、文件夹、扩展名和路径。
- 区分文本编辑器、终端、PowerShell和Python解释器。
- 检查电脑中是否有可用的Python。
- 把代码保存为真正的
.py文件。 - 从终端独立运行一个电催化科研脚本。
- 解释程序输出,并记录实际运行环境。
本节最终成果是:一份你亲自保存并运行的Python脚本,以及一份真实的运行记录。
二、先理解计算机怎样执行科研任务
可以把计算机类比为一个严格按照指令工作的实验助手。
它不会自动知道某个数字是电位还是电流,也不会自动判断你是否选错了实验文件。你需要明确告诉它:使用哪个程序、处理什么信息、按照什么步骤计算。
计算机中几个基本部分承担不同职责:
| 部分 | 基本作用 | 帮助理解的类比 |
|---|---|---|
| 处理器,CPU | 执行计算和指令 | 实际进行操作的工作人员 |
| 内存,RAM | 暂时保存程序正在使用的信息 | 正在使用的工作台 |
| 硬盘等存储设备 | 保存代码、数据和结果文件 | 实验档案柜 |
| 操作系统 | 管理程序、文件和设备 | 协调各项工作的管理系统 |
这里最需要理解的是内存与文件存储的区别。
你在屏幕上看到一个计算结果,不代表它已经保存为文件。程序关闭后,某些临时状态可能消失;正确保存到存储设备中的脚本和结果,才便于以后重新打开。
因此,科研计算不能只追求“这次运行出来了”,还要考虑“下次能否找到并重现”。
三、什么是文件、文件夹和扩展名?
文件是一份保存的信息。例如,一张实验数据表、一段Python代码、一张科研图片,都可以分别保存为文件。
文件夹用于组织文件,相当于把不同类别的实验记录分别放进不同档案夹。
扩展名是文件名末尾的类型标记。
例如:
Day02_first_run.py
其中,`Day02_first_run` 是文件名称的主体,`.py` 是扩展名,通常表示Python源代码文件。
本课程会接触以下文件类型:
| 扩展名 | 常见用途 |
|---|---|
.py | Python代码 |
.csv | 以逗号分隔的文本数据表 |
.txt | 纯文本记录 |
.md | 课程讲义、说明文档 |
.svg | 可缩放的矢量图 |
.png | 图片 |
需要注意:修改扩展名不等于转换文件内容。
把一张图片改名为 experiment.csv,并不会得到可以分析的实验数据表。
Windows有时会隐藏已知文件类型的扩展名。你以为保存的是:
Day02_first_run.py
实际可能保存成:
Day02_first_run.py.txt
因此,请在文件资源管理器中开启“文件扩展名”的显示,并核对完整文件名。不同Windows版本的菜单位置可能略有不同。
四、路径:计算机怎样找到一个文件?
假设实验室档案中有许多文件夹,只说“打开实验数据”是不够的,还需要说明具体位置。
计算机用路径描述文件的位置。
例如:
C:\Research\AI_Electrocatalysis\Day02\code\Day02_first_run.py
可以从左到右理解:
C::所在磁盘。Research:该磁盘下的文件夹。- 后面的名称:逐层进入的子文件夹。
Day02_first_run.py:最终要找到的文件。
这种明确给出完整位置的路径叫作绝对路径。
另一种是相对路径:
.\code\Day02_first_run.py
其中,`.` 表示当前目录。它的意思是:从当前位置进入 code 文件夹,再找到脚本。
相对路径能否找到文件,取决于你当前在哪里。
这里需要区分两个位置:
脚本所在目录:`.py` 文件实际保存的位置。
当前工作目录:终端或程序此刻解析相对路径时使用的位置。
它们可以不同。
例如,你可以站在项目根目录,运行保存在下层文件夹中的脚本。以后出现“找不到数据文件”时,这种位置差异将是重要排查线索。
本课文件已经按以下结构保存:
项目根目录
└─ 01_课程
└─ Day02
├─ Day02_学生讲义.md
├─ code
│ ├─ Day02_first_run.py
│ └─ Day02_environment_check.py
├─ figures
└─ outputs
这是本项目的组织约定,不是Python强制要求所有项目采用的结构。
五、编辑器、终端、PowerShell和Python解释器有什么区别?
这几个名称容易混淆,但它们承担的职责不同。
文本编辑器用于输入、修改和保存代码。例如,记事本就可以保存本节的简单脚本。
终端是输入命令、查看输出的界面。
PowerShell负责理解和执行一类系统命令。在Windows终端中,你可以通过它切换文件夹、查看文件、启动Python。
Python解释器是执行Python代码的程序。
整个过程可以理解为:

初学时,首先要看自己正处于哪种输入环境。
如果看到类似:
PS C:\Research>
通常是在PowerShell中,可以输入系统命令。
如果看到:
>>>
则处于Python交互模式,应输入Python代码。
例如:
print("Hello")
print的作用是把内容显示出来。
不要把PowerShell命令输入到 >>> 后面,也不要把提示符 PS 或 >>> 当成代码一起复制。
如果已经进入Python交互模式,希望回到PowerShell,可以输入:
exit()
交互模式适合临时试算;把代码保存在脚本中再执行,更便于重复运行和检查。Python官方文档介绍了这两种使用方式。
六、先检查已有Python,再决定是否安装
在PowerShell中输入:
python --version
如果输出类似:
Python 3.11.15
说明这个命令找到了一个能够运行的解释器。
但是,如果命令失败,并不能立即断定电脑完全没有Python。可能已经有解释器,只是短命令没有找到它。
这涉及一个名称:PATH。
你可以先把PATH理解为系统寻找程序时使用的一组目录。输入 python 时,系统会根据当前环境寻找对应程序。
因此,“输入的命令相同”不一定意味着“不同电脑运行的是同一个解释器”。
本机已经找到可用的Python。可以在PowerShell中使用完整路径检查:
& 'C:\Users\Admin\AppData\Roaming\uv\python\cpython-3.11-windows-x86_64-none\python.exe' --version
维护者实际得到:
Python 3.11.15
这条命令中:
&:PowerShell的调用运算符。- 引号中的路径:明确指定要执行的程序。
--version:要求程序显示版本。
这是一条PowerShell命令,不是Python代码。
上述路径只适用于当前电脑,换电脑不能原样照抄。
如果另一台电脑确实没有可用Python,应从Python官方网站获取,并按对应安装方式操作。官方Windows指南也建议先核查已有工具是否提供Python。Windows使用指南
本课使用现有环境即可,不需要同时安装多个Python发行版或额外的软件。
七、先学会三个文件操作命令
在PowerShell中输入:
Get-Location
它显示当前所在的位置。
再输入:
Get-ChildItem
它列出当前目录中的文件和文件夹。
切换到本项目根目录,使用:
Set-Location -LiteralPath 'C:\Users\Admin\Documents\ChatGPT\人工智能与神经网络驱动的电催化研究——从零基础到科学机器学习及工程应用'
整行复制,并保留引号。
其中,`Set-Location`表示切换位置,`-LiteralPath`表示按给出的实际路径处理。
执行后,再输入:
Get-ChildItem
应看到 00_管理、`01_课程` 等项目目录。
这几个操作只是查看和切换文件位置,没有训练模型,也没有修改实验数据。
八、第一个科研任务:读取一个文献数值,并检查单位
本课沿用第一节使用的真实文献:
Nørskov等,Trends in the Exchange Current for Hydrogen Evolution,发表于 Journal of The Electrochemical Society,2005年。论文DOI
在其Table I中,Ref.9对应的Pt记录为:
\[ \log_{10}\left[\frac{j_0}{1\ \mathrm{A/cm^2}}\right]=-3.1 \]
其中,\(j_0\) 是交换电流密度,是描述电极反应平衡附近动力学性质的量。它不等于平衡时的净电流。
今天的任务只是把这个数值转换成不同单位,熟悉脚本运行。
需要明确:
- 文献事实:原表给出了这条对数记录。
- 教学操作:我们用Python完成数值与单位转换。
- 结论边界:这不是新实验,也没有训练AI模型;不能据此断言Pt在所有条件下都具有同一交换电流密度。
先手算。
根据对数定义:
\[ j_0=10^{-3.1}\ \mathrm{A/cm^2} \]
因此:
\[ j_0\approx0.000794328\ \mathrm{A/cm^2} \]
因为:
\[ 1\ \mathrm{A}=1000\ \mathrm{mA} \]
所以:
\[ j_0\approx0.794328\ \mathrm{mA/cm^2} \]
负的是对数,转换得到的交换电流密度仍为正。
再检查数量级:因为 \(-3.1<-3\),所以结果应小于:
\[ 10^{-3}\ \mathrm{A/cm^2}=1\ \mathrm{mA/cm^2} \]
我们得到约 \(0.794\ \mathrm{mA/cm^2}\),符合这个检查。
单位转换改变了数值的表达方式,没有改变材料性能。
九、把代码保存成真正的Python脚本
打开纯文本编辑器,输入下面全部内容:
# A small, source-traceable electrocatalysis script. No model is trained.
print("Day 02: My first electrocatalysis Python script")
print("Source: Norskov et al. (2005), DOI 10.1149/1.1856988, Table I, Ref. 9")
print("Material: Pt")
print("Reported log10[j0 / (A cm^-2)]: -3.1")
print("j0 in A/cm^2:", round(10 ** (-3.1), 9))
print("j0 in mA/cm^2:", round(10 ** (-3.1) * 1000, 6))
print("Sanity check: 1 A/cm^2 equals 1000 mA/cm^2")
print("Completed: reading one published value and checking its units, not AI training")
这段代码已经作为基准文件保存在课程目录中。亲自练习时,可以另存为:
Day02_my_first_run.py
保存到:
01_课程\Day02\code
如果使用记事本:
- 选择“另存为”。
- 文件类型选择“所有文件”。
- 文件名填写
Day02_my_first_run.py。 - 编码选择UTF-8。
- 保存后核对扩展名。
UTF-8是一种文字编码,用于规定文字怎样保存和读取。
代码使用英文半角引号和括号,不要替换成中文引号。Word等文字处理器会加入排版信息,不适合用来保存本课源码。
十、逐行理解代码,而不是只复制
第一行:
# A small, source-traceable electrocatalysis script. No model is trained.
以 # 开头,叫作注释,用于给阅读代码的人说明情况,不参与计算。
接下来的几行:
print("Material: Pt")
表示显示引号中的文字。
双引号内的内容会作为文字处理。这里把数字写在引号内,只会显示它,不会自动完成数学运算。
计算出现在:
print("j0 in A/cm^2:", round(10 ** (-3.1), 9))
其中:
**表示乘方。10 ** (-3.1)表示 \(10^{-3.1}\)。round(..., 9)表示把计算结果舍入到小数点后9位。print中的逗号把说明文字与计算结果分开。
下一行:
print("j0 in mA/cm^2:", round(10 ** (-3.1) * 1000, 6))
其中,`*`表示乘法;乘以1000完成A到mA的转换。
这里显示6位小数,是程序的显示选择,不表示原始实验具有6位小数的测量精度。
print和`round`都是现成的函数。现在把函数理解为“接受信息并完成指定任务的工具”即可,独立编写函数安排在第六节。
十一、从PowerShell运行脚本
确认当前工作目录是项目根目录,然后执行:
& 'C:\Users\Admin\AppData\Roaming\uv\python\cpython-3.11-windows-x86_64-none\python.exe' '.\01_课程\Day02\code\Day02_first_run.py'
如果运行的是你自己保存的副本,把末尾文件名改为:
Day02_my_first_run.py
这条命令可以拆成两部分:
要使用哪个Python解释器 要运行哪个脚本文件
解释器用绝对路径指定,脚本用相对于项目根目录的路径指定。
本课基准脚本已经实际运行,输出如下:
Day 02: My first electrocatalysis Python script
Source: Norskov et al. (2005), DOI 10.1149/1.1856988, Table I, Ref. 9
Material: Pt
Reported log10[j0 / (A cm^-2)]: -3.1
j0 in A/cm^2: 0.000794328
j0 in mA/cm^2: 0.794328
Sanity check: 1 A/cm^2 equals 1000 mA/cm^2
Completed: reading one published value and checking its units, not AI training
现在检查三件事:
第一,输出中的来源是否正确。
第二,计算值是否与手算一致。
第三,两个数值是否对应同一个物理量的不同单位。
只有这些都能解释清楚,才不只是“运行过代码”。
十二、确认实际使用的解释器和文件位置
项目另提供了一份环境检查脚本,完整内容如下:
import sys
import platform
from pathlib import Path
print("Python version:", platform.python_version())
print("Interpreter:", sys.executable)
print("Operating system:", platform.system())
print("Working directory:", Path.cwd())
print("Script file:", Path(__file__).resolve())
print("Environment check completed")
这里的 import表示使用Python现有的工具模块。
今天只需理解输出用途:
| 输出 | 用来确认什么? |
|---|---|
| Python version | 实际运行版本 |
| Interpreter | 实际解释器的位置 |
| Operating system | 操作系统 |
| Working directory | 当前工作目录 |
| Script file | 当前脚本完整位置 |
运行时,把上一条命令末尾的文件名改为:
Day02_environment_check.py
你很可能看到:工作目录是项目根目录,而脚本位于 Day02\code 中。
这是正常情况,正好说明当前工作目录不必等于脚本所在目录。
本课代码只使用Python标准库,即Python自带的工具,不需要安装第三方包。
以后不同项目需要不同依赖时,我们会使用虚拟环境进行隔离。它主要帮助管理项目的Python包,不是另一台虚拟电脑,也不能代替数据备份。今天先理解用途即可。
十三、报错时,先判断错误发生在哪一层
程序报错提供了定位线索。不要一遇到错误就重新安装Python。
| 现象 | 优先检查 |
|---|---|
python命令不可用 | 是否找到正确解释器 |
can't open file | 脚本路径、工作目录、文件名 |
SyntaxError | 引号、括号、符号等语法 |
| 修改代码后输出不变 | 是否保存,是否运行了另一个同名文件 |
在 >>> 中输入系统命令报错 | 是否处于错误的输入环境 |
| 文件看似正确却无法运行 | 是否实际为 .py.txt |
例如,下面的代码缺少结束引号:
print("Material: Pt)
解释器不能正确识别文字在哪里结束,因此会报语法错误。
你可以在副本中制造这个错误,观察提示,然后恢复。这样能逐渐学会读懂报错,而不是害怕报错。
排查时保存完整错误文字,不要只记录“运行不了”。
十四、为什么运行记录属于科研工作?
假设两个人运行同名脚本,得到不同结果。仅核对文件名是不够的。
还需要比较:
- 实际脚本内容是否相同。
- 输入数据及版本是否相同。
- 使用的Python解释器和依赖是否相同。
- 执行命令及工作目录是否相同。
- 是否使用了不同参数或处理步骤。
因此,本课要求保存下面这份记录:
学习日期:
操作系统:
Python版本:
解释器完整路径:
工作目录:
脚本完整路径:
实际执行命令:
实际输出:
数据或数值来源:
手算核对:
遇到的错误及解决方式:
尚未理解的问题:
这项习惯将贯穿四条科研主线。一个名叫 final 的文件,并不能自动证明它是最终有效版本;来源、内容、版本和处理记录才构成核查依据。
十五、课后练习与验收
基础练习
- 用自己的话区分编辑器、终端、PowerShell和Python解释器。
- 解释
.py与.py.txt的区别。 - 解释绝对路径、相对路径和当前工作目录。
- 亲自保存并运行脚本,解释两个数值输出。
进阶练习
- 运行环境检查脚本,比较工作目录与脚本所在位置。
- 在副本中修改第一行输出文字,保存后重新运行,确认运行的是修改后的文件。
- 在副本中少写一个引号,观察报错,再修复。
科研思考
- 同组同学运行同名代码得到不同结果,你会先比较哪些信息?
- 把 \(0.000794328\ \mathrm{A/cm^2}\) 写成 \(0.794328\ \mathrm{mA/cm^2}\),是否意味着性能提高了1000倍?为什么?
- 本课文献数值能否直接代表所有条件下的Pt?还缺少哪些实验信息?
本节评分为:概念25分、数学20分、代码25分、科学解释20分、复现记录10分。
总分达到80分,并且能够亲自保存运行脚本、确认解释器和文件位置、解释单位与来源边界,才算通过本节验收。
下一节严格按照目录学习:变量、数值、字符串与物理单位。
更多推荐


所有评论(0)