一、数字 Number
Python3 支持 int、float、bool、complex(复数)。
1. int、float、complex
python3 中所有的整型都是 int 类型,不再有长整型的概念。
a = 4print(type(a)) # 内置type()函数可以用来查询变量类型print(isinstance(a, int)) # isinstance()函数用来判断变量类型print(a.bit_length()) # 转换成二进制位至少需要几位 4 -- 100# type 和 isinstance 的区别:isinstance认为子类是一种父类型,type认为子类不是一种父类型class A: passclass B(A): passprint(isinstance(A(), A)) # Trueprint(isinstance(B(), A)) # Trueprint(type(A())==A) # Trueprint(type(B())==A) # False
a = 12-36jprint(type(a))print(a.real) # 返回实数部分print(a.imag) # 返回虚数部分
2. bool
Python3 中把 True 和False 定义为关键字,值为1 和 0,可以和数字进行运算,所以暂时咱们先把它归为数字类型。
a = Trueprint(a)
二、字符串 String
字符串在内存中一旦创建则不可修改,若修改则会重新创建一个字符串。
a = " hello World "print(type(a))print(len(a)) # 获取字符串长度print(a[3])print(a[3:7]) # 字符串切片,获取子串,左闭右开print(a.split(" ")) # 以 " "分割字符串,并返回一个列表print(a.strip()) # 去除左右空白,可指定去除字符 a.lstrip(" ") a.rstrip(" ")print("_".join(a)) # 将字符串中的每个元素按指定分隔符进行拼接print(a.find("or")) # 查找子串“he”出现的位置,未找到返回 -1print(a.count("o", 0, 8)) # 计算子字符串出现的次数,可以设置查找的起始位置print(a.replace("o", "cccc", 1)) # 替换字符串,可指定替换次数,1表示只替换第一个print(r"dfdfdf\n") # 加上r表示将字符串原样输出for i in a: print(i)print(a.capitalize()) # 首字母大写print(a.casefold()) # 转小写(包括一些特殊的定义关系)print(a.islower())print(a.lower()) # 将字符串中大写转为小写print(a.isupper())print(a.upper()) # 将字符串中小写转为大写print(a.center(20, "-")) # 设置显示宽度,字符串居中,空白位用 - 代替print(a.endswith("a")) # 字符串是否以‘a’结尾print(a.startswith("a")) # 字符串是否以‘a’开头print(a.index("or")) # 查找子串“he”出现的位置,找不到会报错,请使用findprint(a.isalnum()) # 判断字符串中是否只存在数字和字母print(a.isalpha()) # 判断字符串中是否只存在字母和汉字b = "123①"print(b.isdecimal()) # 判断字符串是否是数字print(b.isdigit()) # 判断字符串是否是数字,包括①print(a.ljust(20, "*")) # 输出长度20,左侧填充 *print(a.rjust(20, "*"))# 使用 \t 分割字符串,每个子串占位 20 ,可用来以表格的样式显示数据b = "username\tpassword\temail\nzhangsan\t123456\t12@qq.com\nlisi\tadmin\t56245@qq.com"print(b.expandtabs(20))
三、列表List
列表使用方括号括起来,逗号分隔,可迭代。列表中的元素可以是任意类型
li = [123, "hello", True, 87, "ear", 123.32, "哈哈", [234, "fdf"]]print(li[0])print(li[2:4])# list可以通过索引、切片的方式进行删除、修改等操作li[0] = 100 # 修改一li[0:2] = [34, 54] # 修改二del li[0] # 删除del li[0:2] # 删除print(li)li.insert(1, "热") # 在index=1的位置插入数据print(li)print(li.index("哈哈")) # 获取当前值的索引位置,找到第一个就停止li2 = li.copy() # 浅拷贝print(li2)print(li.count(87)) # 计算元素出现的次数li.append("地方") # 追加,把传入对象当做一个值添加到列表中# li.append(["湖南", "长沙臭豆腐"])print(li)li.extend(["湖南", "长沙臭豆腐"]) # 把传入的可迭代对象的每一个值循环取出并添加到列表中print(li)print(li.pop(2)) # 删除index=2的值并返回被删除的值,默认删除最后一个print(li)li.remove("哈哈") # 删除指定值,删除第一个后则停止print(li)li.reverse() # 列表反转print(li)li = [123, 45, 4, 123, 454, 656, 0]li.sort(reverse=True) # 列表排序,默认从小到大,reverser=True表示从大到小print(li)print(len(li)) # 列表长度print(max(li)) # 列表最大值print(min(li)) # 列表最小值li.clear() # 清空
# enumerate 为一个可迭代对象添加序号,默认编号从0开始,可以之定义编号li = ["苹果", "香蕉", '梨', '葡萄']for k, i in enumerate(li, 1): print(k, i)
n1 = { "k1": "wu", "k2": 123, "k3": ["alex", 456]}n2 = n1.copy() # 浅拷贝n3 = copy.deepcopy(n1) # 深拷贝n1["k3"][0] = "admin"print(n2)print(n3)
li = []for i in range(10): li.append(i)print(li)# 列表解析li = [i for i in range(12)]print(li)
四、元组 Tuple
元组由括号括起来,逗号分隔,元组不可被修改,可迭代。写元组时最好在最后增加一个,方便和函数进行区分。
tu = () # 创建空元组del tu # 删除元组v1 = (12,) # 创建含有一个元素的元组v = (123, "hello", True, 87, "ear", 123.32, "哈哈", [234, "fdf"],)print(v[2:4])print(v.count("哈哈")) # 计算 "哈哈" 出现的次数print(v.index("ear")) # 查找 "ear" 出现的indexfor i in v: print(i)v[7].reverse() # 元组的一级元素不可修改,但可以对元组内部的列表进行修改print(v)print(v + v1) # 元组不可修改,但可以进行连接组合,生成一个新的元组
五、集合 Set
有不同的元素组成,无序、不可变(只能存放数字、字符串、元组)。
# 创建集合1q = set() # 创建空集合,必须用set()创建# 创建集合2s = {1, 2, 3, 4, 5, 6, 3} # 自动去重print(s)# 更新集合s.add("24") # 增加元素print(s.pop()) # 随机删除元素并返回删除的值s.remove(5) # 删除指定元素,不存在时会报错s.discard(6) # 删除指定元素,不存在时不做操作s.update([345454, 56]) # 添加多个值# s.clear() # 清空集合t = {2, 7, 3, 45, 75, 6}print(s.union(t)) # 并集 s | tprint(s.intersection(t)) # 交集 s & tprint(s.difference(t)) # 差集 s-qprint(s.symmetric_difference(t)) # 交叉补集,只存在任一集合的数据print(s.issuperset(t)) # q 是 s 的父集print(s.issubset(t)) # q 是 s 的子集print(s)p = frozenset("Hello") # 生成不可变集合print(p)print(set("123") == set("123123")) # True {'3', '1', '2'} == {'3', '1', '2'}print(set("123") < set("12345")) # True
六、字典 Dictionary
字典是一种可变容器模型,可以存储任意类型对象。整个字典包括在一个 { }中,每个键值对用 :分隔,每个键值对之间用,分隔。字典的键必须唯一。
# 字典的键值必须唯一,且不可变,故可以使用数字、字符串、元组充当键值# 若字典中同一个键出现两次,则后一个被记住dic = { "name": "zhangsan", "age": 23, "address": "长沙"}print(dic['name']) # 取值print(dic.get("age")) # 取值dic["name"] = "lisi" # 修改值del dic['address'] # 删除dic2 = dic.copy() # 字典浅复制print(dic2)dic3 = dict.fromkeys(["email", "phone", "school"], 123) # 生成新的字典,默认值为123print(dic3)for key in dic: print(dic.get(key))
七、深拷贝、浅拷贝
1. 浅拷贝
a = [[1, 2], 3, 4]b = a.copy() # 浅拷贝,只拷贝第一层内存地址b[1] = 5b[0][0] = 8print(b) # [[8, 2], 5, 4]print(a) # [[8, 2], 3, 4]
2. 深拷贝
import copya = [[1, 2], 3, 4]# b = copy.copy(a) # 浅拷贝b = copy.deepcopy(a) # 深拷贝b[1] = 5b[0][0] = 8print(b) # [[8, 2], 5, 4]print(a) # [[1, 2], 3, 4]
八、习题
1. 实现一个简单的整数加法计算器
# 实现一个简单的整数加法计算器while True: add_sum = 0 content = input("请输入整数加法运算(输入q退出):") if content == "q": break li = content.split("+") for i in li: if i == "" or (not i.isdecimal()): print("表达式有误,请重新输入") break add_sum += int(i) if i == li[len(li)-1]: print("sum = ", add_sum)
2. 制作随机验证码,不区分大小写
# 用户执行程序,给用户提示需要输入的验证码,输入与显示一致时提示正确,否则重新生成验证码等待输入
import randomdef check_code(): code = "" for i in range(4): current = random.randrange(0, 4) if current != i: temp = chr(random.randint(65, 90)) else: temp = random.randint(0, 9) code += str(temp) return codewhile True: code = check_code() print("本次验证码为:" + code) input_code = input("请输入验证码:") if input_code.upper() == code or input_code.lower() == code: print("验证通过") break