上一节,我们认识了人工智能、机器学习、神经网络和深度学习的区别。这一节先解决一个更基础的问题:

怎样把一段科研代码正确保存下来,让Python执行,并留下可以核查的运行记录?

这一步是后续所有学习的共同基础。催化剂性能预测需要找到正确的数据文件;界面模拟需要读取正确的参数;反应动力学计算需要使用确定的程序版本;反应器模型需要保存工况和结果。它们都从正确管理文件和运行程序开始。

本节不要求你独立编写变量、循环或函数。这些内容将按照目录,在后续课程逐步学习。


一、本节课的学习目标

完成本节后,你应当能够:

  1. 区分文件、文件夹、扩展名和路径。
  2. 区分文本编辑器、终端、PowerShell和Python解释器。
  3. 检查电脑中是否有可用的Python。
  4. 把代码保存为真正的 .py 文件。
  5. 从终端独立运行一个电催化科研脚本。
  6. 解释程序输出,并记录实际运行环境。

本节最终成果是:一份你亲自保存并运行的Python脚本,以及一份真实的运行记录。

二、先理解计算机怎样执行科研任务

可以把计算机类比为一个严格按照指令工作的实验助手。

它不会自动知道某个数字是电位还是电流,也不会自动判断你是否选错了实验文件。你需要明确告诉它:使用哪个程序、处理什么信息、按照什么步骤计算。

计算机中几个基本部分承担不同职责:

部分基本作用帮助理解的类比
处理器,CPU执行计算和指令实际进行操作的工作人员
内存,RAM暂时保存程序正在使用的信息正在使用的工作台
硬盘等存储设备保存代码、数据和结果文件实验档案柜
操作系统管理程序、文件和设备协调各项工作的管理系统

这里最需要理解的是内存与文件存储的区别。

你在屏幕上看到一个计算结果,不代表它已经保存为文件。程序关闭后,某些临时状态可能消失;正确保存到存储设备中的脚本和结果,才便于以后重新打开。

因此,科研计算不能只追求“这次运行出来了”,还要考虑“下次能否找到并重现”。

三、什么是文件、文件夹和扩展名?

文件是一份保存的信息。例如,一张实验数据表、一段Python代码、一张科研图片,都可以分别保存为文件。

文件夹用于组织文件,相当于把不同类别的实验记录分别放进不同档案夹。

扩展名是文件名末尾的类型标记。

例如:

Day02_first_run.py

其中,`Day02_first_run` 是文件名称的主体,`.py` 是扩展名,通常表示Python源代码文件。

本课程会接触以下文件类型:

扩展名常见用途
.pyPython代码
.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

如果使用记事本:

  1. 选择“另存为”。
  2. 文件类型选择“所有文件”。
  3. 文件名填写 Day02_my_first_run.py。
  4. 编码选择UTF-8。
  5. 保存后核对扩展名。

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 的文件,并不能自动证明它是最终有效版本;来源、内容、版本和处理记录才构成核查依据。

十五、课后练习与验收

基础练习

  1. 用自己的话区分编辑器、终端、PowerShell和Python解释器。
  2. 解释 .py 与 .py.txt 的区别。
  3. 解释绝对路径、相对路径和当前工作目录。
  4. 亲自保存并运行脚本,解释两个数值输出。

进阶练习

  1. 运行环境检查脚本,比较工作目录与脚本所在位置。
  2. 在副本中修改第一行输出文字,保存后重新运行,确认运行的是修改后的文件。
  3. 在副本中少写一个引号,观察报错,再修复。

科研思考

  1. 同组同学运行同名代码得到不同结果,你会先比较哪些信息?
  2. 把 \(0.000794328\ \mathrm{A/cm^2}\) 写成 \(0.794328\ \mathrm{mA/cm^2}\),是否意味着性能提高了1000倍?为什么?
  3. 本课文献数值能否直接代表所有条件下的Pt?还缺少哪些实验信息?

本节评分为:概念25分、数学20分、代码25分、科学解释20分、复现记录10分。

总分达到80分,并且能够亲自保存运行脚本、确认解释器和文件位置、解释单位与来源边界,才算通过本节验收。

下一节严格按照目录学习:变量、数值、字符串与物理单位。

Logo

更多推荐