AI 学院 · Python 入门线 · 节点 ① / ⑨

Python 基础语法

手把手教程:从「没装过 Python」到「能独立写出猜数字游戏」。约 6–8 个番茄;学完请完成最后的自测清单,并把代码保存到自己的学习仓库。若你还不熟悉终端、Git 或文件管理,先完成 AI 开发者地基 的 0.1–0.3。

状态 进行中 前置 下一步 ② 数据结构与字符串

第 0 步 · 环境准备(三选一,5 分钟)

不用纠结,选 1 就行。三种方式都能完成本教程全部练习:

验证是否成功:输入 print("hello") 回车,看到 hello 输出即成功。
安全起点:在线 IDE、聊天窗口和公开仓库都不应粘贴 API 密钥、密码、身份证明或真实客户数据。练习先使用虚构数据;密钥只放入本地环境变量或专门的密钥管理工具。

第 1 步 · 第一个程序

新建文件 hello.py,敲入:

print("你好,Python")

运行后输出:

你好,Python

逐词拆解(这一行就是一个完整程序)

动手:把下面两行放进文件运行

print("3 + 5 =", 3 + 5)
print("程序跑完了")
3 + 5 = 8 程序跑完了
注意:3 + 5 没有引号——它是计算;有引号是文本"3+5" 会原样打印,不计算。

第 2 步 · 变量与类型

变量 = 给数据起个名字,以后用名字访问它。Python 里不需要声明类型,但每个值都有类型。

name = "Riemann"      # 字符串 str:文本
age  = 30              # 整数 int
height = 1.75          # 浮点数 float:小数
is_studying = True   # 布尔 bool:只有 True/False

print(name, age, height, is_studying)

必做小实验:查看类型

print(type(age))       # → <class 'int'>
print(type(name))      # → <class 'str'>
print(type("30"))     # → <class 'str'>(带引号就是文本!)
核心心智模型:「变量是标签,不是盒子」。把 a = 1 改成 a = 2,不是"把 1 改成 2",而是"把标签 a 从 1 上撕下来贴到 2 上"。学列表时这个理解能救命。

命名规则

第 3 步 · 运算

算术运算符

a, b = 17, 5
print(a + b)    # 22 加
print(a - b)    # 12 减
print(a * b)    # 85 乘
print(a / b)    # 3.4 除(永远是浮点数)
print(a // b)   # 3  整除(商,丢掉小数)
print(a % b)    # 2  取余(除不尽的零头)
print(a ** 2)   # 289 幂
//% 是一对:17 = 5 × 3 + 2。判断奇偶、取末位、分钟转小时全用它们。

比较运算符(结果永远是 True/False)

print(17 > 5)    # True
print(17 == 5)   # False(== 是"相等",= 是"赋值",别混!)
print(17 != 5)   # True

逻辑运算符

score = 85
print(score > 60 and score < 90)   # True 两个都成立
print(score < 60 or score > 80)    # True 至少一个成立
print(not score == 100)          # True 取反
字符串拼接 vs 数字相加"3" + "5" 结果是 "35"(拼接),不是 8。类型不匹配时 Python 报错。

第 4 步 · 控制流

4.1 分支:if / elif / else

score = int(input("输入成绩:"))   # input 拿到的是文本,int() 转成数字
if score >= 90:
    print("优秀")
elif score >= 60:
    print("及格")
else:
    print("不及格")
缩进就是语法!Python 用"缩进 4 个空格"表示代码块。if 行末尾有冒号 :,忘了缩进或冒号会报 IndentationError / SyntaxError——新手报错第一名。

4.2 条件循环:while

count = 1
while count <= 5:
    print("第", count, "次")
    count = count + 1   # 忘记这行 → 死循环!
while 的方式:「只要条件为真,就一直执行缩进块,每执行一次就回来重新检查条件」。循环体里必须有语句让条件最终变假(Ctrl+C 可中断)。

4.3 计数循环:for + range

for i in range(5):          # range(5) = 0,1,2,3,4
    print(i, i * i)          # 0~4 和它们的平方

for i in range(1, 10, 2):    # 从 1 到 9(不含 10),步长 2
    print(i)                # 1 3 5 7 9
range(开始, 结束, 步长)含头不含尾range(5) 默认从 0 开始。九九乘法表、累加器都是 for 的经典练习。

4.4 手把手:用 for 写累加器(1 加到 100)

total = 0
for n in range(1, 101):
    total = total + n
print(total)   # 5050

拆解:total = 0 是"蓄水池";每轮把 n 加进去(读作"把 total 的新值设为旧值加 n");循环 100 次后打印。这个"累积"模式后面处处用。

第 5 步 · 输入与格式化输出

name = input("你叫什么名字?")   # input 返回的一定是字符串
age = input("几岁?")
age = int(age)                  # 字符串 → 整数,才能做算术
print(f"你好,{name}!明年你就 {age + 1} 岁了。")   # f-string:大括号里放变量/表达式
你叫什么名字?Riemann 几岁?30 你好,Riemann!明年你就 31 岁了。
常见报错:TypeError: can only concatenate str (not "int") to str —— 想拼接数字和文本但忘了转类型。修法:str(age) 或直接上 f-string。

第 6 步 · 实战项目 ①:温度转换器

需求:用户输入摄氏度,输出华氏度(华氏 = 摄氏 × 9/5 + 32)。支持反复转换,输入 q 退出。

Step 1:先写核心一行(跑通再包壳)

c = float(input("摄氏温度:"))
f = c * 9 / 5 + 32
print(f"{c}°C = {f}°F")

Step 2:加循环(允许反复输入)

while True:                          # 无限循环,靠 break 退出
    raw = input("摄氏温度(q 退出):")
    if raw == "q":
        break                        # 跳出循环
    c = float(raw)
    f = c * 9 / 5 + 32
    print(f"{c}°C = {f}°F")

Step 3:加防呆(用户输非数字不崩溃)

while True:
    raw = input("摄氏温度(q 退出):")
    if raw == "q":
        break
    try:
        c = float(raw)
    except ValueError:            # 转不了数字就提醒,而不是崩溃
        print("请输入数字,或 q 退出")
        continue                  # 回到循环开头
    print(f"{c}°C = {c * 9 / 5 + 32}°F")
这就是"健壮性"的入门:程序不因用户乱输入而崩溃。将来给服务器写脚本,面对的一定是"不听话的输入"。

第 7 步 · 实战项目 ②:猜数字游戏

需求:程序随机 1-100 一个数,用户猜,提示"大了/小了",猜中显示次数。

Step 1:随机数 + 首次输入

import random                 # 导入标准库(下个节点会系统学)
secret = random.randint(1, 100)
guess = int(input("猜 1-100:"))

Step 2:加判断与循环(核心逻辑)

secret = random.randint(1, 100)
tries = 0
while True:
    guess = int(input("猜 1-100:"))
    tries = tries + 1
    if guess > secret:
        print("大了")
    elif guess < secret:
        print("小了")
    else:
        print(f"猜中了!用了 {tries} 次")
        break

Step 3:复盘这段代码用了哪些知识点

如果你能不看答案写出这个游戏(含防呆),节点 ① 的核心目标就达成了。扩展题(选做):限制 7 次猜完,猜不完判输。

第 8 步 · 报错手册

1. SyntaxError: invalid syntax —— if x > 5 忘了冒号、括号不配对、引号没闭合。修法:看报错指向的行,缺 :、缺 )、引号没成对。
2. IndentationError —— if 下的行没缩进,或缩进忽多忽少。修法:统一 4 个空格,别混用 Tab 和空格。
3. NameError: name 'x' is not defined —— 用了没赋值的变量或拼错名(Age vs age)。修法:检查拼写大小写,先赋值后使用。
4. TypeError —— "3" + 5len(123)修法:先 type(变量) 看类型再决定转不转。

黄金三问(遇错先问):① 报错指向哪一行?② 那一行我写了什么?③ 它期望什么?——80% 的错自己就能解。

节点自测清单

全勾 → 节点 ① 完成,进入节点 ②(数据结构与字符串)。未勾 → 回看对应步骤,别急着往前走。

推荐资料