码上问学问代码之理,学编程之道

第 1 章 · 起步与环境

这一章我们不做太多「高深」的事,只做三件最基础、却最关键的事:搞清楚 为什么 选 Python、把运行环境装好、写下第一行能跑起来的代码,并理解变量与数据类型。

为什么选 Python

先讲为什么学编程,第一步不是「学哪门语言」,而是「用编程干什么」。Python 之所以适合作为第一门课,是因为它把「人和电脑沟通的门槛」降到了最低。

一句话:Python 让你把注意力放在「解决问题」上,而不是「和语法较劲」上。这正是码上问学想要的——先理解思路,再写代码。

安装与解释器

环境只需配一次
动手做Python 是一门「解释型」语言:你写的代码由 解释器 一行一行翻译给电脑执行,不需要像 C 那样先编译成 exe。所以你只要装好解释器,写个 .py 文件就能跑。
讲透“解释器”这个词先记住它:你写的 print("hi") 电脑看不懂,是解释器把它翻译成机器能执行的指令。你写的每一行,都是“写给解释器看的命令”。理解这一点,后续所有语法就都有了落脚处。
避坑装完打不开?最常见的两种:① 安装时没勾选 Add Python to PATH,终端找不到命令;② 部分系统要输入 python3 而不是 python。装好后敲 python --version(或 python3 --version),能显示版本号就说明环境通了。

第一个程序

动手做新建文件 hello.py,写入下面这行,然后运行它。
hello.pypython可运行
print("你好,码上问学")
print("我要开始学 Python 了")
运行输出Python 运行结果
运行结果: 你好,码上问学 我要开始学 Python 了
讲透每一行
  • print(...) 是 Python 内置的“输出函数”:把括号里的内容显示到屏幕上。
  • 括号 () 表示“调用这个函数”,里面放要打印的内容,叫「参数」。
  • 引号 "..." 表示一段「文字」(字符串)。不加引号,Python 会以为你在说变量名。
  • 两行 print 会按顺序执行,所以先打印第一行、再打印第二行。

变量:给数据起个名字

变量 = 贴在对象上的「标签」:名字指向数据,而不是装着数据name赋值 = 指过去字符串对象"码上问学"age整数对象18nickname两个名字可指同一个对象同一个字符串对象(id 相同)理解了「名字 → 对象」,就懂了为什么 b = a 之后改 b 不影响 a(不可变类型重新指向)
先讲为什么如果每次都用字面量写 "张三",程序就永远只能处理这一个人。
变量相当于给数据起了一个名字:你写代码时用这个名字,不直接写 "张三"。
以后要换成 "李四",只要改这个名字对应的值,所有用到这个名字的地方都会跟着变,整段逻辑不用动。
var.pypython可运行
name = "张三"        # 字符串,用引号包起来
age = 20             # 整数
height = 1.78        # 浮点数(带小数)
is_student = True    # 布尔值:真 / 假

print(name, "今年", age, "岁,身高", height, "米")
运行输出Python 运行结果
运行结果: 张三 今年 20 岁,身高 1.78 米
讲透
  • = 是「赋值」,读作“把右边的值存到左边的名字里”,不是数学里的“相等”。
  • 变量名要「见名知意」:用 name 而不是 a,半年后你还看得懂。
  • Python 是“动态类型”:你不用声明 age 是整数,赋了 20 它自己就是整数。
  • print 里用逗号分隔多项,Python 会自动用空格把它们拼起来。
避坑变量名有三个硬规矩:只能用字母、数字、下划线,且不能以数字开头(1name 错);区分大小写(Name 和 name 是两个不同的变量);不能用 if、for 这类“关键字”。起名尽量“见名知意”,少写 a / b / c。

数据类型:电脑怎么“理解”数据

常用数据类型:先分清「一个值」和「一串值」,再分「可变」和「不可变」int 整数18不可变float 小数3.14不可变str 字符串'静夜思'不可变bool 布尔True / False不可变list 列表[1, 2, 3]可变 ✓dict 字典{'name': '李白'}可变 ✓判断依据 type(x);转换用 int() str() float()可变 = 能原地改(list 增加/删除元素);不可变 = 改「值」其实是造新对象

Python 看到不同“长相”的数据,会自动归到不同的类型。类型决定了“它能做什么运算”。分清类型,是后面不出 bug 的关键。

types.pypython可运行
print(type("文字"))      # <class 'str'>  字符串
print(type(10))          # <class 'int'>  整数
print(type(3.14))        # <class 'float'> 浮点数
print(type(True))        # <class 'bool'>  布尔值
print(type([1, 2, 3]))   # <class 'list'>  列表(后面第2章细讲)
print(type({"a": 1}))    # <class 'dict'>  字典(后面第2章细讲)

# 类型之间可以“变身”
print(int("10") + 5)     # 字符串 "10" 转成整数 10,结果 15
print(str(3.14))         # 数字转字符串 "3.14"
运行输出Python 运行结果
运行结果: <class 'str'> <class 'int'> <class 'float'> <class 'bool'> <class 'list'> <class 'dict'> 15 3.14
讲透type() 是个“侦探函数”,返回数据的类型。遇到“这两种东西加不到一起”的报错时,第一反应就是用 type() 看看两边到底是什么。字符串 + 数字是会报错的,要先 str() 或 int() 转换——这正是“类型意识”的价值。
type_err.pypython可运行
price = "12"       # 从网页或文件读来的价格,常常是字符串
qty = 3
# 想算总价,必须先把字符串转成数字
total = int(price) * qty
print("单价", price, "元,买了", qty, "件,共", total, "元")

# 经典坑:字符串和数字不能直接相加,会被拦下来
try:
    print("年龄:" + 20)
except TypeError as e:
    print("报错:", e)
运行输出Python 运行结果
运行结果: 单价 12 元,买了 3 件,共 36 元 报错: can only concatenate str (not "int") to str

案例:用变量做一张“个人信息卡”

综合 变量 / 类型 / 输出

把前面零散的知识合成一个小程序:用一组变量描述一个人,再整齐地打印出来。

profile.pypython可运行
name = "李华"
city = "北京"
age = 22
skills = ["Python", "Excel", "写作"]

print("=== 个人信息卡 ===")
print("姓名:", name)
print("城市:", city)
print("年龄:", age)
print("技能:", "、".join(skills))   # 用顿号把列表拼成一句话
运行输出Python 运行结果
运行结果: === 个人信息卡 === 姓名: 李华 城市: 北京 年龄: 22 技能: Python、Excel、写作
讲透"、".join(skills) 的意思是:用顿号当“胶水”,把列表里的字符串粘成一句。这种“用某个符号连接一串文字”的写法,在数据处理里会反复出现,先混个脸熟。

第 1 章小结

动手练习

1定义变量 city 存你的城市、temp 存一个温度数字,用一行 print 输出“城市 + 今天 + 温度 + 度”。

2下面这行会报错还是正常?print("2" + 3) 想正确输出 23,改一行就行。

提示:练习 1 用逗号分隔多项最省心;练习 2 把数字用 str() 转成字符串再拼接。先自己写,再点开下面参考。

练习参考.pypython可运行
city = "北京"
temp = 26
print(city, "今天", temp, "度")

# 练习 2:先把数字转成字符串再拼
print("2" + str(3))
运行输出Python 运行结果
运行结果: 北京 今天 26 度 23