目录
一、数据类型
1、数据类型之布尔值:bool
布尔值就是关于对错的判断,可以在程序中判断是否符合条件,主要用于流程控制中。由True(对)和False(错)组成,python中需要用大写的英文来表示。
python中的数据值都是有布尔值的,其中0、None和'' 、[]、{}、()的布尔值是False,其他的都是True。
存储布尔值的变量名通常都是is开头的(也是一种君子协定)。例如:is_work = True
2、数据类型之元组:tuple
元组可以说是用小括号组成的列表,中间的数据同样是用逗号隔开,数据类型可以是任意的。同时元组也可以索引取值,但是元组中绑定的内存地址不能修改,如果绑定的是一个列表,我们依旧可以修改列表中的数据值。
举例:
example = (11, 22, 33, 44, [12, 23, 34, 'name'])
通过运行代码,我们可以发现修改其他元组内的数据值会直接报错,但是修改列表内的数据值是可以的。
特殊情况:
当元组内只有一个数据值,需要在小括号内的数据值后跟上一个逗号,否则数据类型就不是元组了,会变成你所写的数据对应的类型。
example1 = (11,) # 是tuple类型
example2 = (11) # 是int类型
列表和元组的区别
列表是动态数组,它们可变且可以重设长度(改变其内部元素的个数)。
元组是静态数组,它们不可变,且其内部数据一旦创建便无法改变。
元组缓存于Python运行时环境,这意味着我们每次使用元组时无须访问内核去分配内存。
这些区别结实率两者在设计哲学上的不同:
列表可被用于保存多个互相独立对象的数据集合
元组用于描述一个不会改变的事务的多个属性
3、数据类型之集合:set
集合跟数学中的集合定义相似,用大括号组成,中间插入数据值并用逗号隔开,但是不像字典需要kv键值对的形式表示。
举例:
s1 =
集合多用于去重和关系运算,只能是不可变类型,空集合需要用特殊的方法定义,否则会显示成字典类型。
举例:
s1 = {}
s2 = set()
print(type(s1)) # <class 'dict'>
print(type(s2)) # <class 'set'>
二、与用户交互
当我们去银行的时候,我们办理业务,需要跟柜台上的工作人员交流,说明自己的需求才能办理业务。比如工作人员需要问我们要办理什么业务,我们回答取钱,接着就会问我们需要取多少,我们会报上自己的金额。在代码中也有相应的函数体现相应的功能。
1、获取用户输入
input函数
当我们运行input函数时,pycharm的运行窗口中会有光标闪烁,等待我们输入信息。(input输入的数据值会变成字符串类型)
举例:
input('请输入相关信息:')
我们也可以把变量名跟input函数绑定,方便后面继续使用数据。
input函数的括号内部可以加入文本注释,方便他人理解。
2、输出内部信息
print函数
可以把想要打印的数据值、函数名等信息打印出来。括号内部可以用逗号隔开,一次性打印多个数据。
举例:
print('name',11)
扩展:python2与python3中两个关键字的区别
python2中
input方法需要用户自己提前指定数据类型 写什么类型就是什么类型
在python3中所有的数据都会被处理成字符串
在python2中有两个获取用户输入的方式
input()是会返回输入数据值的对应类型的数据值。
raw_input方法与python3中input一致 输入的统一处理成字符串
python2中
print方法有两种使用方式
print 数据值
print(数据值)
3、换行符
python中\n和\r、\r\n都是换行符,但是\n用的较多,我们使用print()打印文本时可以在文本的对应位置输入换行符,打到换行的效果。同时我们也不难发现使用print打印时会自动换行,这是因为print函数中自带换行符,我们也可以更改print的end=''信息来达到不换行输出的目的。(默认情况下end='\n')
举例:
print('使用print打印时会自动换行',end='')
print('使用print打印时会自动换行')
#这两行代码会在同一行输出
print('使用print打印时\n会自动换行')
#会分两行输出
注:输出多个数据时,如果想要输出换行符需要在引号内输入\n并且要用逗号隔开。如果输出字符串,可以放在字符串的引号内。
三、格式化输出
%s和%d
python中有两种格式化输出的占位符——%s和%d。其中%s(字符串)适用于所有数据类型,%d只适用于整数,还有其他类型的占位符。举例:
%r 字符串 (采用repr()的显示)
%c 单个字符
%b 二进制整数
%d 十进制整数
%i 十进制整数
%o 八进制整数
%x 十六进制整数
%e 指数 (基底写为e)
%E 指数 (基底写为E)
%f 浮点数
%F 浮点数,与上相同
%g 指数(e)或浮点数 (根据显示长度)
%G 指数(E)或浮点数 (根据显示长度)
%% 字符"%"
%s使用展示:
1、%s,字符串占位符,使用str()方法转换任何Python对象,包括整数int,浮点数float,如:
print('%s,%s,%s'%('字符串',10,1.0))
结果:'字符串',10,1.0
infor = '你是猪你是猪你是猪你是%s'
infor1 = 'zhu'
print(infor % infor1)
print('你是猪你是猪你是猪你是%s' % '猪')
print(infor % '猪')
infor = '你是%s你是%s你是%s你是%s'
print(infor % ('猪','猪','猪','猪')
输出时可以在输出文本的同时输出占位符,也可以用变量名代替占位符内容和本文内容。但是当一次性输出多个占位符内容是,需要输入相同个数的内容(多了或者少了都会报错),内容输出时要用括号括起来,并用逗号隔开。
%d使用展示:
2、%d,整数(int)占位符,也可以表示浮点数float(只取整数部分),如:
print('代表整数:%d,代表浮点数:%d'%(1,1.9))
结果:代表整数:1,代表浮点数:1.9
3、%f
浮点数(float)占位符,也可以表示整数(int),都是默认为保留小数点后6位,如:
print('代表浮点数:%f,代表整数:%f'%(1.234,1))
结果:代表浮点数:1.234000,代表整数:1.000000
问题:如果我们不想保留小数点后6位,想自主定义保留几位,该怎么写?
解决办法:在%后面加上需要保留的位数个数即可
格式:%.nf,n表示保留n位小数
print('保留2位小数:%.2f'%1.2345)
结果:保留2位小数:1.23
%08d
百分号后的0可以用其他字符表示,同时8 的位置也可以用更多的数值表示。
infor = '你是猪你是猪你是猪你是%08d'
print(infor % '1234567789')
print(infor % '123')
表示的是把输入的数据值输出,如果数据值小于八位,不足八位的地方用0填充,如果超过八位则全部输出。
四、基本运算符号
1、数学运算符号
加:+、减:-、乘:*、除:/、赋值符号=、乘方:**、取余数:%、整除://
通常代码中都会简化运算的表达式:
2、比较运算符号
大于:>、小于:<、大于等于:>=、小于等于:<=、等于号:==、不等于:!=。
比较运算符号返回的都是布尔值
五、常用赋值符号
python中的“=”号跟数学中的含义不同,“=”的称呼是赋值符号,顾名思义就是把值赋予给某个对象。在python中,“age = 19”中就是把右边的数据值赋值给左边的变量。
1、链式赋值
给多个变量名绑定同一数据值
举例:
#看着很累的方法
name='你好'
name= name1
name1=name2
#简短高效的方法
name=name1=name2='你好'
2、交叉赋值
把两个变量名互相交换数据值
m=999
n=666
change=m
m=n
n=change
#这是比较繁琐的交叉赋值表达方式
m,n=n,m
#这是更加简洁的交叉赋值表达方式
3、解压赋值
当一个列表内有个数据值需要跟多个变量名绑定时,可以使用解压赋值。
解压赋值的时候正常情况下数据值个数和变量名个数需,否则会报错。
s1 = [1,2,3,4,5]
name,name1,name2,name3,name4 = s1
当数据值较多的时候,而我们又用不到中间的没用数据时,可以用*号收取多余数据值。可以取前面的树枝也可以取后面的数值。
s1 = [1,2,3,4,5]
a,*b = s1
*c,d = s1
print(a)
print(b)
print(c)
print(d)
六、逻辑运算符号
1、and
当and所连接的所有条件都成立时,返回True,否则返回False。
print(1<2and2>3) # False
print(1<2and2<3) # True
#and 运算符号输出时会输出最后一项的结果,如果不成立,就会输出不成立的第一项。
#当val = 1 and 3
这种形式的时候,除了要分辨条件是否成立,当我们print结果时,显示的结果会是3(输出最后的条件)
#当val = 0 and 3
这种形式的时候,先分辨条件是否成立,如果不成立就输出0
#当val = 1 and 1<3
这种形式的时候,先分辨条件是否成立,判断成立后,根据最后一项1<3会返回布尔值True
2、or
当or所连接的所有条件中有一个成立,就返回True,否则返回False。
print(1<2or2>3) # True
print(1>2or2>3) # False
#当or运算符号成立时,输出的结果时成立的第一项,如果一个都不成立,就会输出最后一项。
#当val1 = 1 or 3
这种形式的时候,除了要分辨条件是否成立,当我们print结果时,显示的结果会是1(输出第一个成立的条件)
#当val1 = 0 or 1>3和val2 = 1>3 or 0
这种形式的时候,先分辨条件是否成立,可以看出两个都不成立,所以我们可以通过打印发现val1的返回值是False,val2的返回值是0
3、not
返回与原来相反的布尔值。
is_example = True
print(not is_example)
以下假设变量 a 为 10, b为 20:
运算符名称 | 运算符表达式 | 描述 | 示例 |
---|---|---|---|
and | x and y | 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 | (a and b) 返回 20。 |
or | x or y | 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 | (a or b) 返回 10。 |
not | not x | 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 | not(a and b) 返回 False |
七、成员运算符号
in
用于判断变量名或数据值是否在某个数据值或变量名内部。(例如个体是否在群体内部)
name_list = ['jason', 'kevin', 'oscar', 'jerry']
print('ja' in name_list) # False
print('jason' in name_list) # True
其中数据值也可以用变量名代替
not in
用于判断变量名或数据值是不是不在某个数据值或变量名内部。(与in相反)
运算符名称 | 描述 | 示例 |
---|---|---|
in | 如果在指定的序列中找到值返回 True,否则返回 False。 x 在 y 序列中 , | 如果 x 在 y 序列中返回 True。 |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
注:
1.字符串成员运算最小单位是单个单个的字符
2.列表成员运算最小单位是单个单个的数据值
3.字典成员运算最小单位是键(值不参与)
八、身份运算符号
is
相关知识拓展:
id()函数:可以返回数据值或变量名当前绑定的内存地址
is 运算符用于判断两个用来比较的对象内存地址是否相同。
a= ['jason', 'kevin', 'oscar', 'jerry']
b= ['jason', 'kevin', 'oscar', 'jerry']
print(a == b)
#会返回True
print(a is b)
#会返回False
从这里我们可以得出一个结论:内存地址相同时,两者数据值一定相同,数据值相同时,内存地址不一定相同。
not is
运算符名称 | 描述 | 示例 |
---|---|---|
is | is 是判断两个标识符是不是引用自一个对象 | x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False |
is not | is not 是判断两个标识符是不是引用自不同对象 | x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。 |
==
判断数据值是否相同,跟数学中的等于号一个意思。
小整数池
当我们把两个不同的变量名绑定相同的数据值时,python解释器会进行优化,pycharm也会进行一定的优化,一些位数较小的数字和一些较短的字符串当被检测到相同时,内存空间中会只用一个地址表示,反之,就会使用两块内存空间中的地址表示
# 整形:较短的可以
a1 = 11
a2 = 11
print(a1 is a2)
#浮点型:较短的可以
a3 = 11.11
a4 = 11.11
print(a3 is a4)
#字符串:较短的可以
a5 = 'jason'
a6 = 'jason'
print(a5 is a6)
#列表:无论长短都不可以
a7 = [1,2,3]
a8 = [1,2,3]
print(a7 is a8)
#字典:无论长短都不可以
a9 = {'name' : 'zzh','age' : '21'}
a10 = {'name' : 'zzh','age' : '21'}
print(a9 is a10)
#元组:较短的可以
a11 = (1,2,3)
a12 = (1,2,3)
print(a11 is a12)
#集合:无论长短都不可以
a13 = {1,2}
a14 = {1,2}
print(a13 is a14)
九、位运算符
运算符名称 | 描述 | 示例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
十、运算符优先级
运算符名称 | 描述 |
---|---|
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,求余数和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& 位 | ‘AND’ |
<= < > >= | 比较运算符 |
== != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
十一、作业
1、获取用户输入并打印成下列格式
# 只打印文本
# 方法一:分开打印
print('------------ info of Jason ----------- ')
print('Name : Jason ')
print('Age : 18 ')
print('sex : male ')
print('Job : Teacher ')
print('------------- end -----------------')
# 方法二:用换行符
print(
'------------ info of Jason -----------\n Name : Jason\n Age : 18\n sex: male\n Job : Teacher\n ------------- end -----------------')
# 格式化输出
# 方法一
name = input('姓名:')
age = input('年龄:')
sex = input('性别:')
job = input('工作:')
print('------------ info of %s ----------- ' % (name))
print('Name : %s ' % (name))
print('Age : %s ' % (age))
print('sex: %s ' % (sex))
print('Job : %s ' % (job))
print('------------- end -----------------')
# 方法二
name = input('姓名:')
age = input('年龄:')
gender = input('性别:')
job = input('工作:')
information = (
'------------ info of %s -----------\n Name : %s\n Age : %s\n sex : %s\n Job : %s\n ------------- end -----------------')
print(information % (name, name, age, sex, job))
2、准备说出下列变量名v绑定的结果 v1 = 1 or 3 结果是1
v2 = 1 and 3 结果是3
v3 = 0 and 2 and 1 结果是0
v4 = 0 and 2 or 1 结果是1
v5 = 0 and 2 or 1 or 4 结果是1
v6 = 0 or False and 1 结果是False