4.1 Number 数字
数据类型是不允许改变的
整数:int 通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用,布尔(bool)是整型的子类型。
浮点数:float 浮点型由整数部分与小数部分组成
复数:complex 复数由实数部分和虚数部分构成
主要用计算,使用不多,记住以下就行:
加:+ 减:- 乘:* 除: / 取余:% 整除:// 幂:**
取值范围:
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
i= 5.8 # 浮点数
print(int(i)) # 转换位 整数 精度损失
s = str(i) # int 转换为字符串 b = bool(i) # int 转换为布尔值 只有0是False 非0都是True
bool :布尔型 ,如:True、False
True 真 1
False 假 0
注意:Python3 中,bool 是 int 的子类,True 和 False 可以和数字相加 True==1,False==0 是会返回 Ture,但可以通过 is 来判断类型。
# 同上 布尔值转换为int 只 能输出 0 和 1 i = int(True) b = int(False) while True: pass while 1: # 这个效率更高,因为电脑只识别0101二进制,True还要转换以下 pass
4.2 字符串 String:一般用英文:'内容' , "内容" , ''' 内容:多行''' ,
可以相加,可以数字加乘,存放少量数据
同上 字符串转换为 int 或布尔值 c = "123" b = int(c) # 注:字符串转换为int 前提条件必须是 数值类型 字符串转换为布尔值 s = "" --> False #非空字符串都是True s if s: print('你输入的为空,请重新输入') else: pass
# 字符串的索引与切片 s = 'ASDFGHJKL' #索引 字符串有一定顺序,且从0开始 s1 = s[0] # 新的s1与上面的s已经没有任何关联 print(s1) >> A s3 = s[-1] # 如果字符串很长,我又去最后几位 就可以倒着取 print(s3) >> L # 切片 取前不取后 s2 = s[0:4] # 不影响s哦 print(s2) >> ASDF s4 = s[0:] # 全部取,你以为是 = [0:-1] 你会发现最后一位没取,记得取后不取前 s5 = s[:] # 也可以这样写哦! print(s4,s5) >> ASDFGHJKL ASDFGHJKL # 跳这取 s[首:尾:步长] s6 = s[0:6:2] print(s6) >> ADG # 倒着切 s7 = s[4:0:-1] print(s7) >> GFDS s8 = s[4::-2] # 倒着跳取 到最前面那位 print(s8) >> GDA s9 = s[-1::-1] # 倒着取完 print(s9) >> LKJHGFDSA s10 = s[::-1] # 倒着取完另一种方法 print(s10) >> LKJHGFDSA
# 字符串的操作 s = 'asdfghj' # capitalize 首字母大写 s1 = s.capitalize() print(s1) >> Asdfghj # upper 全部大写 s2 = s.upper() print(s2) >> ASDFGHJ ''' # 一道题 请输入验证码的题 s21 = 'sdFG' s22 = input("请输入验证码,不区分大小写 ") if s21.upper() == s22.upper(): print('验证码正确') else: print('验证码错误') ''' # lower 全部小写 s3 = s.lower() print(s3) >> asdfghj # swapcase 大小写翻转 s4 = s.swapcase() print(s4) >> ASDFGHJ # title 每个隔开(特殊字符或数字)单词首字母大写 s5 = 'asd vbn fgh' s51 = s5.title() print(s51) >> Asd Vbn Fgh # center 填充 s6 = s.center(20) # 居中填充 不写默认空白填充 s61 = s.center(10,'*') # 可以跟参数 10是算字符串总的为 不满用参数填充 print(s6,s61) >> asdfghj *asdfghj** # \t 加上前面所占不到8位补8位,超过8位不足16位补16位 s7 = 'fg\tkl' s71 = s7.expandtabs() print(s71) >> fg kl # len 计算字符串长度 s8 = len(s) print(s8) >> 7 # startswith 判断字符串是否以什么开头只能返回 True和False ,后面不加条件 就判断整体 s9 = 'asdDFG' s91 = s9.startswith('a') s92 = s9.startswith('d',2,5) # 可以切片判断 print(s91,s92) >> True True # find 通过元素 找元素所占的索引,找不到就返回-1 s9 = 'asdDFG' s10 = s9.find('D') s101 = s9.index('D') # 另一种方法 找不到会报错 ,首选find print(s10,s101) >> 3 3 # strip 删除前后元素 默认删除前后空格 s11 = ' hjkl ' s111 = s11.strip() s112 = '$%kljflk*' s113 = s112.strip('*$%') # 可以加参数,里面不按顺序 s114 = s112.rstrip('*$%') # 从右删,左边不动,同理 lstrip:从左删 右边不动 print(s111,s113,s114) >> hjkl kljflk $%kljflk # 附一道小题 # username = input('请输入你的名字:') # if username.strip() == '小米': # print('答对了') # count 计数 s12 = s.count('a') # 数字符串所有的元素,也可以两个一起'as' print(s12) >> 1 # split 分割 也是字符串转换成列表的一种方式 s13 = 'kjh jkjhk kjhjk' s131 = s13.split() # 括号里是参数,分隔后参数是不显示的 print(s131) >> ['kjh', 'jkjhk', 'kjhjk']
str.split(str="", num=string.count(str)) # 第一个是以哪个参数分割 ,num这个字符串里有多个参数 分割次数,num有指定值则分割num+1,默认为-1,即分割所有 s = 'alexwusirlex' li = s.split('l',1) # 以l分割第一个 print(li) #>> ['a', 'exwusirlex']
#format 格式化输出 s14 = '我叫{},今年{},喜欢{}'.format('huang',25,'girl') s141 = '我叫{0},今年{1},喜欢{1}'.format('huang',25,'girl') s142 = '我叫{name},今年{age},喜欢{hobby}'.format(name='huang',age=25,hobby='girl') print(s14,s141,s142) >> 我叫huang,今年25,喜欢girl 我叫huang,今年25,喜欢25 我叫huang,今年25,喜欢girl # replace 替换 s15 = '我来看你了你知道吗你知道吗' s151 = s15.replace('知道','haha',1) # 替换 目标,值 ,有相同的第几个 print(s151) >> 我来看你了你haha吗你知道吗
tuple:元组,元组被称为只读列表,即数据可以被查询,但不能被修改,所以,字符串的切片操作同样适用于元组。
例:(1,2,3)("a","b","c")
# 元组 只读列表 可循环查询 可切片 儿子不能改 孙子可能可以改 ts = ('name','age','column',[1,2,'hello'],'man') print(ts[3][2]) # 查 >> hello ts[3][2] = ts[3][2].upper() # 改孙子元素 print(ts) >> ('name', 'age', 'column', [1, 2, 'HELLO'], 'man') ts[3].append('ha') # 添加 print(ts) >> ('name', 'age', 'column', [1, 2, 'hello', 'ha'], 'man')
# python range() 函数可创建一个整数列表,一般用在 for 循环中。 # # 函数语法 # range(start, stop[, step]) # 参数说明: # start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5); # stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5 # step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1) for i in range(0,10): # (开始,结束,步长) print(i) >> 0 1 2 3 4 5 6 7 8 9 for s in range(10,0,-2): print(s) >> 10 8 6 4 2 for d in range(3,-10,-2): print(d) >> 3 1 -1 -3 -5 -7 -9
# 一道题 两种方法参考 li = [1,2,3,5,'alex',[2,3,4,5,'taibai'],'afds'] # 都打印出来 包括里面的列表元素 # for i in li: # if type(i) == list: # for k in i: # print(k) # else:print(i) for i in range(len(li)): if type(li[i]) == list: for j in li[i]: print(j) else:print(li[i])
list:列表:[] 括起来,每个元素以逗号隔开,可以存储大量数据,而且他里面可以存放各种数据类型比如:
li = [‘alex’,123,Ture,(1,2,3,’wusir’),[1,2,3,’小明’,],{‘name’:’alex’}]
列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大量数据,32位python的限制是 536870912 个元素,64位python的限制是 1152921504606846975 个元素。
而且列表是有序的,有索引值,可切片,方便取值。
# 列表 增删改查 # 增加 append 还在基础上增加 没有创建新的 p.append('happy,new year') print(p) # HR 输入名字 持续增加 当输入Q的时候 就退出 # while 1: # username = input('>>>') # if username.strip().upper() == 'Q': # break # else: # p.append(username) # print(p) # insert 插入 p.insert(4,'老铁') print(p) # extend 插入可迭代的元素 p.extend('你好') p.extend([1,2]) print(p) # 删 pop p2 = p.pop() # 有返回值 不填参数 默认删最后一个 p21 = p.pop(4) # 指定索引位删 print(p,p2,p21) # remove 按元素删 p.remove('i love you') print(p) # clear 清空列表 但不删列结构 p.clear() print(p) # del del p[0:2] # 切片删 del p # 全删包括列 print(p) # 你会发现报错 ,因为没有了,所以他肯定报错 # 改 p[0] = '你好' # 直接对应的 索引位改 p[0] = [4,5,6] # 也可以直接改列表 p[0:3] = '你好' # 把前三个删了 划分到最小的元素添加 p[0:3] = ['hao','ba'] # 添加列表里每一个元素 print(p) # 查 print(p[0:4]) # 直接查 l = len(p) # 查列表长度 print(l) # count 查一个元素的次数 print(p.count('ba')) # index 查元素在列表中的索引位 print(p.index('hao')) # sort 排序 s = [1,6,5,9,10] s.sort() # 正向排序 print(s) s.sort(reverse = True) # 倒向排序 print(s) s.reverse() # 翻转 print(s)
# 列表的嵌套 t = ['xiaomi','haha','happy new year',1,2] print(t[1][1]) # 找里面元素的元素 name = t[1].capitalize() # 所选的元素的首字母大写,但里面本质没有改变 print(name) print(t) t[0] = name # 这样里面元素已经改变 print(t) print(t[2].replace('h','好')) # 里面元素替换 t[2] = t[2].replace('h','好') print(t)
# 列表转换成 字符串 join 字符串转换成列表 split s ='huang' s1 = '+'.join(s) # 可以对可迭代对象任何操作 print(s1) #>> h+u+a+n+g # ''.join() li = ['alex','wusir','rain'] s2 = ''.join(li) print(type(s2)) print(s2) #>> <class 'str'> #>> alexwusirrain
dict:字典,用{ } 括起来,key不存在重复
''' # dict # 数据类型划分:可变、不可变 # 不可变 :元组、bool、int、str 可哈希 # 可变:list、dict、set 不可哈希 # dict key 必须是不可变得数据类型 可哈希 value 任意数据类型。 dict 优点:二分查找去查询、存储大量的关系型数据 特点:3.5版之前是无序的 ''' dict = { 'name':'小米', 'age':'18', 'p1':[{'xuexi':15},20] } # 增 dict['hello'] = 'world' print(dict) # >> {'name': '小米', 'age': '18', 'p1': [{'xuexi': 15}, 20], 'hello': 'world'} # 如果有了 会直接覆盖掉 dict['age'] = 25 print(dict) # >> 'name': '小米', 'age': 25, 'p1': [{'xuexi': 15}, 20], 'hello': 'world'} # setdefault dict.setdefault('身高') # 没有vlaue会填充None print(dict) # >> {'name': '小米', 'age': 25, 'p1': [{'xuexi': 15}, 20], 'hello': 'world', '身高': None} dict.setdefault('age','20') # 对里面有键值对,不做任何改变,没有参会添加 print(dict) # >> {'name': '小米', 'age': 25, 'p1': [{'xuexi': 15}, 20], 'hello': 'world', '身高': None} # 删 # pop print(dict.pop('age')) # 有返回值 print(dict) # >> 25 # >> {'name': '小米', 'p1': [{'xuexi': 15}, 20], 'hello': 'world', '身高': None} print(dict.pop('age',None)) # 如果字典里没有你要删除的键值对,你就要加个返回值,可自定义 防止报错飘红 print(dict) # >> None # >> {'name': '小米', 'p1': [{'xuexi': 15}, 20], 'hello': 'world', '身高': None} # popitem print(dict.popitem()) # 删除最后一个,3.5以前随机删除 ,返回值 删除的键值对 print(dict) # >> ('身高', None) # >> {'name': '小米', 'p1': [{'xuexi': 15}, 20], 'hello': 'world'} # del del dict['name'] # 所在键值对不在时会报错 print(dict) # >>{'p1': [{'xuexi': 15}, 20], 'hello': 'world'} dict.clear() # 清空字典 print(dict) # >> {} # 改 # 直接改 dict['age'] = 18 print(dict) # >> {'age': 18} # update dict1 = {'name':'xiaomi','hello':'world'} dict.update(dict1) # 把dict1的全部键值对 添加到 dict ,相同的覆盖 print(dict1) print(dict) # >> {'name': 'xiaomi', 'hello': 'world'} # >> {'age': 18, 'name': 'xiaomi', 'hello': 'world'} # 查 print(dict.keys()) print(dict.values()) print(dict.items()) # >> dict_keys(['age', 'name', 'hello']) # >> dict_values([18, 'xiaomi', 'world']) # >> dict_items([('age', 18), ('name', 'xiaomi'), ('hello', 'world')]) v1 = dict['name'] # 输出是值,没有就会报错 print(v1) # >> xiaomi # get print(dict.get('name')) # 有就会直接返回值 没有就会返回None print(dict.get('name2','没有这个值')) # 也可以自定义 # >> xiaomi # >> 没有这个值 a,b = 1,2 a,b = [1,2] a,b = [1,2],[3,4] print(a,b) # >> 1 2 # >> 1 2 # >> [1,2] [3,4] # 用一行代码把 a b 值交换 a = 1 b = 2 a,b = b,a print(a,b) # >> 2 1 # 一一对应,接受值 for k,v in dict.items(): print(k,v)
# 嵌套 dic = { 'name':['xiaomi','zhangsan','lisi'], 'jihe':{ 'time':'123', 'learn_money':19800, 'leader':'huang' }, 'age':18 } # 改 dic['age'] = 25 print(dic) #>> {'name': ['xiaomi', 'zhangsan', 'lisi'], 'jihe': {'time': '123', 'learn_money': 19800, 'leader': 'huang'}, 'age': 25} dic['name'].append('leader') print(dic) # >> {'name': ['xiaomi', 'zhangsan', 'lisi', 'leader'], 'jihe': {'time': '123', 'learn_money': 19800, 'leader': 'huang'}, 'age': 25} dic['name'][1] = dic['name'][1].upper() # 其中一个值改大写 print(dic) # 》{'name': ['xiaomi', 'ZHANGSAN', 'lisi', 'leader'], 'jihe': {'time': '123', 'learn_money': 19800, 'leader': 'huang'}, 'age': 25} dic['jihe']['gou'] = 8 print(dic) # >> {'name': ['xiaomi', 'ZHANGSAN', 'lisi', 'leader'], 'jihe': {'time': '123', 'learn_money': 19800, 'leader': 'huang', 'gou': 8}, 'age': 25} # 一道题 f = input('>>>') for i in f: if i.isalpha(): f = f.replace(i,'') o = f.split() print(o) print(len(str(o)))
set:集合,用{ } 括起来,集合是无序的,不重复的数据集合,里面的元素是不可变类型
# is 比较,比较的事内存地址 ''' # 集合:可变的数据类型,它里面的元素必须是不可变得数据类型,无序,不重复,{} set = {1,'sdfsd',2,3,'hello'} # add 增加 set.add("name") print(set) # >> {1, 2, 3, 'name', 'sdfsd', 'hello'} # update set.update('leader') print(set) # >> {1, 2, 3, 'hello', 'a', 'd', 'name', 'l', 'r', 'sdfsd', 'e'} # pop 删除 set.pop() print(set.pop()) # 随机删除 有返回值 print(set) # 》 1 # 》 {2, 3, 'd', 'r', 'l', 'sdfsd', 'hello', 'a', 'e'} # remove set.remove(2) # 按元素去删 print(set) # 》{'sdfsd', 1, 3, 'hello'} # clear 清除集合 set.clear() print(set) # >> set() # del 删除整个集合 del set print(set) # >> <class 'set'> # 查 for i in set: print(i) # 求交集 set1 = {1,2,3,4,"hello"} set2 = {1,4,2,5,"world"} set3 = set1 & set2 # 第一种 print(set3) # >> {1, 2, 4} print(set1.intersection(set2)) # 第二种 # 》 {1, 2, 4} # 求并集 print(set1 | set2) # 》 {1, 2, 3, 4, 5, 'world', 'hello'} print(set1.union(set2)) # >> {1, 2, 3, 4, 5, 'world', 'hello'} # 反差集 print(set1 - set2) # 》 {'hello', 3} print(set1.difference(set2)) # >> {3, 'hello'} # 子集 超集 print(set1 < set2) print(set1.issubset(set2)) # 这两个相同,若返回True 则set1是set2子集 print(set2 > set1) print(set2.issuperset(set1)) # 这两个相同,若返回True 则set2是set1超集 ''' # set 本身是可变数据类型,但可以让他变成不可变数据类型,冻住 s = frozenset('barry') print(s,type(s)) # >>frozenset({'b', 'r', 'a', 'y'}) <class 'frozenset'> # 一道小题 去重 li = [11,22,33,33,44,55,66,66,77] set5 = set(li) print(set5) li = list(set5) print(li)
complex:复数
float:浮点型 ,如:12.20
注:
type():查看数据类型的方法
字符串转换成数字:int(str) ,条件str必须是数值组成
同样数字转换成字符串:str(int)
用户交互input输出的全部是 str