python基础数据类型 最后更新时间:2021年01月17日 ### 一、为什么会有数据类型? - 更好地分配管理内存 - 方便统一管理 - 更贴近人类分类管理习惯 ### 二、数据类型种类 - 数值类型:int、bool、float、complex - 序列类型: - 不可变:str、tuple、bytes - 可变:list - 映射类型:dict - 集合类型:set ### 三、数据类型 #### 1.数值类型: 数值类型是不可变的类型。 所谓不可变,是指类型的值有了变化,那么将会是一个全新的对象。比如1和2分别代表一个对象。 python支持三种不同的数值类型: - 整数 - 浮点数 - 复数 当然,布尔类型也可以理解为数值类型的一种。 ##### 整数(int): 整数通常被称为整型,数值为正或为负,不带小数点。通常用十进制来表示。 也可以使用其他进制表示: · 十六进制用0x作为前缀和0-9-a-f来表示,。也可以使用`hex()`方法来转换。如`0xad1`、`hex(123)` · 八进制用0o作为前缀和0-7来表示。也可以使用`cot()`来进行转换。 · 二进制使用0b作为前缀和0-1来表示。也可以使用`bin()`来进行转换 ###### 内存使用 python的整数长度为32位,并且通常是连续分配内存空间的。 例如: ```python print(id(1))#==>1707765216 print(id(2))#==>1707765248 ``` 这两个数的内存地址正好相差32。 ###### 小整数对象池 python初始化的时候会自动创建一个小整数对象池,方便我们调用,避免后面重复生成。 这是一个包含了262个指向整数对象的指针数组,范围是-5到256。 也就是说,这262个数值,即使我们在程序里没有创建它,python在后台也悄悄为我们创建了。 这个对象池的作用是,节省开销,增快运行速度。 ###### 注意 pycharm中对于对象的删除并不会立即回收,而是等待一段时间,看是否有相同的调用,有的话就直接调用,没有的话超时就直接销毁。 如果实在命令行,或是其他开发环境,则没有或是可能没有缓冲。对于对象删除后就立即回收。 ```python import time a=1000000 print(id(a))#==>2387445390672 del a b=1000000 print(id(b))#==>2387445390672 print(id(c)) ``` ##### 浮点数(float): 浮点数也就是小数,如1.23,3.14等等。 对于很大的或者很小的浮点数,一般采用科学计数法。把10用e代替,如1.23*10^9就记为1.23e9。 ###### 数据的转换 浮点数——>整数:`float(需要转换的整数)` 整数——>浮点数:`int(需要转换的浮点数)` 需要注意的是,整数转换为浮点数,是直接取数值的整数部分。舍弃小数部分。 ##### 复数(complex): 复数是由实数部分和虚数部分构成,可以用`a+bj`,或者`complex(a,b)`表示。 复数的实部a与虚部b都是浮点。 ##### 数值计算: | 函数名 | 作用 | |--------|--------| | math.ceil(i) | 对数值i向上取整 | | math.floor(i) | 对数值i向下取整 | | math.pow(x, y) | 计算x的y次幂,等价于x**y | | abs(i) | 对数值i取绝对值 | | round(i) | 对数值i四舍六入五取偶数 | ##### 布尔类型(bool)和空值(None): 但在python语言中,布尔类型只有两个值,True与False。 空值None是一个特殊存在,空值不等于0。 ###### 注意: 首字母必须大写,不能有其他的花式变型。 ###### bool()的使用 - 在数值中,非0或非0.0都为True。0和0.0为False。 - 在列表中,非空列表都为Treu,空列表为False。 - 在字符串中,除了空字符串为False,其他都为True。需要注意的是,空格字符串不是空字符串,也返回True。 - None(空值)的返回值永远为False。 ###### bool类型运算符 - and运算 - or运算 - not运算 - 算术运算,注意:把True当1,False当0 #### 2.字符串类型: 在python中,字符串的存储方式和数组类似,字符串中的每一个值都有与之对应的下标,下标编号从0开始。 示例: ```python str="刀剑神域" print(str[0])#==>刀 print(str[2])#==>神 print(str[-1])#==>域 print(str[-3])#==>剑 ``` ##### 切片: 在python中,可以对字符串进行切片操作。其格式为: `str[起始下标:结束下标]` 示例: ```python str="刀剑神域" print(str[0:3])#==>刀剑神 print(str[1:3])#==>剑神 print(str[2:])#==>神域 print(str[:2])#==>刀剑 print(str[0::3])#==>刀域 """切片操作同样支持用负值,但需要遵循从左往右取的准则""" print(str[-3:-1])#==>剑神 ``` 切片操作还可以根据步长切片。其格式为: `str[起始下标:结束下标:步长]` 示例: ```python str="刀剑神域" print(str[0:3:2])#==>刀神 """python支持步长用负值""" """步长为负时会逆向输出""" print(str[3:0:-1])#==>域神剑 print(str[3:0:-2])#==>域剑 print(str[3::-1])#==>域神剑刀 print(str[3::-2])#==>域剑 #需要注意的是,采用步长切片同样支持用负值,但需要遵循从左往右取的准则 a="刀剑神域刀剑神域" print(a[-1:3:-2]+a[-1]) ``` ###### 注意: - 索引默认从0开始 - 切片时左闭右开 - 当是取单个字符的时候,索引超出范围会报错。而切片时不会报错。 - 步长不能为0,也不允许为浮点数 - 即使是使用负数进行切片,顺序也要遵从从左往右的顺序。 ##### 字符串组成: ###### 字符串相加 在python中,字符串之间可以通过+进行连接。 示例: ```python a="刀剑" b="神域" print(a+b)#==>输出的内容为:刀剑神域 ``` ###### 字符串格式化 - %s%d%f - str.format() - python3.6.4 引入f'' 示例: ```python name="kirito" age=16 print("你的名字是%s,你的年龄是%d"%(name,age)) print("你的名字是{},你的年龄是{}".format(name,age)) ``` ##### 字符串常见方法 - str.find(sub) --> 返回该元素最小的索引 - str.index(sub) --> 返回该元素最小的索引 - str.replace(old, new[, count]) --> 替换 - str.split(sep=None) --> 以sep来分割字符串,并返回列表。sep默认为None,分割默认为空格 - str.startswith(prefix[, start[, end]]) --> 判断字符串是否以前缀开始,返回为bool值。 - str.endswith(suffix[, start[, end]]) --> 判断字符串是否以尾缀结束,返回为bool值。 - str.lower() --> 将字符串全部转为小写 - str.upper() --> 将字符串全部转为大写 - str.strip([chars]) --> 默认去掉字符串左右的空格 - str.isalpha() --> 判断字符串是否全为字母,返回的是bool值 - str.isdigit() --> 判断字符串是否全为数字,返回的是bool值 - str.isalnum() --> 判断字符串是否全为数字或者字母,不存在特殊字符,返回的是bool值 - str.join(iterable) --> 将序列中的元素以指定的字符连接生成一个新的字符串 部分详情,请见我的另一篇博文:[链接](https://www.yuque.com/yidaimingjun/ohzhwz/dgk0y4) ### 四、问题: ##### 问题一: 当输入y或者Y的时候打印进入卸载,当输入n或N的时候打印退出程序,其他情况则打印输入不在选项范围你之内。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201223171258153.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MjIxMTM1Mg==,size_16,color_FFFFFF,t_70) 回答: 写法一: ```python ins=input("Please enter the instruction:") if ins == "y" or ins == "Y": print("进入卸载") elif ins == "n" or ins == 'N': print("退出程序") else: print("输入不在选项范围之内!") ``` 写法二: ```python ins=input("请输入指令:") print('进入卸载' if ins=='y' or ins=='Y' else "退出程序" if ins=='n' or ins=='N' else "输入不在选项范围之内") ``` ##### 问题二: 完成字符串的逆序以及统计 设计一个程序,要求只能输入长度低于20的字符串,当满足需求时,则打印出字符串长度以及使用切片逆序打印出字符串,当不满足需求时,打印用户重新输入。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201223171306443.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MjIxMTM1Mg==,size_16,color_FFFFFF,t_70) 回答: 写法一: ```python ins=input("Please enter the string(len<20):") if len(ins)<20: print(ins[::-1]) else: print("用户重新输入") ``` 写法二: ```python ins=input("Please enter the string(len<20):") print(ins[::-1] if len(ins)<20 else "用户重新输入") ``` ##### 问题三: ‘3’+‘4’的结果是什么? ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020122317131751.png) 回答: 结果是字符串类型的34.因为3和4都是字符串,使用+号的时候不做数值运算,而是作为文本连接符使用。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201223171131619.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201223171136425.png) [1]: https://www.yidaimingjvn.xyz/usr/themes/Akina/images/postbg/7.jpg
Comments | NOTHING