Python 零基础入门

by: KouPo
Python 零基础入门 12 节 · 可运行代码
进度
0 / 12
零基础 · 12 节 · 浏览器里直接跑代码

从第一行 print 开始,
把 Python 学到能自己写小工具

这门课假设你完全没写过代码。每节的核心代码不是一次性丢给你,而是一行一行“长”出来的——左边多一行,右边立刻说明它在干什么、写错会报什么错。写完直接运行,看见真实输出才算真懂。

12节系统课程
12道编程题
12个闯关
1位 AI 助教
写

跟着写,不是照着抄

点「写下一行」,代码逐步出现。每一行都告诉你:它在做什么、为什么放在这里、漏了会怎样。

跑

写完立刻能跑

不需要装 Python。浏览器里就是真的解释器,点一下就能看到输出和报错。

判

提交就知道对不对

每节末尾有编程题,系统会真的运行你的代码,结果不对会并排显示「要求」和「你的输出」。

关

闯关串联知识点

12 关由易到难,过了才解锁下一关。学过的东西不复习会忘,闯关就是用来逼自己回忆的。

一节怎么学

  1. 读 — 先看讲解,弄明白“为什么需要它”
  2. 写 — 点「写下一行」,把代码跟着敲出来
  3. 跑 — 点「运行整段」,对照输出和预期
  4. 练 — 做节尾编程题,再点「标记完成」
💡 卡住了不用自己硬扛:点左侧「AI 助手」直接问,它会用零基础能听懂的话回答,还会结合你正在学的那一节。
纯看课程不需要任何配置;想跑代码需要联网(首次加载约 10 MB)。写代码的工具在左侧「工具箱」。
🛠

工具箱:自己写、存文件、看它怎么跑

四个工具:左边随便写代码并运行;「文件工具」在虚拟磁盘里存取文件;「挑错」帮你找出错误代码错在哪、怎么改;「执行追踪」逐行回放,看见每一行执行时变量变成了什么。

main.py
1
点「运行 ▶」执行左边代码,输出会出现在这里。

    还没有文件。写一个试试,比如 notes.txt。

    i
    这些文件存在浏览器的内存磁盘里,和 Python 的 open() 看到的是同一个目录(根目录 /)。刷新页面就没了,要长期保存请下载到本机。

    贴代码 → 点「检查」,会告诉你错在第几行、为什么错、怎么改。

    0 / 0
     点「开始追踪」,这里会逐行高亮执行过程。
    执行到第 - 行 · 函数调用深度 -
    变量当前值
    暂无
    
                
    AI

    AI 小助手

    学的时候卡住,直接把问题丢过来。它按「零基础能听懂」的方式回答,给可运行的例子,但不会替你写完整作业。

    glm-4-flash

    可以这样问:

    i
    第一次用要先填 API Key。浏览器直接打开本地文件时,多半会被跨域策略拦住——那就用文件夹里的 启动.bat 起一个本地代理(自动带上 Key),再从 http://127.0.0.1:8787 打开本页。
    01

    第一个程序:让电脑说句话

    本节目标:逐行写出第一段 Python 代码,搞清 print、引号、注释各起什么作用。

    下面这个「跟着写」区域,每次点「写下一行」,代码就多一行,右边同时告诉你这行在干什么。不着急一次看完,跟着点一遍最快。

    Python
    (启用脚本后,这里会变成逐行演示)

    把这段代码读懂

    • print 是名字,必须小写;Print、PRINT 都不认。
    • 括号和引号必须成对出现,缺一个就是 SyntaxError。
    • 一行写一条指令,不需要分号结尾。
    !
    新手三个高频错误:① 用了中文引号 “ ” 或中文括号;② 把 print 打成 Print;③ 漏了右括号。看到 SyntaxError,先检查这三样。
    练习 1

    下面哪一行能正确输出 Hi?

    动手写提交后系统会真的运行你的代码来判分

    创建变量 name,存入文字「爱丽丝」,然后把它打印出来。

    02

    变量与数据类型:给数据起名字

    本节目标:一行一行看变量怎么被创建、怎么被改,以及 int / float / str / bool 怎么区分。

    变量就是贴了标签的盒子。等号不是数学里的「等于」,而是「把右边的值放进左边的名字里」。下面每加一行,都注意右边新出现的那个盒子。

    Python
    (启用脚本后,这里会变成逐行演示)

    四种类型对照

    • int 整数:18、-3、1000
    • float 浮点:1.75、3.14
    • str 字符串:'小明'、'123'(加引号的数字也是字符串)
    • bool 布尔:True / False
    i
    变量名只能用字母、数字、下划线,不能以数字开头,不能是关键字。习惯用小写下划线:user_name、total_price。
    练习 2

    type('18') 的结果是什么?

    练习 3

    填空:把整数 7 存进变量 n。

    动手写提交后系统会真的运行你的代码来判分

    把整数 7 存进变量 n,再让 n 加上 3(结果写回 n),最后打印 n。

    03

    字符串:把文字拼起来、拆开来

    本节目标:搞清楚为什么有 + 还要用 f-string,以及下标和切片是怎么数位置的。

    先看最笨的拼接方式,再看它踩了什么坑——这样你才会明白 f-string 为什么存在。

    Python
    (启用脚本后,这里会变成逐行演示)

    方法不是「改」,而是「返回新的」

    upper()、strip()、replace() 都不会改动原字符串,而是返回一个新字符串。必须用变量接住,否则结果直接丢掉。

    Python
    s = '  hi  '
    s.strip()          # 第 2 行:结果被丢掉,s 没变
    print(f'[{s}]')
    
    s = s.strip()      # 第 5 行:把新值接住,s 才真的变了
    print(f'[{s}]')
    !
    切片越界不报错,只会返回空串或截到末尾;但用下标取越界字符会抛 IndexError。这两者的差别很关键。
    练习 4

    'Python'[1:4] 的结果是?

    动手写提交后系统会真的运行你的代码来判分

    定义 name = '小明'、age = 18,用 f-string 打印出:我叫小明,今年18岁

    04

    输入与类型转换:程序第一次听你说话

    本节目标:亲眼看 input 拿到的到底是什么类型,以及 int() 为什么必须存在。

    这一步开始代码会「停下来等你」。运行后浏览器会弹输入框——那正是 input() 在工作。

    Python
    (启用脚本后,这里会变成逐行演示)

    转换失败会怎样

    Python
    # 第 2 行:'abc' 不是数字,int() 转不了
    try:
        print(int('abc'))
    except ValueError as e:
        print('转换失败:', e)
    
    # 但能转的一定要转
    print(int('18') + 1)
    print(float('3.14') * 2)
    i
    三个转换记牢:int('18') → 18,float('3.14') → 3.14,str(99) → '99'。
    练习 5

    用户输入 18 后执行 a = input(),此时 a + 1 会怎样?

    动手写提交后系统会真的运行你的代码来判分

    把字符串 '3.5' 转成数字,乘以 2 后打印结果。

    05

    运算符与条件:让程序自己做判断

    本节目标:看清 if / elif / else 三兄弟的缩进结构,理解「从上往下、命中即止」。

    条件语句是 Python 里第一次出现缩进的地方。注意每次缩进 4 个空格——它表示「这几行属于上面那个条件」。

    Python
    (启用脚本后,这里会变成逐行演示)

    条件里能写什么

    • 比较:== 相等、!= 不等、>、<、>=、<=
    • 逻辑:and(都真才真)、or(一真就真)、not(取反)
    • 真值:0、''、[]、None 算假,其他基本算真
    !
    一个等号是赋值,两个等号才是比较。if x = 1 直接报 SyntaxError;要写 if x == 1。
    练习 6

    下面代码会输出什么?

    Python
    x = 15
    if x > 10:
        print('A')
    if x > 12:
        print('B')
    else:
        print('C')
    动手写提交后系统会真的运行你的代码来判分

    设 score = 75,用 if / elif / else 判断:90 分及以上打印「优秀」,60 分及以上打印「及格」,否则打印「不及格」。最终只应输出一个词。

    06

    循环:让电脑替你重复

    本节目标:用「累加器」这个套路理解 for,再理解 while 为什么容易死循环。

    先写一个小目标:把 1 到 5 加起来。人一眼能算出 15,但我们要让程序学会这个动作。

    Python
    (启用脚本后,这里会变成逐行演示)

    break 和 continue

    Python
    for i in range(1, 10):
        if i == 5:
            break        # 到 5 就整体结束,后面的 6~9 不再执行
        if i % 2 == 0:
            continue     # 偶数跳过本轮,直接进入下一轮
        print(i)
    
    # 输出 1、3:2 和 4 被 continue 跳过,5 触发 break 结束
    !
    如果页面卡住不动,多半是 while 条件永远为真。学习阶段先把范围改小,确认逻辑对了再放大。
    练习 7

    上面 break 的例子会输出哪些数字?

    动手写提交后系统会真的运行你的代码来判分

    用 for 循环算出 1 到 10 之间所有偶数的和,只打印这个和。

    07

    列表:一次装一串数据

    本节目标:从空列表开始,看清「下标」和「修改」这两件事。

    列表的核心只有两个问题:第几个(下标)和能不能改(能)。

    Python
    (启用脚本后,这里会变成逐行演示)

    常用操作速查

    • append(x) 末尾追加 / insert(2, x) 指定位置插入
    • remove(x) 删第一个等于 x 的 / pop() 弹出末尾
    • x in scores 判断存在 / scores[1:3] 切片
    • for s in scores: 直接遍历元素;enumerate(scores) 同时拿下标
    练习 8

    a = [1, 2, 3] 执行 a.append(4) 后,a 是多少?

    动手写提交后系统会真的运行你的代码来判分

    先建一个空列表,依次加入 88、92、79,排序后打印第一个元素。

    08

    字典与集合:按名字找东西

    本节目标:从空字典开始,看清「键」和「值」怎么配对,以及 get 为什么比中括号安全。

    列表靠位置找,字典靠名字找。描述「一个对象的多个属性」时,字典比列表清楚得多。

    Python
    (启用脚本后,这里会变成逐行演示)

    集合:只关心「有没有」

    Python
    nums = [1, 2, 2, 3, 3, 3]
    unique = set(nums)      # 转成集合,自动去重
    print(unique)           # 顺序不保证,但一定是 {1, 2, 3}
    print(len(unique))      # 3
    
    tags = {'python', '入门'}
    print('python' in tags) # 判断存在,比列表快很多
    i
    三者怎么选:有顺序、可重复 → 列表;按名字查值 → 字典;去重、只判断在不在 → 集合。
    练习 9

    d = {'a': 1},访问 d['b'] 会发生什么?

    动手写提交后系统会真的运行你的代码来判分

    建一个字典,存两个键:name 的值是「小明」,age 的值是 18。然后打印 name 对应的值。

    09

    函数:把一段逻辑打包命名

    本节目标:分清 def 定义和调用,彻底搞懂 print 与 return 不是一回事。

    函数最容易被误解的地方是:定义 ≠ 执行。写了 def 之后,里面的代码一行都不会跑,直到你调用它。

    Python
    (启用脚本后,这里会变成逐行演示)

    默认参数与关键字参数

    Python
    def power(base, exp=2):     # exp 有默认值,调用时可省略
        return base ** exp
    
    print(power(3))             # 3 的 2 次方
    print(power(2, 10))         # 2 的 10 次方
    print(power(exp=3, base=2)) # 关键字传参,顺序随意
    
    # 作用域:函数里的变量外面看不见
    def calc():
        temp = 100              # temp 是局部变量
        return temp
    
    print(calc())
    # print(temp)               # 取消注释会报 NameError
    i
    函数名后面必须加括号才算调用。写 greet 只是拿到这个函数对象,写 greet('小明') 才是执行。
    练习 10

    下面调用后,x 的值是?

    Python
    def f(n):
        n = n * 2
        print(n)
    
    x = f(5)
    动手写提交后系统会真的运行你的代码来判分

    定义函数 add(a, b),返回两个数的和;然后调用 add(3, 5),打印返回值。

    10

    文件读写:让数据活过今天

    本节目标:看清 with 的作用、w 和 a 的区别、以及为什么必须写 encoding。

    文件操作有个前提:开了必须关。with 就是自动帮你关的那层保险。

    Python
    (启用脚本后,这里会变成逐行演示)

    四种模式

    • 'r' 只读(默认),文件不存在报 FileNotFoundError
    • 'w' 写入,会清空原内容
    • 'a' 追加,写在末尾
    • 'x' 独占创建,文件已存在会报错
    !
    Windows 上读写中文不写 encoding='utf-8',很可能抛 UnicodeDecodeError。养成习惯:只要涉及中文,永远显式写 utf-8。
    练习 11

    要往已有文件末尾添加一行、不破坏原内容,应该用哪个模式?

    动手写提交后系统会真的运行你的代码来判分

    用 with open 往文件 note.txt 里写入「你好」,再把它读出来打印。

    11

    异常处理:看懂报错,别让它崩

    本节目标:会读 Traceback,会用 try / except / finally 兜住可预期的错误。

    报错不是失败,是 Python 在告诉你哪一行、出了什么类型的问题。先学会读,再学会处理。

    Python
    (启用脚本后,这里会变成逐行演示)

    五个高频报错

    • SyntaxError 语法错:括号、引号、冒号漏了
    • NameError 名字没定义过(拼错变量名最常见)
    • TypeError 类型不对,比如 '1' + 1
    • ValueError 类型对但值不对,比如 int('abc')
    • IndexError / KeyError 下标或键不存在
    报错长这样
    Traceback (most recent call last):
      File "main.py", line 2, in <module>
        print(10 / 0)
    ZeroDivisionError: division by zero
    
    # 从下往上读:
    # 最后一行 = 错误类型 + 原因
    # 上面几行 = 出错位置(文件、行号、代码)
    练习 12

    print(undefined_var) 会引发哪种错误?

    动手写提交后系统会真的运行你的代码来判分

    用 try / except 捕获 int('abc') 引发的错误,捕获到就打印「转换失败」。

    12

    小项目:把学过的一行行拼起来

    本节目标:不看答案,先自己想到「大概要哪几行」,再对照着写一遍猜数字。

    写程序不是从第一行往下编,而是先想清楚要哪些零件:一个答案、一个计数器、一个反复询问的循环、三种判断。下面按这个顺序一行行搭。

    Python
    (启用脚本后,这里会变成逐行演示)

    项目二:简易记账本

    思路:用一个字典存「分类 → 金额」,循环读入,最后排序输出。先看注释,再运行试试(输入 吃饭 35 这样的一行)。

    Python
    records = {}                 # 分类 -> 总金额
    count = 0
    
    while True:
        line = input('输入『分类 金额』,直接回车结束:')
        if line == '':           # 空输入 = 结束
            break
    
        parts = line.split()     # 按空格拆成两部分
        if len(parts) != 2:
            print('格式不对,要写成:吃饭 35')
            continue             # 跳过本轮,重新问
    
        category, amount_text = parts
        try:
            amount = float(amount_text)
        except ValueError:
            print('金额必须是数字')
            continue
    
        # get(键, 0):没有这个分类时当 0 处理,避免 KeyError
        records[category] = records.get(category, 0) + amount
        count = count + 1
    
    print(f'共记录 {count} 笔')
    for name, total in sorted(records.items(), key=lambda kv: kv[1], reverse=True):
        print(f'{name}: {total:.2f} 元')
    print('合计:', sum(records.values()))
    为什么用 get(category, 0)

    某个分类可能是第一次出现,此时 records[category] 还不存在,直接取会抛 KeyError。用 get(category, 0) 表示「有就取,没有就当 0」,新分类自然从 0 开始累加。

    ✓
    入门语法到这里就齐了。接下来最有效的提升不是继续看教程,而是给自己找个真需求(记账、批量改名、爬天气)动手写,卡住了再回来查——每卡一次,理解就深一层。
    动手写提交后系统会真的运行你的代码来判分

    打印 1 到 5 每个数字的平方,每行一个。也就是依次输出 1、4、9、16、25。

    ★

    闯关模式:12 关,从易到难

    每一关给一个明确要求,写出代码让屏幕输出和要求一致:大小写要对,但空格、空行不计较,前面多打印一句说明也放过。通过即解锁下一关,进度保存在本机。

    0 / 12 关
    i
    卡住了先点「提示」——提示只给方向,不给代码。真的想不出来再看「答案」,但建议看完后关掉自己重写一遍,否则记不住。

    综合小测

    10 道题,覆盖全部章节。做完点「交卷」看分数,错的题会指回对应章节。

    1. print("1" + "2") 输出什么?

    2. type(3.0) 的结果是?

    3. s = "hello",想让结果变成 "HELLO",哪句有效?

    4. x = input(),用户输入 5,x * 2 是?

    5. 7 // 2 和 7 % 2 分别是?

    6. for i in range(3): print(i) 会输出几行?

    7. a = [10, 20, 30],a[-1] 是?

    8. d = {"a": 1},d.get("b", 0) 返回?

    9. 函数体内只写了 print(x),没有 return,调用它的结果是?

    10. 读一个可能不存在的中文文本文件,最稳的写法是?

    >
    正在加载 Python 运行环境…