1.变量和数据类型
环境
使用Python 3。
变量和数据类型
数字及其运算
和c语言类似, = 是赋值运算符, / 是除法运算符, 比较特殊的是, ** 是次方运算符, 比如 2 ** 3
,是2的三次方。
数据类型
- float/int
- str
- bool
获取当前变量类型 type(变量名)
。
比如: type(bmi)
或者对字面值常量使用: type(2)
Python是脚本语言,变量的类型是可变的。 同时,Python也支持数据类型的自动转换。比如:
2 + true
会返回 3(true转成了3) 当然,转换失败时会报错 比如:"Hello" + 2
+
也可用于字符串连接,比如: "hello" + "world"
int 与float运算,运算结果类型是float. : 2 + 22.4
% 是取模运算符。 / 是除法运算符(int除int的返回结果是 int)
字符串及其运算
字符串是字符的集合
he = "他"
didnt = "没"
verb = "上"
obj = "上海的车"
# 用字符串组成另一个字符串
he + didnt + verb * 3 + obj
运行结果如下:
'他没上上上上海的车'
*运算符可以对字符串使用。 obj[1] 是’海’, obj[0]是’上'
(he + didnt + verb * 3 + obj)[2:6]
# 包括第2,但不包括第6,从第0开始
布尔型及其运算(bool)
bmi > 25
bmi > 20 and not bmi > 25
# and, or, not 类似于 && 、 !
bmi == bmi or bmi != bmi
分支
bmi = 40
if bmi > 40: # Python用缩进区分block
print("hyper obese") # 注意这行的开头有TAB
支持分支,条件没有(),但是条件后面有:,同时代码块使用缩进表示。
bmi = 45 # 改变bmi,观察分支选择
if bmi > 40:
print("hyper obese")
else:
print("not hyper obese")
多分支示例:
# 对bmi值进行分类
if bmi > 40:
print("hyper obese")
elif bmi > 35 and bmi <= 40:
print("super obese")
elif bmi > 30 and bmi <= 35:
print("obese")
elif bmi > 25 and bmi <= 30:
print("over weight")
elif bmi > 18.5 and bmi <= 25:
print("normal")
elif bmi > 16 and bmi <= 18.5:
print("under weight")
else :
print("slim") # https://en.wikipedia.org/wiki/Body_mass_index
列表和循环
列表是数据的容器 已经学过一种容器:str
列表及其运算
- 从通用List开始
- 以后基本只关注数值类型容器
- 注意程序语言和数学语言的映射
ret = he + didnt + verb * 3 + obj # 用一个变量保存计算结果
l = list(ret) # 转换为列表
l # 可以把一个字符串转换为列表,反之?
运行结果如下:
[‘他’, ‘没’, ‘上’, ‘上’, ‘上’, ‘上’, ‘海’, ‘的’, ‘车’] type(l) 的结果是
list
l[2:6] 的结果是: [‘上’, ‘上’, ‘上’, ‘上’] 左包右不包。 l[:2] # 到第2个为止,不包括第2个,从第0个开始 l[2:] # 从第2个开始 上面三种情景下,如果下标越界,不会报错。 l[-1] # 最后一个,或者,从右边开始第1个,注意不是从第0个开始,也可以 -2、-3,如果下标越界,会报错
负数索引
l[-2:-1] # 虽然索引是从右往左计数的,但范围和这些数字的排列顺序是一致的
l[-2:] # ['的', '车']
l[-7:-3] # ['上', '上', '上', '上']
l[:] # 和l差不多 ['他', '没', '上', '上', '上', '上', '海', '的', '车']
len(l) # 9
c = [6, 7, 3, 3, 3, 3, 10, 8, 4] # 特征:笔画数
f = l + c # 支持list使用 + 合并集合
len(f)
列表容器数据类型可以不同
g = f # g只是f的另一个名字
g[9] = 0 # 改变列表
f # f也会跟着变化
运行结果如下:
[‘他’, ‘没’, ‘上’, ‘上’, ‘上’, ‘上’, ‘海’, ‘的’, ‘车’, 0, 7, 3, 3, 3, 3, 10, 8, 4]
g = list(f) # 新创建一个列表
f[9] = 6 # 改回去
g # g[9]仍然是0
[‘他’, ‘没’, ‘上’, ‘上’, ‘上’, ‘上’, ‘海’, ‘的’, ‘车’, 0, 7, 3, 3, 3, 3, 10, 8, 4]
list() 函数是深拷贝。
del g[9] # 删掉第9个元素
g
len(g) # 17
循环
for v in f:
print(type(v)) # 注意这行的开头有TAB <class 'str'> <class 'int'>
range函数
len(range(1)) # 只生成一个数,长度是1
range(1)[0] # 这个数是0
range(len(f)) # f → f的索引 0 ~ 17
for i in range(len(f)): # 以索引做循环变量
print(i, type(f[i]))
for i, v in enumerate(f): # 上例的简化版本
print(i, type(v))