数据类型、格式化输出、运算符
2022.3.4笔记总结
- 数据类型之字典dict
- 数据类型之集合set
- 数据类型之元组tuple
- 数据类型之bool值
- 与用户交互
- 格式化输出
- 运算符
数据类型之字典dict
我们都学了列表,列表是可以让一个变量储存多个数据,
info = ['jason', 18, 'read', 19, 888, 110, 'matao']
不难看出,虽然列表能够存储多个数据,但是我们并不知道这个数据是什么意思,因此字典就应运而生。
字典:
能够比较精确的存储信息或者数据,字典的内容用大括号{}括住,它的元素是以 Key:Value 的形式存储的,Key一般都是字符串,Value可以当作变量的值,具体形式如下 :
info = {'name': 'jason', 'age': 18, 'hobby': 'basketball'}
print(info) # 结果为:{'name': 'jason', 'age': 18, 'hobby': 'basketball'}
注意!字典里面的数据都是无序的,因此不能使用索引取值,但是可以通过冒号前面的Key取Value的值。
info ={'name': 'jason', 'age': '18', 'hobby': 'basketball'}
print(info('name'))
jason # 运行结果
那么字典是否可以像列表一样嵌套呢,答案是可以的
addr = {'美国': '纽约', '地球': ['韩国', '日本', {'中国':'上海', '印度': '爆炸'}, '泰国']}
但是这样又如何取值的,我们可以回忆列表的取值方式,结合列表和字典的取值方式,同样用中括号如下
# 假如我们需要取'上海'这个值
print(addr['地球'][2]['中国'])
上海 # 结果
# 因为上海的外层有三层中/大括号,所以我们只需要用三个中括号即可找出'上海'这个值
其实无论字典的内容有多长多复杂都可以通过拆解的方式进行分割从而找到所需要的值,如下。
addr = {'美国': '纽约',
'地球': ['韩国', '日本',
{'中国':'上海', '印度': '爆炸'},
'泰国']}
# 这样看起来是不是就一目了然了呢
数据类型之集合set
集合:
用大括号括起来,内部存放多个元素,用逗号隔开,但是不是k:v键值对,举例如下:
s = {1, 2, 3, 4, 5}
注意:如果大括号定义空的数据如 a = {},则这个数据类型默认为字典。
数据类型之元组tuple
元组:
跟列表几乎一致,只不过是用小括号括起来,内部存放多个元素,元素之间用逗号隔开,可以是任意数据类型。
另外,由于元组一般存储一些不可变的内容,因此元组又叫不可变的列表,如下:
t = (1, 2, 3, 4, 5, 'jason', 2.5)
元组的取值方式也是和列表一样的,
t1 = (1, 2, 3, 4, 5, 'jason', 2.5)
print(t[5])
jason # 运行结果
数据类型之布尔值bool
布尔值bool:
用来描述事物的对错,是否可行,主要用于逻辑判断,只有两种状态
True
False
注意:
- 在python中所有数据在进行逻辑判断的时候都会转成布尔值。
- 布尔值默认为False的数据:0, None, 空字符串, 空列表, 空字典...其他情况均为True
命名规范:
针对诺布尔值的变量名,一般采用is开头,如下
is_right = True
is_left = False
is_die = True
与用户交互
输入:
username = input('请输入您的姓名:')
注意:input获取到的用户输入都会转成字符串类型
输出:
print(username)
print(username, hobby, age) # print可以打印多个数据
编写方式:
- 直接写print(内容)
- 先写内容,然后使用句点+point
格式化输出
按照我的理解就是,先使用带有某种格式的语句,里面需要替换的数据用占位符%s和%d代替,如下:
s = '%s同学你好,经过层层筛选,您通过了我们公司的面试,请于%s前往公司办理入职手续,地址:%s'
print(s % ('马云', '1月1日', '上海市浦东新区周浦镇澄天伟业' ))
马云同学你好,经过层层筛选,您通过了我们公司的面试,请于1月1日前往公司办理入职手续,地址:上海市浦东新区周浦镇澄天伟业 # 运行结果
可以看出来,通过使用%s,我们可以替换相应的数据,那么结合与用户交互的知识,如何写出一个程序来让用户输入然后替换相应的值呢?如下:
username = input('请输入你的名字:')
age = input('请输入你的年龄:')
print('我的名字是%s,我今年%s岁。' % (username, age))
请输入你的名字:马云
请输入你的年龄:18
我的名字是马云,我今年18岁。 # 运行结果
%s和%d的区别
%s可以给任意数据占位
%d只能给数字占位
%d使用例如'%08d',代表从0到8的8位数,如下:
print('%08d' % 110)
00000110 # 运行结果,固定8位数
print('%09d' % 119)
000000119 # 运行结果,固定8位数
print('%07d' % 123456789)
123456789 # 运行结果,固定7位数,超出几位就是几位
运算符与赋值方式
简单数学运算
乘(*) 除(/) 整除(//) 取余(%) 等于(==)
增量赋值
+=, -=, *=, /=
- x += 100 (x = x + 100)
- x -= 100 (x = x - 100)
- x *= 100 (x = x * 100)
- x /= 100 (x = x / 100)
链式赋值
x = 1
y = x
z = y
简化: x = y = z
交叉赋值
m = 1
n = 2
思考:如何让m与n的值调换一下呢?
# 方式1:使用第三方变量
tem = m
m = n
n = tem
print(m, n)
2 1 # 运行结果
# 方式2:交叉赋值
m, n = n, m
print(m, n)
2 1 # 运行结果
解压赋值
创建一个列表name_list:
name_list = ['马云', '马化腾', '任正非']
name1, name2, name3, = name_list
print(name1, name2, name3)
马云 马化腾 任正非 # 运行结果
由此可见解压赋值可以批量赋值给列表里面的多个数据,但是注意:
- 解压赋值左边变量名和右边值个数要相等
- 但是通过*(星号)可以打破限制,例如下:
t = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a, b, *_ = t
print(a, b)
1 2 # 运行结果
a, *_, b = t
print(a, b)
1 10 # 运行结果
由此可见*+任意字符可以代表多个数据,一般我们不用的数据用_表示。
逻辑运算符
and (与)
- 用来连接多个条件,必须所有条件为True,结果才为True
or (或)
- 用来连接多个条件,只要有一个条件满足,结果都为True
not (非)
- 将条件反转,True为False,False为True
and,or,not,在一起使用的时候其实是有优先级的,但是我们不需要记,因为我们可以人为地将它们分类,强制规定好顺序,例如:
(3<4 and 2<1) or ((5 == 6 and 1 == 1) or '马云' == '马云')
这样在运行地时候就可以按照括号里面的先运行,在运行括号外面的了,就像数学(1+1)*5=10一样。
成员运算
成员运算是判断个体在不在群体内
in
not in
m = ['jason', '马云', 'tony']
print('马云' in m)
print('tony' not in m)
True # 结果为True
False # 结果为False
由此可见,这是一个判断的命令,所以最后转成了bool值,通过布尔值能够确定数据在不在m里面。
身份运算
is:判断两个数据的内存地址是否一致
==:判断两个数据的值是否相等
由于身份运算也是个判断句式,因此结果也是输出一个bool值,如下
m = 1
n = 1
print(m is n) # 结果为True
print(m == n) # 结果为True
好了今天的内容就到此结束了,有很多新的名词以及知识点,需要我们去熟悉,通过敲代码不断实践才能刻在脑子里,加油!!!