一、为什么会有数据类型?
- 更好地分配管理内存
- 方便统一管理
- 更贴近人类分类管理习惯
二、数据类型种类
- 数值类型: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位,并且通常是连续分配内存空间的。
例如:
print(id(1))#==>1707765216
print(id(2))#==>1707765248这两个数的内存地址正好相差32。
小整数对象池
python初始化的时候会自动创建一个小整数对象池,方便我们调用,避免后面重复生成。
这是一个包含了262个指向整数对象的指针数组,范围是-5到256。
也就是说,这262个数值,即使我们在程序里没有创建它,python在后台也悄悄为我们创建了。
这个对象池的作用是,节省开销,增快运行速度。
注意
pycharm中对于对象的删除并不会立即回收,而是等待一段时间,看是否有相同的调用,有的话就直接调用,没有的话超时就直接销毁。
如果实在命令行,或是其他开发环境,则没有或是可能没有缓冲。对于对象删除后就立即回收。
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开始。
示例:
str="刀剑神域"
print(str[0])#==>刀
print(str[2])#==>神
print(str[-1])#==>域
print(str[-3])#==>剑切片:
在python中,可以对字符串进行切片操作。其格式为:str[起始下标:结束下标]
示例:
str="刀剑神域"
print(str[0:3])#==>刀剑神
print(str[1:3])#==>剑神
print(str[2:])#==>神域
print(str[:2])#==>刀剑
print(str[0::3])#==>刀域
"""切片操作同样支持用负值,但需要遵循从左往右取的准则"""
print(str[-3:-1])#==>剑神切片操作还可以根据步长切片。其格式为:str[起始下标:结束下标:步长]
示例:
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中,字符串之间可以通过+进行连接。
示例:
a="刀剑"
b="神域"
print(a+b)#==>输出的内容为:刀剑神域字符串格式化
- %s%d%f
- str.format()
- python3.6.4 引入f''
示例:
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) --> 将序列中的元素以指定的字符连接生成一个新的字符串
部分详情,请见我的另一篇博文:链接
四、问题:
问题一:
当输入y或者Y的时候打印进入卸载,当输入n或N的时候打印退出程序,其他情况则打印输入不在选项范围你之内。
回答:
写法一:
ins=input("Please enter the instruction:")
if ins == "y" or ins == "Y":
print("进入卸载")
elif ins == "n" or ins == 'N':
print("退出程序")
else:
print("输入不在选项范围之内!")写法二:
ins=input("请输入指令:")
print('进入卸载' if ins=='y' or ins=='Y' else "退出程序" if ins=='n' or ins=='N' else "输入不在选项范围之内")问题二:
完成字符串的逆序以及统计
设计一个程序,要求只能输入长度低于20的字符串,当满足需求时,则打印出字符串长度以及使用切片逆序打印出字符串,当不满足需求时,打印用户重新输入。
回答:
写法一:
ins=input("Please enter the string(len<20):")
if len(ins)<20:
print(ins[::-1])
else:
print("用户重新输入")写法二:
ins=input("Please enter the string(len<20):")
print(ins[::-1] if len(ins)<20 else "用户重新输入")




Comments | NOTHING