分类 编程社 下的文章

Python入门#2:变量、数据类型、基本运算

变量是什么?

我们需要让计算机完成一些事情对吧?那么计算机是不是需要记住一些什么呢?例如,我想让他向你问好,首先得知道并记住(哪怕只是暂时的)你的名字,对吧?这部分内容学会后,你将收获:

类型 内容
语法 变量的概念与使用
函数 input
语法 语句
语法 赋值操作与基本运算符
语法 数据类型

变量

变量(Variables),顾名思义,就是一个可以变化的量。你可以把变量理解成一个盒子,你需要的话就创建它,不需要的时候就销毁它(当然,销毁的操作是Python自动完成的。)

变量的创建:赋值时自动创建

赋值

在Python中,**赋值(assignment)**是一个重要的操作。赋值的意思就是,把箱子里的东西倒掉,在放进新的去。在Python中,赋值使用=来完成。这里的等于号你可以这样理解:我要让左边的变量存储的东西和右边的一样。例如:

>>> a = 1
>>> print(a)
1
>>> 某变量 = "hello, world"
>>> print(某变量)
hello, world

在交互式解释器中,直接输入变量名等,会返回其值。例如接着操作:

>>> a
1
>>> 某变量
'hello, world'

变量的类型

就像你认识现实生活中的各种事物,有吃的有看的,有概念上的(如数字)有具象的(如课本)等,变量也具有他们的类型。这里我将介绍Python内置的数据类型。

名称 示例
整型 int a = 1
浮点型(小数) float a = 1.5
b = 1.3e10($1.3 \times 10^{10}$)
复数(少用,仅介绍) complex a = 10 + 8j
即$a = 10 + 8i$.注意到使用的是j而不是i
字符串 str(全称string) a = "hello, world"
布尔值(逻辑值,即True or Falsebool a = True
等价于
a = 1

a = False
等价于
a = 0
None(或说) NoneType a = None
数据结构等(后期会专门学习) a = [1,2,3,"hello, world", [12, 2], (12, 23)]
其他内置数据类型

基本运算

算数运算符

运算符 含义 示例
+ 加法(数值)或串联(序列) 3 + 5 == 8'a' + 'b' == 'ab'
- 减法 10 - 3 == 7
* 乘法或序列复制 2 * 4 == 8'ha' * 3 == 'hahaha'
/ 除法(始终返回 float 7 / 2 == 3.5
// 地板除(返回结果的向下取整,但是数据类型仍为int 7 // 2 == 3
10.3 // 2 == 5.0
-10.3 // 2 = -6.0
% 取模(余数) 7 % 3 == 1
** 幂运算 2 ** 5 == 32

地板除需注意:结果向下取整,例如10.3 // 1的结果为10, -10.3 // 1的结果为-11

取余得到的余数即小学学的带余除法得到的余数部分。例如:

$$ 13 \div 5 = 2 \text{ 余 } 3 $$ 在Python中:
>>> print(13 % 5)
3

在数论中,这个叫做模除: $$ 3 \equiv 13 \pmod 5 $$ 这个式子的意思为,在除以5的情况下3与12同余。$\equiv$是同余符号。

同余即余数相同。

或者可以这样写: $$ 13 \mod 5 = 3 $$ 这种写法的意思为,13 除以 5 的余数为 3

逻辑运算符

运算符 含义 示例
and 与(短路求值) True and False == False
or 或(短路求值) True or False == True
not not True == False

逻辑运算符(Boolean operators),顾名思义(顾英文名),就是针对布尔值的运算。一般用于逻辑判断。

例如,我用我出门骑自行车表示我是否会出门骑自行车,用今天下雨表示今天是否会下雨,用今天刮风表示今天是否刮风,那么如果我只在不刮风也不下雨的时候骑自行车(要求好高啊)可以这样表示:

我出门骑自行车 = (not 今天下雨) and (not 今天刮风)

这里是各个逻辑运算的所有结果(用1|0表示法):

运算 结果
1 and 1 1
1 and 0 0
0 and 0 0
1 or 1 1
1 or 0 1
0 or 0 0
not 1 0
not 0 1

位运算符

注意到计算机以2进制(bin)存储数据。因此学习一些关于(二进制)位的运算是有必要的。在一定程度上,恰当地使用位运算可以简化算法。

进制是什么呢?寻常我们数数,是不是数到10就进一位啦?

比如: $$ 9 + 1 = 10 $$ 从一位数变成了两位数。

而其他进制就不一样了。例如

二进制中,是逢2进1: $$ 1_2 + 1_2 = 10_2 \ 10_2 = 2_{10} \ 10_2 + 1_2 = 11_2 \ 11_2 = 3_{10} \ 111_2 + 11_2 = 1010_2 \ 1010_2 = 10 $$ 从1位变成了2位.

八进制同理: $$ 3_8 + 7_8 = 12_8 \ 12_8 = 10_{10} $$ 十进制以上进制则大于十的用字母补齐(因为只有九个数字)。

例如十六进制中: $$ 9_{16} + 5_{16} = \text{e}{16} \ \text{f}{16} + 1 = 10_{16} \ 15_{16} + 14_{16} = \text{1d}{16} \ \text{e}{16} = 14_{10} \ \text{10}{16} = 16{10} \ \text{1d}{16} = 29{10} $$

二进制、八进制数是int的子集,其中:

二进制(bin)用0b开头:

>>> bin(12)
'0b1100'

八进制(oct)用0o开头:

>>> oct(12)
'0o14'

十六进制(hex)使用0x开头:

>>> hex(12)
'0xc'
运算符 示例
&(按位与) 0b1100 & 0b1010 == 0b1000
` `(按位或)
~(按位非) ~0b1100 == -0b1101(注意变成了负数)
~0b-1 == 0
^(按位异或) 0b1100 ^ 0b1010 == 0b0110

异或(XOR)的规律:同则为0, 异则为1:

操作 结果
$1 XOR 1$ $0$
$1 XOR 0$ $1$
$0 XOR 1$ $1$
$0 XOR 0$ $0$

位运算可以理解成按位进行的逻辑运算。

比较运算符

运算符 含义 示例
== 等于 5 == 5
!= 不等于 5 != 3
<, <=, >, >= 大小比较 3 < 45 >= 5
is 对象身份比较(同一对象) a is b
is not 对象身份不等 a is not b

为什么等于号是两个等号呢?因为一个等号已经被那个叫做赋值的坏家伙占用了(

身份运算符

运算符 含义 示例
is 检查两个对象是否是同一实例 a is b
is not 检查两个对象是否不是同一实例 a is not b

例如:

>>> "hello" in "hello, world"
True

测验:

请在计算一下运算的结果并在交互式解释器中验证:(带*的为选做,进度快的同学可以自行上网查找资料进行完成)

  1. 1 + 89089

  2. "hello" + ", " + "world"

  3. "hello," " world"

  4. a = 6
    b = -7
    print(a + b)
    print(a - b)
    print(a * b)
    print(a / b)
    print(a // b)
    print(a % b % 2)
    print(a ** b)
    print(b ** a)
    print(a and b)
    print((not a) or b)
    print(not b)
    print(a ^ b)
    print(a | b)
    print(~a)
    print(~b)
    print(~a ^ b)
    print(bin(a))
    print(hex(a))
    print(oct(b-a))
    print(type(bin(a)))
    print(type(hex(a)))
    print(type(oct(b-a)))
    print(type(type(12 + 29 ** 23)))
    
  5. * 编写一个程序,使得你能够告诉它你的名字,然后它向你问好。

项目5示例代码:

# 入门2-5方言版
name = input("泥脚什么名字呀?")
print(name, ', '+name, ', ' "泥豪泥豪")

运行结果示例:

泥脚什么名字呀?ZhX589
ZhX589 , ZhX589 , 泥豪泥豪

基于AI,仅供参考

1. 课程整体框架

周次 课堂主题 目标(45 min) 课堂活动 课后作业 / 练习
1 Python 基础环境 & 第一个脚本 熟悉运行环境(Anaconda/venv),写出 print("Hello, world!") 现场装配开发环境(IDE 推荐 VS Code + Python 扩展),演示 REPL 完成 环境搭建检查清单,提交截图
2 变量、数据类型、基本运算 能正确使用整数、浮点、字符串、布尔值 课堂小测(填空/选择)+ 现场写 5 条小算式 练习题:calculator.py(实现四则运算)
3 控制流(if / for / while) 能用条件、循环解决简单问题 “猜数字” 现场编程(分组协作) 完成 猜数字 变体:加入计数器、提示功能
4 函数 & 参数 能定义、调用函数,理解作用域 编写 阶乘斐波那契 两个函数,现场调试 作业:实现一个 BMI 计算函数,写出 单元测试(unittest)
5 常用内置数据结构(list、tuple、dict、set) 能选用合适的数据结构存储/查询数据 现场做 学生信息管理 小程序(增删改查) 完成 购物车 小练习:使用 dict 实现商品添加/删除
6 文件 I/O & 异常处理 能读写文本文件,捕获常见异常 读取 CSV 学生成绩文件并统计平均分 作业:编写 日志记录器(写入文件 + 异常捕获)
7 模块化 & 第三方库(requests、json) 能使用 import,了解 pip 安装 调用 GitHub API 获取仓库信息并打印 完成 天气查询 小程序(使用 requests 调接口)
8 面向对象基础(class、属性、方法) 能设计简单类并实例化 现场实现 学生类(属性:姓名、学号、成绩;方法:计算平均) 作业:实现 银行账户 类(存取款、记录历史)
9 单元测试 & 调试技巧 能编写 unittest,使用 assert 为前几节代码编写测试用例,现场运行 完成 测试覆盖率 小任务(使用 coverage
10 简单项目规划(需求分析、拆解任务) 能把需求拆解为可实现的子任务 “图书管理系统” 为例,现场绘制 UML(类图、时序图) 小组讨论:确定本学期项目主题(提交需求文档)
11 项目实现 I(搭建框架、基本功能) 完成项目的 入口文件、基本 CLI 界面 小组现场编码:实现 登录/注册数据持久化(JSON) 完成 登录/注册 功能的单元测试
12 项目实现 II(功能完善、演示、反馈) 完成项目的 核心业务,能完整演示 每组 5 min 项目 Demo + 现场 Q&A 项目提交(GitHub 仓库),撰写 技术总结(200 字)

注意:如果实际课时更少,可将 第 9–12 节 合并为 项目冲刺,将前面内容的练习作为课后自学(提供视频/文档)。


2. 高效利用 45 分钟课堂的技巧

方法 具体做法 目的
翻转课堂 课前把阅读材料、短视频(5‑10 min)放在学习平台,要求学生提前观看并在课堂开始前完成 思考题(使用 Google Form 或纸质) 把讲解时间压缩到 15‑20 min,剩余时间用于实战
即时编码(Live Coding) 副社长现场写代码,边写边解释,学生同步在自己的电脑上敲代码;遇到错误时让学生一起找原因 让学生感受真实的调试过程,提升动手能力
配对编程(Pair Programming) 两人一组轮流 Driver / Navigator,交替敲代码并讨论实现思路(自行安排,直接找社长可能更合适) 提高参与度,帮助弱势学生跟上进度
代码走查(Code Review) 每节课抽取 1‑2 份学生提交的代码现场走查,指出改进点 培养代码审查习惯,强化质量意识
微项目(Micro‑Project) 每 2‑3 节课结束后布置一个 ≤30 行 的小项目,课堂上进行展示 让学习成果可视化,增强成就感

3. 课后自学资源(推荐)

主题 资源 备注
Python 基础教程 https://www.runoob.com/python3/python3-tutorial.html 中文,适合快速查阅
交互式练习平台 https://www.codewars.com/ https://www.leetcode.com/ 挑选 Easy 级别题目
视频讲解(B 站) https://www.bilibili.com/video/BV1xK4y1C7Jp/ “Python 入门(45 分钟)”系列
在线 IDE(免装) https://replit.com/ 课堂现场快速演示
项目管理模板 https://github.com/karan/Projects 可直接 fork 用于项目任务拆分

4. 评估与反馈

  1. 每两节课一次小测(选择题+简答,10 分钟),帮助把握学生掌握情况。
  2. 项目里程碑检查:第 10、11、12 节分别提交 需求文档、代码框架、完整演示,并给出 10%/30%/60% 的进度评分。
  3. 学期结束调查:收集学生对 课堂节奏、作业难度、资源可用性 的反馈,以便下学期改进。

5. 关键提示

  • 把“练习”搬进课堂:即使学生课后时间有限,也能在课堂上完成大部分代码实现,只留下概念性思考做作业。
  • 提供“一键运行”环境:提前准备好一个 Docker 镜像Conda 环境environment.yml),让学生只需 conda env create -f environment.yml 即可开始编程,降低环境配置的门槛。
  • 鼓励代码共享:使用 GitHub Classroom(或 Gitee)统一收集作业,便于快速检查,也让学生养成版本控制的习惯。

小结

  • 前 8 节打好 语言基础(语法、数据结构、函数、文件、模块、面向对象)。
  • 第 9‑12 节转向 项目实战,通过需求拆解、迭代实现,让学生在有限时间内感受到完整的开发流程。
  • 通过 翻转课堂 + 现场编码 + 配对编程 的教学模式,把课后练习的负担压到课堂里,同时提供丰富的自学资源供有余力的同学自行提升。

祝你们的课程顺利开展,学生们在学期结束后都能自信地踏上 Python 项目开发的道路!如果还有细节需要进一步细化(比如作业模板、评估细则等),随时告诉我。

第一个程序

注意: 不一定所有内容都能看得懂,实践最重要。所以遇到不懂得可以先跳过(或者直接问),写的代码多了就懂了。

如何打开IDE呢?下载好Python安装后可以在桌面上发现一个名叫IDLE的快捷方式(如果在安装时选择了创建快捷方式),点击即可打开。由于机房电脑一些奇奇怪怪的错误,学校机房的桌面快捷方式死了,所以请按下Win键(或点击左下角Windows图标)打开开始菜单查找Python->IDLE打开。建议选择白色的。

IDE: IDE是集成开发环境的缩写,可以大致理解为用于进行开发活动的全套软件。

交互式解释器介绍

刚打开IDLE时,你会发现一个白色的窗口,其中有如下字样:

Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:24:06) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> 

最后一行前的>>> 标志这是交互式解释器。交互式就意味输入一行解释器就会执行一行。例如:

>>> 12+13
25
>>> 135465457654357654357356**10
2081065193176208652493570136210529355534687343561794797850624650869897720865652351060577643074271139111678336606170815459838610973844137190397334937575949673593026866575900058843430712604593435740147956665499607587584231896358322176

其中,你若输入一个表达式,他就会返回表达式的值;反若是语句等,则输出结果。例如print是一个函数:

>>> print
<built-in function print>

直接输入(即当做表达式输入)返回的是其类型(即值):内建函数print

表达式: 蕴含值的一个式子(大致可如此理解)。 例如,1+1是一个表达式,1234*4537也是一个表达式

print函数: print函数用于把参数向控制台输出。例如:

>>> print(12)
12

实践

打开IDLE,使用交互式解释器在控制台输出hello, world!

在文件中写代码

点击窗口左上角的File,选择New File,就可以打开一个名叫untitled的文件编辑窗口。你可以在这里写代码保存到文件并执行。

例如,输入:

print(1+1)

Ctrl+S保存,输入你想取的名字,保存在合适位置。

接着,点击Run,选择Run model,即可在刚才打开的交互式解释器查看运行结果。 例如刚才的文件的运行结果是:

>>> ================================ RESTART ================================
>>> 
2

实践

创建一个名叫helloworld.py(需要把显示拓展名打开)的文件,编辑合适的代码,使得这个文件能够向控制台输出hello, world