一、变量与运算

​ 在任何程序语言中,最基本的一项功能就是设置变量。 通过对变量的运算,来实现程序功能。

1、变化的量

​ 所谓设置一个变量,也就是设置一个可以变化的量。变量简单理解,就是我们给一个东西的名字。 或者说是为了暂时在计算机中存储一个东西,我们给这个东西取了一个名字。比如如果我们要做文件管理系统, 那么这个系统得有一个名字。

1
name = "文件管理系统"

​ 这里的 name 是我们为这个变量设置的名字,而 文件管理系统 则是这个变量 name 中的取值。

​ 在Python中,我们可以用三种方式来标识字符:

​ 第一种是用英文的单引号

​ 第二种是用英文的单引号

​ 第二种是用三个引号(可单/双引)

1
2
3
4
name = '文件管理系统'
name2 = "文件管理系统"
name3 = """文件管理系统""" #或者是'''文件管理系统'''

Q:为什么要使用三个引号呢?使用三个引号有什么好处呢?

A:这种三个引号的在文本量比较多的情况下有一个好处,就是可以书写跨行的文本。

1
2
3
4
5
6
7
long_text = """
这是一段长文本,
有多长的,
是真的很长。
"""
long_text

Q :如果只用一个引号来写多行文本会有什么问题呢?

A:语法错误,报错内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Traceback (most recent call last):
File "/lib/python3.9/asyncio/futures.py", line 201, in result
raise self._exception
File "/lib/python3.9/asyncio/tasks.py", line 256, in __step
result = coro.send(None)
File "/lib/python3.9/site-packages/_pyodide/_base.py", line 494, in eval_code_async
await CodeRunner(
File "/lib/python3.9/site-packages/_pyodide/_base.py", line 237, in __init__
self.ast = next(self._gen)
File "/lib/python3.9/site-packages/_pyodide/_base.py", line 141, in _parse_and_compile_gen
mod = compile(source, filename, mode, flags | ast.PyCF_ONLY_AST)
File "<exec>", line 3
long_text = '
^
SyntaxError: EOL while scanning string literal

在定义多个变量的时候,我们还有一些快捷写法,比如下面这样,等号两边逐个写出变量的值。

1
name1, name2, name3 = "文件", "系统", "管理"

或者你想一次性定义多个相同取值的变量,有一个简单的方法。

1
name1 = name2 = name3 = "文件系统"

2、打印 Print

1
2
3
4
5
print("我的Python最棒~")
print(name)
print("我的Python的", name, "业界顶呱呱")
print("我看着", "莫烦", "的教学长大的~")

3、数学运算

​ 除了文本数据,我们使用变量还可以记录多种多样的信息。比如数字和列表,字典。 这节主要讲数字和基于数字的基本运算。列表和字典我们留在后面 文件管理系统中,和数字有关的比如文件时间(在后续的datetime详细讲解), 或者是文件版本号,文件数等。这里我们用文件数来过一遍数学运算的知识。

很简单,运用上面变量的知识,你只需要给这个数字一个名字,比如我的系统里有十个文件。

1
2
3
num_of_files = 10
print("我系统里有", num_of_files, "个文件")

这些文件我要分成5组,每组多少个呢?这就是除法了

1
2
print("分五组,每组", num_of_files / 5, "个")

运算符 描述 例子
+ 3+4=7
- 3-4=-1
* 3*4=12
/ 3/2=1.5
% 取模 103%100=3
** 3**2=9
// 取整除 10//3=3

注:字符串也是可以相加的

一些简便的运算写法:常用的及时修改变量的简便写法

1
2
3
4
5
6
7
8
9
10
a = 1        
a += 1 #相当于a=a+1
print("a += ", a)
a -= 1 #相当于a=a-1
print("a -= ", a)
a *= 10 #相当于a=a*10
print("a *= ", a)
a /= 2 #相当于a=a/2
print("a /= ", a)

二、判断,数据,循环

条件判断

​ 1、if 如果:if 很好理解,就是判断的基石,如果什么样就做什么。

1
2
3
4
in_trash = True              #在回收站中
if in_trash: #如果在回收站中则执行下一步
print("可以被彻底删除") #打印可以被彻底删除

​ Q:你可以尝试一下,把上面的in_trash = True改成in_trash = False,看看会有什么样的结果。

​ A:不打印

下面,我们在 in_trash 前面加上一个 not 来表示 in_trash 的反面,也就是不在垃圾桶里的意思。

1
2
3
4
in_trash = True
if not in_trash:
print("不可以被彻底删除")

​ 同样,你可以再尝试一下,把上面的in_trash = False改成in_trash = True,看看会有什么样的结果。

if-else 如果否则

​ 其实,如果又要判断正面又要判断反面的情况,我们完全可以一次性搞定,比如下面使用 if-else 这种结构。 简单明了地就同时判断了正反面应该做的两件不同的事情。

1
2
3
4
5
6
in_trash = True
if in_trash:
print("可以被彻底删除")
else:
print("不可以被彻底删除")

判断条件

​ 其实除了 True / False 还有很多其他的间接判断条件。比如下面列出来的这些判断标准。

判断 含义
a == b a 是否等于 b
a > b a 是否大于 b
a >= b a 是否大于等于 b
a < b a 是否小于 b
a <= b a 是否小于等于 b
a != b a 是否不等于 b

​ 如果是文字的话,也可以比较是否等于/不等于,其它那些大于小于都是用于数值判断的。

1
2
3
a, b = "文件1", "文件2"
a == b

1
2
3
print("2 < 3", 2 < 3)
print("3 < 2", 3 < 2)
print("2 != 2", 2 != 2)

这些判断都会返回一个 True 后 False 的结果。甚至还可以叠加不同的判断。

1
2
3
4
print(2 < 3 and 2 < 5)
print(2 > 3 or 3 == 3)
print(2 > 3 or not 3 == 3 and 5 < 10)

附:and or not 的含义

判断 含义
True and True 需要两边同时满足才能返回 True
True or False 只要一边是 True 则返回 True
not True 给出相反结果

​ 有了这些工具,拿到最终的那个 True / False 后,你就能再套用在 if-else 的结构里啦,将判断依据与判断后的流程联通在一起。

1
2
3
4
5
a, b = 1, 2
if a > b:
print("a 大于 b")
else:
print("a 不大于 b")

if-elif-else

​ 还有比 if-else 更强大的结构。因为有时候我们还需要多判断一些情况,比如周一要干嘛,周二要干嘛,周三要干嘛等等,这并不是一个非黑即白的判断,而是多重判断连在一起的。 所以我们必然有更好的方式去判断。

1
2
3
4
5
6
7
8
9
10
today = 4
if today == 1:
print("周一")
elif today == 2:
print("周二")
elif today == 3:
print("周三")
else:
print("周一周二周三之外的一天")

Q:要判断多个数值区间该怎么写呢?

A:

for 和 while 循环

for循环

1
2
for item in sequence:
expressions

sequence 为可迭代的对象,item 为序列中的每个对象。

range使用

Python 内置了工厂函数,range 函数将会返回一个序列

1 range(start, stop)

其中 start 将会是序列的起始值,stop为结束值,但是不包括该值,类似 数学中的表达 [start, stop),左边为闭区间,右边为开区间。

1
2
for i in range(1, 10):
print(i)

上述表达将会返回 1-9 所有整数,但不包含 10

2 range(stop)

如果省略了 start 那么将从 0 开始,相当于 range(0, stop)

3 range(start, stop, step)

step代表的为步长,即相隔的两个值得差值。从start开始,依次增加step的值,直至**等于或者大于**stop

1
2
for i in range(0,13, 5):
print(i)

将会输出 0, 5, 10