数据类型
进制转换
- 十进制
- 基数0~9,逢10进1
- 示例:123 = 1 * 10^2 + 2 * 10^1 + 3 * 10^0 = 100 + 20 + 3 = 123
- 二进制
- 基数0和1,逢2进1
- 示例:0b110100 = 2^5 + 2^4 + 2^2 = 32 + 16 + 4 = 52
- 十进制转二进制:除2取余,倒序书写
- 22 = 0b10110
- 八进制
- 基数0~7,逢8进1
- 示例:0o123 = 1 * 8^2 + 2 * 8^1 + 3 * 8^0 = 64 + 16 + 3 = 83
- 八进制转二进制:八进制的1位可以表示3位二进制数
- 0o123 = 0b 001 010 011
- 十六进制
- 基数09、AF,逢16进1
- 示例:0xAB = 10 * 16^1 + 11 * 16^0 = 160 + 11 = 171
- 十六进制转二进制:十六进制的1位可以表示4位二进制数
- 0xABC = 0b 1010 1011 1100
- 计算机中是以哪种进制存储数据的,为什么?
- 二进制,因为计算机只识别二进制。具体原因:
- 稳定性高(只有0和1)、成本低(技术上容易实现)、与生活中的真假逻辑相吻合(便于解决生活中的实际问题)
- 原码反码补码
- 如何存储负数?
- 最高位作为符号位:0表示正数、1表示负数
- 虽然牺牲了最高位,但是解决了负数的表示问题,简化了硬件设计
- 原码反码和补码:是针对负数而言的(正数的三码一致)
- 负数的反码等于数据原码的符号位不变,数据位取反
- 负数的补码等于对应的反码加1
- 计算机中的数据都是以补码的形式存储的
- 如何存储负数?
数据类型
-
说明:编程语言中不同的数据类型都是为了解决生活中的实际问题而出现的,每种类型都有相关的运算。
-
python中常用数据类型:整形、浮点、布尔、字符串、列表、元组、字典、集合等
-
整型(int):就是数学中的整数
-
浮点(float):就是数学中的小数
# 浮点 b = 3.14 print(b, type(b)) # 科学计数法 c = 3.1415926e-3 print(c, type(c))
-
复数(complex)
# 复数:了解 d = 2 + 3j print(d, type(d))
-
布尔(bool):对应于生活中的真假逻辑,只有两个值
True/False
-
空(NoneType):空类型,只有一个值
None
-
字符串(str):使用引号括起来的一串字符
- 定义:一对单引号、一对双引号、三对单引号、三对双引号
- 转义:使用’’,使原来有特殊含义的字符变成普通字符,也可以在定义字符串的前面加一个’r’
-
列表(list):通过[]进行定义,可以存放一系列的任意数据,是一种容器类型
lt = [1, 2, 'hello', 3.14, True] print(lt, type(lt)) # 通过下标获取元素,有越界问题 print(lt[1])
-
元组(tuple):通过()进行定义,可以作为容器存放任意数据,虽然不能修改元组的元素,但可以给存储元组的变量赋值,元素是不可修改的
tp = (1, 2, [3, 4, 5]) print(tp, type(tp)) # 也是通过下标进行访问 print(tp[2]) # 定义一个元素的元组后面要添加一个, tp2 = (1,) print(tp2, type(tp2))
-
集合(set):通过{}进行定义,可以作为容器存放任意数据,但是元素是不能重复的,且是无序的
s1 = {'李白', '杜甫', '白居易', '王安石', '苏轼', '李白'} s2 = {'李白', '李商隐', '李清照', '李贺', '李煜', '苏轼'} # print(s1, type(s1)) # 交集 print(s1 & s2) # 并集 print(s1 | s2) # 差集 print(s1 - s2) print(s2 - s1) # 定义空集合不能使用{},这是留给定义空字典使用的 # 应该使用set() # s3 = {} # print(type(s3)) s4 = set() print(type(s4))
集合经常用于去重操作
-
字典(dict):通过{}进行定义
- 元素是由键值对组成的
- 键和值之间是有’:'进行连接
- 键是唯一的,而值可以是任意的
- 示例:
d = {'name': 'dahua', 'age': 18} print(d, type(d)) # 可以根据键获取值 print(d['name']) # 当键不存在时或报KeyError错 # print(d['height']) # 可以通过get方法根据键获取值, print(d.get('age')) # 当键不存在时不会报错,会返回None print(d.get('height')) # 可以设置默认值,有对应的键返回其值,没有时返回设置的默认值 print(d.get('weight', 75)) # 统计元素个数,字典统计的是键值对个数 print(len(d)) print(len(s1)) print(len(lt)) print(len('helloworld'))
类型转换
-
隐式类型转换:混合运算、条件判断
-
强制类型转换:使用专门的函数进行转换
int:转换为整型 float:转换为浮点 str:转换为字符串 list:转换为列表 tuple:转换为元组 set:转换为集合 dict:转换为字典
-
示例:
# 转换为整数 # a = int(3.14) # 参数1:需要转换的数据 # base:数据的进制类型,默认为十进制 # a = int('123', base=8) # a = int('abc', base=16) # 浮点 # a = float(250) # 字符串 # a = str(123) # 列表 # a = list('hello') # a = list((1, 2, 3)) # a = list({1, 2, 3}) # 可以转换不会报错,但是只保留了键 # a = list({'name': 'ergou', 'age': 18}) # 元组 # a = tuple([1, 2, 3]) # 集合 # a = set([1, 2, 3]) # 字典 lt = [('name', 'dahua'), ('age', 18)] a = dict(lt) print(a, type(a))
类型相关操作
-
字符串
s1 = 'hello' s2 = 'world' # 可以使用'+'将字符串拼接在一起 s3 = s1 + s2 print(s3) # '*'可以重复前面的字符串若干次 s4 = 'abc' * 3 print(s4) # len函数统计字符串长度 print(len(s1)) s = 'abcdefg' # 从开头进行提取,下标从0开始 print(s[0]) # 从末尾进行提取,下标从-1开始 print(s[-1]) # 切片 # 格式:s[开始:结束:步进] print(s[1:3]) # 当一边的边界省略,则提取到改侧的边缘 print(s[1:]) print(s[:4]) print(s[1:-2]) print(s[:-3]) print(s[-3:]) # 指定步进值,默认为1 print(s[::2]) # 逆序提取 print(s[::-1]) # 格式化 # %s:字符串 # %d:整型 # %f:浮点 # %c:字符 name = '二狗' like = '大花' age = 18 print('俺叫%s,暗恋%s,她今年%d岁' % (name, like, age)) # python中特有的解决方案 print('俺叫{},暗恋{},她今年{}岁'.format(name, like, age)) print('俺叫{2},暗恋{1},她今年{0}岁'.format(name, like, age)) print('俺叫{l},暗恋{n},她今年{a}岁'.format(n=name, l=like, a=age))
-
列表
lt = [1, 2, 3, 4, 5] print(lt[0]) print(lt[-1]) print(lt[1:3]) print(len(lt)) # 修改元素 lt[0] = 100 # 追加元素,将传递的元素作为一个整体(一个元素)追加到列表尾部 lt.append(200) # lt.append([300, 400]) # 将可迭代对象的元素展开添加到列表中 lt.extend([300, 400]) # 插入元素,在指定位置插入元素 lt.insert(2, 250) lt.insert(4, 250) # 删除元素 # 根据索引号删除 del lt[0] # 根据值进行删除,只会删除第一个 lt.remove(250) # 返回并删除:返回并删除指定下标的元素,默认是最后一个(把元素取出并继续使用) ele = lt.pop(2) # print(ele) # print(lt) lt = [1, 2, 3, 4, 5, 3] # 查询元组在列表中的索引号 # 找到就会返回其索引号,即第一个出现的位置 # 若不在列表中则会报错 print(lt.index(3)) # 统计元素在列表中出现的次数 print(lt.count(3)) # 逆序 lt.reverse() # 排序 # reverse=True表示降序排序 lt.sort(reverse=True) print(lt)
ASCII
-
说明:美国信息交换标准代码,就是用一个数字表示一个字符的规范
-
转换函数:
# 字符 => ASCII print(ord('A')) # ASCII => 字符 print(chr(97))