python 基础 语法 示例
""" 数据类型 """ # # # int # num1 = 1 # # float # num2 =1.1 # print(type(num1)) # print(type(num2)) # # # str ,字符串,特点:数据都带引号,单引、双引均可 # a = 'hello world' # print(type(a)) # b=True # boolean # print(type(b)) # # # list 列表 # c = [10,20,30] # print(type(c)) # # # tuple 元组 # d = (10,20,30) # print(type(d)) # # # set 集合 # e = {10,20,30} # print(type(e)) # # # dict 字典 键值对 # f = {'name':'Tom','age': 16} # print((type(f))) # """ # 1.准备数据 # 2.格式化符号输出数据 # """ # age =18 # name = 'TOM' # weight = 75.5 # stu_id = 1 # # print('今年我的年龄是%d岁') # # 1.今年我的年龄是x岁 # print('今年我的年龄是%d岁' % age) # # 2.我的名字是x # print('名字是%s' % name) # # 3.我的体重是x公斤 # # 75.500000 # print('体重是%f公斤' % weight) # # 75.50 # print('体重是%.2f公斤' % weight) # # 4.我的学号是x # print('我的学号是%d' % stu_id) # # 4.1 我的学号是001 # # %06d,表示输出的整数显示位数,不⾜以0补全,超出当前位数则原样输出 # print('我的学号是%03d' % stu_id) # stu_id2 = 1000 # print('我的学号是%03d' % stu_id2) # # 5.我的名字是x,今年x岁了 # print('名字是%s,今年%d岁了' % (name,age)) # print('名字是%s,今年%d岁了' % (name,age + 1)) # # 6.我的名字是x,今年x岁了,体重是x公斤,学号是x # print('名字是%s,今年%d岁了,体重是%f公斤,学号是%d' % (name, age,weight, stu_id)) # print('名字是%s,今年%d岁了,体重是%.2f公斤,学号是%06d' % (name, age,weight, stu_id)) # # ''' # 格式化字符串除了%s,还可以写为 f'{表达式}' # ''' # # 7.我的名字是x,今年x岁了,体重是x公斤 # print('我的名字是%s,今年%s岁了,体重是%s公斤' %(name,age,weight)) # # print(f'我的名字是{name},今年{age}岁了,体重是{weight}公斤') # print(f'我的名字是{name},今年{age+1}岁了,体重是{weight}公斤') # # # %s 与f'{}'区别; f代码量少;f更高效;开发多用f; f-格式化是python3.6新增的格式化方法 # ''' 转义字符 \n :换⾏。 \t :制表符,⼀个tab键(4个空格)的距离。 \ 反斜杠 ''' # # 两行 # print('hello') # print('world') # # print('hello\npython') # # 缩进4空格 # print('\tabcd') ''' print函数的结束符 想⼀想,为什么两个print会换⾏输出? 在Python中,print(), 默认⾃带 end="\n" 这个换⾏结束符,所以导致每两个 print 直接会换⾏ 展示,⽤户可以按需求更改结束符。 ''' # print('hello') # print('hello') # print('输出内容', end="\n") # print('输出内容', end=" ") # print('hello', end="....\t") # print('world', end=" ") ''' 1.书写input input('提示信息') 2.观察特点 输⼊的特点 当程序执⾏到 input ,等待⽤户输⼊,输⼊完成之后才继续向下执⾏。 在Python中, input 接收⽤户输⼊后,⼀般存储到变量,⽅便使⽤。 在Python中, input 会把接收到的任意⽤户输⼊的数据都当做字符串处理。 ''' # password = input('请输入您的密码:') # print(f'您输入的密码是{password}') # print(type(password)) ''' 转换数据类型 int(x [,base ]) 将x转换为⼀个整数 float(x ) 将x转换为⼀个浮点数 complex(real [,imag ]) 创建⼀个复数,real为实部,imag为虚部 str(x ) 将对象 x 转换为字符串 repr(x ) 将对象 x 转换为表达式字符串 eval(str ) ⽤来计算在字符串中的有效Python表达式,并返回⼀个对象 tuple(s ) 将序列 s 转换为⼀个元组 list(s ) 将序列 s 转换为⼀个列表 ''' # num = input('请输入数字:') # print(num,type(num)) # str # print(type(int(num))) # <class 'int'> # 1. float() -- 转换成浮点型 # num1 = 1 # print(float(num1)) # 1.0 # print(type(float(num1))) # str1 = '10' # print(float(str1)) #10.0 # # # 2. str() -- 转换成字符串类型 # num2 = 10 # print(type(str(num2))) # # # 3. tuple() -- 将⼀个序列转换成元组 # list1 = [10, 20, 30] # print(tuple(list1)) # (10, 20, 30) # # # 4. list() -- 将⼀个序列转换成列表 # t1 = (100, 200, 300) # print(list(t1)) # # # 5. eval() -- 将字符串中的数据转换成Python表达式原本类型 # str1 = '10' # str0 = '1.1' # str2 = '[1, 2, 3]' # str3 = '(1000, 2000, 3000)' # print(type(eval(str1))) # print(type(eval(str0))) # print(type(eval(str2))) # print(type(eval(str3))) ''' 运算符 运算符的分类: 算数运算符 赋值运算符 复合赋值运算符 ⽐较运算符 逻辑运算符 单击pycharm - python console ;打开 ''' ''' PyDev console: starting. Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32 1 + 1 2 1 + 1.1 2.1 1 - 1 0 1 - 0.5 0.5 2 * 0.5 1.0 4 / 2 2.0 2.0 9 // 4 2 9 % 4 1 2 ** 3 8 1 + 2 * 3 7 (1+2) * 3 9 2 * 3 ** 2 18 (2 * 3) ** 2 36 # # // 整除 9 // 4 输出结果为2 # # % 取余 9 % 4 输出结果为 1 # # ** 指数 2 ** 4 输出结果为 16,即 2 * 2 * 2 * 2 # # () ⼩括号 ⼩括号⽤来提⾼运算优先级,即 (1 + 2) * 3 输出结果为 9 # 混合运算优先级顺序: () ⾼于 ** ⾼于 * / // % ⾼于 + - tyhon console >>> # 多个变量赋值 num1, num2, str1 = 1, 1.1, 'abc' num1 1 # 多变量赋相同值 a = b = 100 a 100 b 100 ''' ''' 复合赋值运算符 ''' # c = 10 # # c = 10 + 1 + 2 # 错误 # # c += 3 -- c = c + 3 # 正确 (先算复合赋值运算符右边的表达式,再算复合运算符) # c += 1 + 2 # print(c) # 13 # # d = 10 # d *= 1 + 2 # print(d) # 30 ''' 比较运算符 1 == 1 True ''' ''' 逻辑运算符 and or not x and y x or y not x ''' # a = 1 # b = 2 # c = 3 # # print( (a < b) and ( b < c)) # print((a > b) or (c > b)) # print(not (b < c)) ''' 条件语句 if 条件: 条件成立执行的代码1 ..... ''' # if True: # if False: # print("条件成立执行的代码") # print("条件成立执行的代码") # # print('这个代码执行吗?') # age = int(input('请输入您的年龄:')) # if age >= 18 : # print(f"您已经成年{age}岁,可以上网") # D:\Learn\HM-21人工智能Ai\21年【年度钻石会员】人工智能AI进阶\阶段1 人工智能Python基础\第三章 判断语句\3-3 if...elif...else格式 ''' if 条件: 代码 else: 代码 ''' # age = int(input('请输入您的年龄:')) # if age > 18: # print('已经成年,可以上网') # else: # print('未成年,不可上网') ''' 多重判断 if 条件1: 代码1 elif 条件2: 代码2 else: 以上都不成立时,执行 ''' # age = int(input('请输入年龄:')) # # if age < 18: # print("为童工,不合法") # elif age >= 18 and age < 60: # print("合法工作年龄") # else: # print('退休了') ''' if嵌套 ''' """ 1. 如果有钱,则可以上⻋ 2. 上⻋后,如果有空座,可以坐下 上⻋后,如果没有空座,则站着等空座位 如果没钱,不能上⻋ """ # money = int(input('查找包里是否有钱:')) # if money > 1: # hasSit = False # if hasSit: # print('有空座,可坐下') # else: # print('无座,有钱也站着') # else: # print('没钱,不能坐公交,走路吧!') ''' 猜拳游戏 1. 导出random模块 2. 使⽤random模块中的随机整数功能 语法如下: 1 import 模块名 1 random.randint(开始,结束) ,包含开始和结束 ''' # import random # # player = int(input('0-石头,1-剪刀,2-布:')) # # computer = random.randint(0, 2) # print(computer) # # if (player == 0 and computer == 1) or (player == 1 and computer == 2) or (player == 2 and computer == 1): # print('玩家胜利') # elif (player == computer): # print('平局') # else: # print('玩家输') ''' 三⽬运算符 条件成⽴执⾏的表达式 if 条件 else 条件不成⽴执⾏的表达式 ''' # a = 1 # b = 2 # c = a if a > b else b # print(c) # # aa = 10 # bb = 6 # cc = (aa - bb) if (aa > bb) else (bb - aa) # print(cc) ''' while 条件: 条件成⽴重复执⾏的代码1 条件成⽴重复执⾏的代码2 ''' # 循环计数器,一般第一个计数值为从0开始; # i = 0 # while i < 5: # print('媳妇儿,我错了') # i += 1 ''' 0-100内偶数累加的和 ''' # 程序去计算偶数 # i = 2 # result = 0 # while i <= 100: # if (i % 2 == 0): # result += i # i += 1 # print(result) # 人为经验判断:偶数+2为偶数 # i = 2 # result = 0 # while i <= 100: # result += i # i += 2 # print(result) ''' break和continue是循环中满⾜⼀定条件退出循环的两种不同⽅式 ''' ''' 4.1 理解 举例:⼀共吃5个苹果,吃完第⼀个,吃第⼆个…,这⾥"吃苹果"的动作是不是重复执⾏? 情况⼀:如果吃的过程中,吃完第三个吃饱了,则不需要再吃第4个和第五个苹果,即是吃苹果的动作 停⽌,这⾥就是break控制循环流程,即终⽌此循环。 情况⼆:如果吃的过程中,吃到第三个吃出⼀个⼤⾍⼦...,是不是这个苹果就不吃了,开始吃第四个苹 果,这⾥就是continue控制循环流程,即退出当前⼀次循环继⽽执⾏下⼀次循环代码。 ''' # i = 1 # while i <= 5: # print(f'吃完第{i}个了') # if i == 3: # print(f'吃饱了') # break # i += 1 # # i = 1 # while i <= 5: # if i == 3: # print(f'吃到第{i}个,吃出一个大虫子,这个不吃了') # i += 1 # print(f'吃完第{i}个了') # i += 1 ''' while循环嵌套 ''' ''' 打印*形正方形 ''' # i = 0 # while i < 5: # print('', end='\n') # j = 0 # while j < 5: # print('*', end='') # j += 1 # i += 1 ''' 打印星号(三⻆形) ''' # i = 0 # while i < 5: # print('', end='\n') # j = 0 # while i >= j: # print('*', end='') # j += 1 # i += 1 ''' 九九乘法表 ''' # i = 1 # while i <= 9: # print('', end='\n') # j = 1 # while i >= j: # print(f'{i} x {j} = { i * j }', end='\t') # j += 1 # i += 1 ''' for循环 ''' ''' for 临时变量 in 序列: 重复执⾏的代码1 重复执⾏的代码2 ''' # str1 = 'itheima' # for i in str1: # print(i) ''' 循环可以和else配合使⽤,else下⽅缩进的代码指的是【当循环正常结束之后要执⾏的代码。】 break退出,则不执行else,continue,会执行else while、for都可与else配合使用 ''' ''' 需求:⼥朋友⽣⽓,要求道歉5遍:媳妇⼉,我错了。道歉到第三遍的时候,媳妇埋怨这⼀遍说的不真 诚,是不是就是要退出循环了?这个退出有两种可能性: 更⽣⽓,不打算原谅,也不需要道歉了,程序如何书写? 只⼀遍不真诚,可以忍受,继续下⼀遍道歉,程序如何书写? ''' # i = 1 # while i <= 5: # if i == 3: # print('这一遍不真诚;不打算原谅了;不需要道歉了') # break # print(f'媳妇儿,我道歉第{i}遍了') # i += 1 # else: # print('媳妇原谅我了') # # i = 1 # while i <= 5: # if i == 3: # print('这一遍不真诚;继续下一次道歉') # i += 1 # continue # print(f'媳妇儿,我道歉第{i}遍了') # i += 1 # else: # print('媳妇原谅我了') ''' 字符串 ''' # 单引号 代码显示效果换行了,内容以脚本的思想,没有换行 # a = 'hello ' \ # 'world' # print(a) # print(type(a)) # b = "TOM" # print(type(b)) # # # 三引号 支持内容回车换行原样输出展示 # e = '''i am TOM''' # print(type(e)) # f = """I AM # TOM""" # print(type(f)) # print(f) # # # I'm TOM # c = "I'm TOM" # print(c) # print(type(c)) # # # d = 'I'm TOM' # d = 'I\'m TOM' # print(d) ''' 下标 ''' # str1 = 'abcdefg' # print(str1) # print(str1[2]) # c # print(str1[5]) # f ''' 切⽚ 序列[开始位置下标:结束位置下标:步⻓] [ ) 左闭右开 ''' str1 = '012345678' # 得到整个字符串 # print(str1) # print(str1[2:5:1]) # 234 # print(str1[2:5:2]) # 24 # print(str1[2:5]) # 234 # print(str1[:5]) # 01234 不写开始,默认从0开始 # print(str1[2:]) # 2345678 不写结束,表示选取到末尾 # print(str1[:]) # 不写开始结束,表示选取从头到尾 # print(str1[::-1]) # 876543210 # 如果步长为负数,表示倒叙选取 # print(str1[-4:-1]) # 567 # 终极测试 # print(str1[-4:-1:1]) # 567 # print(str1[-4:-1:-1]) # 不能选取出数据 从-4开始到-1结束,选取方向从左到右;但是-1是从右向左选取;方向不一致 # # **** 如果选取方向(下标开始到结束)和步长的方向冲突,则无法选取数据 # print(str1[-1:-4:-1]) # 876 # D:\Learn\HM-21人工智能Ai\21年【年度钻石会员】人工智能AI进阶\阶段1 人工智能Python基础\第五章 字符串\5-4 字符串操作方法 ''' 四、常⽤操作⽅法 ''' ''' find():检测某个⼦串是否包含在这个字符串中,如果在返回这个⼦串开始的位置下标,否则则返回-1。 字符串序列.find(⼦串, 开始位置下标, 结束位置下标) 注意:开始和结束位置下标可以省略,表示在整个字符串序列中查找。 index():检测某个⼦串是否包含在这个字符串中,如果在返回这个⼦串开始的位置下标,否则则报异常。 ''' # mystr = "hello world and itcast and itheima and Python" # 1. find() # print(mystr.find('and')) # 12 # print(mystr.find('and', 15, 30)) # 23 # print(mystr.find('ands')) # 不存在,返回 -1 # 2. index() # print(mystr.index('and')) # print(mystr.index('ands')) # 不存在,报错: ValueError: substring not found # 3. count() # print(mystr.count('and', 15, 30)) # 1 # print(mystr.count('and')) # 3 ''' rfind(): 和find()功能相同,但查找⽅向为右侧开始。 rindex():和index()功能相同,但查找⽅向为右侧开始。 ''' # print(mystr.rfind('and')) # 35 # print(mystr.rfind('ands')) # -1 # print(mystr.rindex('and')) # 35 # print(mystr.rindex('ands')) # ValueError: substring not found ''' 修改 ''' ''' replace():替换; 有返回值,返回值是修改后的字符串;原字符串变量没有改变 字符串序列.replace(旧⼦串, 新⼦串, 替换次数) 注意:替换次数如果查出⼦串出现次数,则替换次数为该⼦串出现次数。 ''' # mystr = "hello world and itcast and itheima and Python" # 数据是否可以改变划分为可变类型和不可变类型 # new_str = mystr.replace('and', 'he') # print(new_str) # print(mystr.replace('and', 'he', 2)) # print(mystr.replace('and', 'he', 10)) ''' split():按照指定字符分割字符串。 分割,返回一个列表,丢失分割字符 字符串序列.split(分割字符, num) num表示的是分割字符出现的次数,即将来返回数据个数为num+1个。 ''' # list1 = mystr.split('and') # list1 = mystr.split('and', 2) # print(list1) ''' join() 合并列表里面的字符串数据为一个大字符串 ''' # mylist = ['aa', 'bb', 'cc'] # # aa..bb..cc # print('..'.join(mylist)) ''' 大小写转换 capitalize():将字符串第⼀个字符转换成⼤写。 capitalize()函数转换后,只字符串第⼀个字符⼤写,其他的字符全都⼩写。 title():将字符串每个单词⾸字⺟转换成⼤写 lower():将字符串中⼤写转⼩写。 upper():将字符串中⼩写转⼤写。 ''' # mystr = "hello world and itcast and itheima and Python" # # print(mystr.capitalize()) # Hello world and itcast and itheima and python # # print(mystr.title()) # Hello World And Itcast And Itheima And Python # print(mystr.upper()) # HELLO WORLD AND ITCAST AND ITHEIMA AND PYTHON # print(mystr.lower()) # hello world and itcast and itheima and python ''' lstrip():删除字符串左侧空⽩字符。 rstrip():删除字符串右侧空⽩字符。 strip():删除字符串两侧空⽩字符。 ''' # mystr = " hello world and itcast and itheima and Python " # print(mystr) # print(mystr.lstrip()) # print(mystr.rstrip()) # print(mystr.strip()) ''' ljust():返回⼀个原字符串左对⻬,并使⽤指定字符(默认空格)填充⾄对应⻓度 的新字符串。 字符串序列.ljust(⻓度, 填充字符) rjust():返回⼀个原字符串右对⻬,并使⽤指定字符(默认空格)填充⾄对应⻓度 的新字符串,语法和 ljust()相同。 center():返回⼀个原字符串居中对⻬,并使⽤指定字符(默认空格)填充⾄对应⻓度 的新字符串,语 法和ljust()相同。 python console Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32 mystr = 'hello' mystr 'hello' mystr.ljust(10) 'hello ' mystr.ljust(10, '.') 'hello.....' mystr.rjust(10) ' hello' mystr.rjust(10, '.') '.....hello' mystr.center(10) ' hello ' mystr.center(10, '.') '..hello...' ''' ''' 字符串判断 ''' # mystr = "hello world and itcast and itheima and Python" # print(mystr.startswith('hello')) # print(mystr.startswith('world', 6)) # print(mystr.endswith('Python')) ''' isalpha():如果字符串⾄少有⼀个字符并且所有字符都是字⺟则返回 True, 否则返回 False。 isdigit():如果字符串只包含数字则返回 True 否则返回 False。 isalnum():如果字符串⾄少有⼀个字符并且所有字符都是字⺟或数字则返 回 True,否则返回False。 isspace():如果字符串中只包含空⽩,则返回 True,否则返回 False。 ''' # print('hello'.isalpha()) # print('123'.isdigit()) # print('abc123'.isalnum()) # print("\t\n".isspace()) # print(' '.isspace()) # True ''' 列表 ''' ''' 下标 ''' # name_list = ['TOM', 'Lily', 'ROSE'] # print(name_list) # print(name_list[1]) ''' index():返回指定数据所在位置的下标 。注意:如果查找的数据不存在则报错。 count():统计指定数据在当前列表中出现的次数。 与字符使用方式一样 len():访问列表⻓度,即列表中数据的个数。 判断是否存在 in:判断指定数据在某个列表序列,如果在返回True,否则返回False not in:判断指定数据不在某个列表序列,如果不在返回True,否则返回False ''' # name_list = ['TOM', 'Lily', 'ROSE'] # print(name_list.index('TOM')) # print(name_list.index('TOMS')) # ValueError: 'TOMS' is not in list # print(name_list.count('Lily')) # print(name_list.count('Lilys')) # 0 # print(len(name_list)) # print('TOM' in name_list) # print('TOMS' in name_list) # print('TOMS' not in name_list) # print('TOM' not in name_list) ''' 需求:查找⽤户输⼊的名字是否已经存在。 ''' # name_list = ['TOM', 'Lily', 'ROSE'] # name = input('请输入您的名字:') # if name in name_list: # print(f'{name}已存在') # else: # print(f'{name}可用') ''' 增加 append():列表结尾追加数据。 列表序列.append(数据) ''' # name_list = ['TOM', 'Lily', 'ROSE'] # name_list.append('XiaoMing') ['TOM', 'Lily', 'ROSE','XiaoMing'] # print(name_list) # 列表是可变类型 # name_list.append([11,22]) # 追加整个序列到列表 ['TOM', 'Lily', 'ROSE', 11, 23] # print(name_list) ''' extend():列表结尾追加数据,如果数据是⼀个序列,则将这个序列的数据逐⼀添加到列表。 ''' # name_list.extend('xiaoming') # print(name_list) # ['TOM', 'Lily', 'ROSE', 'x', 'i', 'a', 'o', 'm', 'i', 'n', 'g'] # name_list.extend([11,23]) # print(name_list) # ['TOM', 'Lily', 'ROSE', 11, 23] ''' insert():指定位置新增数据。 列表序列.insert(位置下标, 数据) ''' # name_list.insert(1,'aa') # print(name_list) # ['TOM', 'aa', 'Lily', 'ROSE'] ''' 删除 del ⽬标 del() ''' # del name_list # print(name_list) # NameError: name 'name_list' is not defined # del name_list[0] # print(name_list) # ['Lily', 'ROSE'] ''' pop():删除指定下标的数据(默认为最后⼀个),并返回该数据。 列表序列.pop(下标) ''' # del_name = name_list.pop() # del_name = name_list.pop(1) # print(del_name) # print(name_list) ''' remove(数据) ''' # name_list.remove('ROSE') # print(name_list) # name_list.clear() # print(name_list) ''' 修改 ''' # name_list = ['TOM', 'Lily', 'ROSE'] # # 修改指定下标的数据 # name_list[0] = 'aaa' # print(name_list) # # # 逆序 reverse() # list1 = [1, 3, 2, 5, 4, 6] # list1.reverse() # print(list1) # [6, 4, 5, 2, 3, 1] # # # sort() 排序:升序(默认)和降序 # # list1.sort() # # list1.sort(reverse=False) # list1.sort(reverse=True) # print(list1) ''' 复制 ''' # name_list = ['TOM', 'Lily', 'ROSE'] # name_li2 = name_list.copy() # name_li2.reverse() # print(name_li2) # print(name_list) ''' 列表的循环遍历 ''' name_list = ['TOM', 'Lily', 'ROSE'] # i = 0 # while i < len(name_list): # print(name_list[i]) # i += 1 # for i in name_list: # print(i) # # TOM # # Lily # # ROSE # # for idx,val in enumerate(name_list): # print(idx,val) ''' 列表嵌套 ''' # name_list = [['TOM','Lily', 'Rose'], ['张三','李四', '王五'], ['小米','小花','小明']] # print(name_list) # print(name_list[0]) # print(name_list[0][1]) ''' 综合应⽤ -- 随机分配办公室 需求:有三个办公室,8位⽼师,8位⽼师随机分配到3个办公室 步骤 1.准备数据 8位老师,3个办公室 2.分配老师到办公室 随机分配 3.验证是否分配成功 办公室列表追加老师 ''' # import random # teachers = ['A', 'B', 'C', 'D', 'E', 'F', 'G'] # offices = [[], [], []] # for name in teachers: # offidx = random.randint(0,2) # offices[offidx].append(name) # i = 1 # for office in offices: # print(f'办公室{i}人数为{len(office)}') # for name in office: # print(name) # i += 1 ''' 元组 元组的应⽤场景 ⼀个元组可以存储多个数据,元组内的数据是不能修改的。 ''' # t1 = (10, 20, 30) # print(type(t1)) # print(t1) # t2 = (10,) # print(type(t2)) # <class 'tuple'> # t3 = (10) # print(type(t3)) # <class 'int'> # t4 = ('aaa') # print(type(t4)) # <class 'str'> # t5 = ('aaa',) # print(type(t5)) # <class 'tuple'> ''' 元组的常⻅操作 元组数据不⽀持修改,只⽀持查找,具体如下: 按下标查找数据 index():查找某个数据,如果数据存在返回对应的下标,否则报错,语法和列表、字符串的index ⽅法相同。 count():统计某个数据在当前元组出现的次数。 len():统计元组中数据的个数。 ''' # t1 = ('aa', 'bb', 'cc', 'dd') # print(t1[0]) # print(t1.index('aa')) # print(t1.index('bbb')) # print(t1.count('aa')) # print(len(t1)) ''' 元组修改 但是如果元组⾥⾯有列表,修改列表⾥⾯的数据则是⽀持的,故⾃觉很重要。 ''' # t1[0] = 'aaa' # TypeError: 'tuple' object does not support item assignment # t2 = ('aa', 'bb', ['cc', 'dd']) # print(t2[2]) # t2[2][0] = 'TOM' # print(t2) # ('aa', 'bb', ['TOM', 'dd']) ''' 字典 字典的应⽤场景 思考1: 如果有多个数据,例如:'Tom', '男', 20,如何快速存储? 字典,字典⾥⾯的数据是以键值对形式出现,字典数据和数据顺序没有关系,即字典不⽀持下标, 后期⽆论数据如何变化,只需要按照对应的键的名字查找数据即可。 创建字典的语法: 字典特点: 符号为⼤括号 数据为键值对形式出现 各个键值对之间⽤逗号隔开 ''' # 有数据的字典 dict1 = {'name': 'TOM', 'age': 20, 'gender':' 男'} # print(dict1) # print(type(dict1)) # <class 'dict'> # # 空字典 # dict2 = {} # dict3 = dict() # print(type(dict2)) # print(type(dict3)) ''' 字典常⻅操作 ''' # 增 字典序列[key] = 值 # 注意:如果key存在则修改这个key对应的值;如果key不存在则新增此键值对。 # dict1 = {'name': 'TOM', 'age': 20, 'gender':' 男'} # dict1['id'] = 110 # print(dict1) # dict1['name'] = 'ROSE' # print(dict1) # 删 del() / del:删除字典或删除字典中指定键值对。 # del(dict1) # print(dict1) # NameError: name 'dict1' is not defined # del dict1['name'] # del dict1['names'] # KeyError: 'names' # dict1.clear() # {} # print(dict1) # 改 字典序列[key] = 值 # 注意:如果key存在则修改这个key对应的值 ;如果key不存在则新增此键值对 # dict1['id'] = 110 # print(dict1) ''' 查 key值查找 如果当前查找的key存在,则返回对应的值;否则则报错。 get() keys() values() items() ''' # print(dict1['name']) # print(dict1['name1']) # print(dict1['name1']) # dict1 = {'name': 'TOM', 'age': 20, 'gender':' 男'} # print(dict1.get('name')) # TOM # print(dict1.get('id')) # None # print(dict1.get('id','Lily')) # Lily # # 查找字典中所有的key,返回可迭代的对象 # print(dict1.keys()) # dict_keys(['name', 'age', 'gender']) # # print(dict1.values()) # dict_values(['TOM', 20, ' 男']) # # 查找字典中所有的键值对,返回可迭代对象,里面的对象是元组,元组数据1是key,2是value # print(dict1.items()) # dict_items([('name', 'TOM'), ('age', 20), ('gender', ' 男')]) ''' 字典遍历 ''' # dict1 = {'name': 'TOM', 'age': 20, 'gender':' 男'} # # for key in dict1.keys(): # # print(key) # # for v in dict1.values(): # # print(v) # # for item in dict1.items(): # print(item) # ('name', 'TOM') # # # 遍历字典的键值对,拆包 # for k,v in dict1.items(): # print(f'{k}={v}') ''' 集合 创建集合使⽤ {} 或 set() , 但是如果要创建空集合只能使⽤ set() ,因为 {} ⽤来创建空字典。 特点: 1. 集合可以去掉重复数据; 2. 集合数据是⽆序的,故不⽀持下标 ''' # s1 = {10, 20, 30, 40, 50} # print(s1) # {40, 10, 50, 20, 30} # s2 = {10, 20, 30, 40, 30, 40, 50} # print(s2) # s3 = set('abcdefg') # print(s3) # {'d', 'b', 'g', 'f', 'a', 'e', 'c'} # s4 = set() # print(type(s4)) # <class 'set'> # s5 = {} # print(type(s5)) # <class 'dict'> ''' 集合常⻅操作⽅法 增加数据 因为集合有去重功能,所以,当向集合内追加的数据是当前集合已有数据的话,则不进⾏任何操作。 add() update(), 追加的数据是序列。 ''' # 集合是可变类型 # s1 = {10, 20} # s1.add(100) # print(s1) # s1.add(100) # s1.add([10,20,30]) # TypeError: unhashable type: 'list' # s1.update([10, 50, 30]) # print(s1) # s1.update(60) # TypeError: 'int' object is not iterable ''' 删除数据 remove(),删除集合中的指定数据,如果数据不存在则报错。 discard(),删除集合中的指定数据,如果数据不存在也不会报错。 pop(),随机删除集合中的某个数据,并返回这个数据 ''' # s1 = {10, 20, 30, 40, 50} # s1.remove(10) # s1.remove(100) # KeyError: 100 # s1.discard(10) # s1.discard(10) # print(s1) # del_num = s1.pop() # print(del_num) # print(s1) ''' 查找数据 in:判断数据在集合序列 not in:判断数据不在集合序列 ''' # s1 = {10, 20, 30, 40, 50} # print(10 in s1) # print(10 not in s1) ''' 公共操作 运算符 运算符 描述 ⽀持的容器类型 + 合并 字符串、列表、元组 * 复制 字符串、列表、元组 in/not in 元素是否存在 字符串、列表、元组、字典 公共⽅法 容器类型转换 ''' # # 1. 字符串 # str1 = 'aa' # str2 = 'bb' # str3 = str1 + str2 # print(str3) # aabb # # 2. 列表 # list1 = [1, 2] # list2 = [10, 20] # list3 = list1 + list2 # print(list3) # [1, 2, 10, 20] # # 3. 元组 # t1 = (1, 2) # t2 = (10, 20) # t3 = t1 + t2 # print(t3) # (10, 20, 100, 200) # dict1 = {'name':'aa'} # dict2 = {'gender':'bb'} # dict3 = dict1 + dict2 # TypeError: unsupported operand type(s) for +: 'dict' and 'dict' # print(dict3) # # 1. 字符串 # print('-' * 10) # ---------- # # 2. 列表 # list1 = ['hello'] # print(list1 * 4) # ['hello', 'hello', 'hello', 'hello'] # # 3. 元组 # t1 = ('world',) # print(t1 * 4) # ('world', 'world', 'world', 'world') # 1. 字符串 # print('a' in 'abcd') # True # print('a' not in 'abcd') # False # # 2. 列表 # list1 = ['a', 'b', 'c', 'd'] # print('a' in list1) # True # print('a' not in list1) # False # # 3. 元组 # t1 = ('a', 'b', 'c', 'd') # print('aa' in t1) # False # print('aa' not in t1) # True # dict1 = {'name': 'TOM', 'age': 20, 'gender':' 男'} # print('name' in dict1.keys()) # print('TOM' in dict1.values()) ''' 公共⽅法 函数 描述 len() 计算容器中元素个数 del 或 del() 删除 max() 返回容器中元素最⼤值 min() 返回容器中元素最⼩值 range(start, end, step) ⽣成从start到end的数字,步⻓为 step,供for循环使⽤;range()⽣成的序列不包含end数字。 enumerate() 函数⽤于将⼀个可遍历的数据对象(如列表、元组或字符串)组合为⼀个索引序 列,同时列出数据和数据下标,⼀般⽤在 for 循环当中。 ''' # 1. 字符串 # str1 = 'abcdefg' # print(len(str1)) # 7 # # 2. 列表 # list1 = [10, 20, 30, 40] # print(len(list1)) # 4 # # 3. 元组 # t1 = (10, 20, 30, 40, 50) # print(len(t1)) # 5 # # 4. 集合 # s1 = {10, 20, 30} # print(len(s1)) # 3 # # 5. 字典 # dict1 = {'name': 'Rose', 'age': 18} # print(len(dict1)) # 2 # str1 = 'abcdef' # list1 = [10,20,30] # t1 = (10,20,30) # s1 = {10,20,30} # dict1 = {'name': 'TOM','age':17} # del str1 # # del list1 # del(list1[0]) # print(list1) # del dict1['name'] # print(dict1) # print(max(str1),min(str1)) # print(max(list1),min(list1)) # print(range(1, 10,1)) # range(1, 10) 返回可迭代对象 # # 左闭右开 # for i in range(1, 10, 1): # print(i) # 默认步长是1 # for i in range(1, 10): # print(i) # # 默认从0开始 # for i in range(10): # print(i) ''' enumerate(可遍历对象, start=0) start参数⽤来设置遍历数据的下标的起始值,默认为0。 ''' # list1 = ['a', 'b', 'c', 'd'] # for i in enumerate(list1): # print(i) # (1, 'b') ... (下标 数据) # start 修改下标起始值 # for i in enumerate(list1,start=1): # print(i) ''' 容器类型转换 tuple() list() set() ''' # list1 = [10, 20, 30, 40, 50, 20] # s1 = {100, 200, 300, 400, 500} # t1 = ('a', 'b', 'c', 'd', 'e') # # print(tuple(list1)) # print(tuple(s1)) # # print(list(s1)) # print(list(t1)) # print(set(list1)) # print(set(t1)) ''' 列表推导式 ⽤⼀个表达式创建⼀个有规律的列表或控制⼀个有规律列表。 ---- 列表推导式 字典推导式 集合推导式 ''' # 需求创建一个0-10的列表 # while实现..... # list1 = [] # i = 0 # while i < 10: # list1.append(i) # i += 1 # print(list1) # for实现..... # list1 = [] # for i in range(10): # list1.append(i) # print(list1) # 列表推导式实现 # list1 = [i for i in range(10)] # print(list1) # 带if的列表推导式 # 需求:创建0-10的偶数列表 # list1 = [ i for i in range(0,10,2)] # print(list1) # list0 = [] # for i in range(10): # if i % 2 == 0: # list0.append(i) # print(list0) # list2 = [i for i in range(10) if i % 2 == 0] # print(list2) # 多个for循环实现列表推导式 # 需求:创建列表如下: [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)] # list1 = [] # for i in range(1,3): # for j in range(3): # list1.append((i,j)) # list2 = [(i, j) for i in range(1, 3) for j in range(3)] # print(list2) ''' 字典推导式 如何快速合并为⼀个字典? 答:字典推导式 字典推导式作⽤:快速合并列表为字典或提取字典中⽬标数据。 ''' # . 创建⼀个字典:字典key是1-5数字,value是这个数字的2次⽅。 # dict1 = {i: i**2 for i in range(1, 5)} # print(dict1) # 将两个列表合并为⼀个字典 # list1 = ['name', 'age','gender'] # list2 = ['Tom', 20, 'man'] # dict2 = { list1[i]: list2[i] for i in range(len(list1))} # print(dict2) # # 如果两个列表数据长度不同,len统计列表数据多的个数,会报错;统计少的,不会报错 # # # 提取字典中⽬标数据 # counts = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'acer': 99} # count1 = {k: v for k,v in counts.items() if v > 200} # print(count1) ''' 集合推导式 ''' # 需求:创建⼀个集合,数据为下⽅列表的2次⽅。 # list1 = [1, 1, 2] # set1 = {i**2 for i in list1} # print(set1) # print(set1) #