Posted by Shen's Blog on Monday, January 1, 0001

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))