Python学习笔记实用技巧及知识点汇编
交换变量的值a, b, c = 10, 20, 30 print(a, b, c) a, b, c = b, c, a print(a, b, c) 输出结果: 10 20 30 20 30 10链式比较score = 75 if 70 <= score < 80: print("成绩:良")快速合并字典dict1 = {"数学": 90, "语文": 98, "英语": 93} dict2 = {"地理": 78, "化学": 70} dict3 = dict1 | dict2 print(dict3) 输出结果: {"数学": 90, "语文": 98, "英语": 93, "地理": 78, "化学": 70}将两个列表组合成一个字典key = ["数学", "语文", "英语"] value = [90, 99, 87] result = dict(zip(key, value)) print(result) 输出结果: {"数学": 90, "语文": 99, "英语": 87}对列表元素进行随机排序(洗牌效果)import random lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] random.shuffle(lst) print(lst) 输出结果: [2, 7, 4, 6, 3, 8, 5, 1, 0, 9]从列表中选择指定个数的随机且不重复的元素(抽奖效果)import random lst = ["z", "b", "Ab", "CDE", "5", 6, 100, True, 3.14] result = random.sample(lst, 3) print(result) 输出结果: [6, "z", "CDE"]从列表或字符串中随机选择一个元素或字符(可用于生成验证码或动态密码)import random str1 = "0123456789abcdefghijklmnopqtstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()" result="" for i in range(8): result = result+random.choice(str1) print(result) 输出结果: ZItOAZyC语音朗读文本import winsound import win32com from win32com.client import Dispatch, constants import time speak_out = win32com.client.Dispatch("sapi.spvoice") str="今天的气温是"+" "+"零下19度" speak_out.speak(str) # 输出方言解释 winsound.PlaySound(str, winsound.SND_ASYNC) # 输出结束音 time.sleep(3) # 不加延迟程序马上结束,上面语句的结束音出不来计算两个日期时间差import datetime day1 = datetime.datetime(2022, 7, 17) day2 = datetime.datetime(2022, 10, 8) print(f"{day1.strftime("%Y-%m-%d")}与{day2.strftime("%Y-%m-%d")}相隔了" + str((day2 - day1).days) + "天!") 输出结果: 2022-07-17与2022-10-08相隔了83天!阿拉伯数字快速转换为中文数字info = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"] data = input("请输入数字:") for i in range(len(data)): print(info[int(data[i])], end="") 输出结果: 请输入数字:3698 三六九八else与for和while搭配使用(如果循环执行完毕,没有遇到break,则执行else)for num in range(3): pwd = input("请输入密码:") if pwd == "8888": print("输入的密码正确!") break else: print("输入的密码错误,请重新输入!") else: print("输入次数达到上限,系统将自动退出!")蜂鸣器鸣叫import time, sys, ctypes """ time库中包含sleep延迟函数 sys库中包含stdout标准输出刷新函数flush ctypes库中包含Beep(首字母大写)蜂鸣器,第一个参数是频率,第二个参数是鸣叫时长 """ player = ctypes.windll.kernel32 for i in range(1, 11): print("r", "-●-" * i, end="%d0%%" % i) # r表示返回行首,在字符串里显示%必须用%% sys.stdout.flush() player.Beep(1000, 100) time.sleep(1) player.Beep(2000, 1000)异常处理之else和finally(如果未发生异常则执行else,而无论是否发生异常都必须执行finally,即使前面有return语句)def func(opr): result = 0 try: a = int(input("请输入第一个数:")) b = int(input("请输入第二个数:")) if opr == "+": result = a + b elif opr == "-": result = a - b elif opr == "*": result = a * b elif opr == "/": result = a / b else: print("您输入的操作符错误!") except Exception as err: print("出错啦!出错信息:", err) else: print("运行未发生错误") return result # 由于有finally语句,这条return语句会在finally下面的语句执行完毕后再执行 finally: print("-----执行finally语句-----") r = func("+") print("返回结果:", r) 运行结果: 请输入第一个数:2 请输入第二个数:0 运行未发生错误 -----执行finally语句----- 返回结果: 2字符串内容逐字循环输出import sys import time def repeat(string): sys.stdout.write("r") # 回车,让光标回到行首 sys.stdout.flush() # 刷新,即输出缓冲区数据 for i in string: # 遍历字符串 sys.stdout.write(i) # 写到缓冲区 sys.stdout.flush() # 输出 time.sleep(0.3) # 延迟0.3毫秒 while True: repeat("ABCDEFGHIJKLMNOPQRSTUVWXYZ")将字符串中数量不等的连续空格统一变成一个空格word="编号 姓名 性别 年级 学校 奖项" list=word.split(" ") listnew=[i for i in list if i!="" ] new=" ".join(listnew) print(new) 输出结果: 编号 姓名 性别 年级 学校 奖项巧用列表判断日期对应星座(不需要反复判定月份和日期范围)def sign(m, d): # 判断星座函数 if d < date[m - 1]: # 如果日期小于该月在date列表中对应的日期临界值 print(sign_list[m - 1]) # 直接输出星座列表中对应月份的星座 else: print(sign_list[m]) # 否则输出星座列表中下一月对应的星座 date = [20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22] # 每个月份的星座日期临界值 sign_list = ["摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座"] sign(7, 15) # 调用星座判断函数 输出结果: 巨蟹座巧用字典判断身份证号信息(字符 用于连接上下两行语句)dic = {"11": "北京市", "12": "天津市", "13": "河北省", "14": "山西省", "15": "内蒙古自治区", "22": "吉林省", "23": "黑龙江省", "31": "上海市", "32": "江苏省", "33": "浙江省", "35": "福建省", "36": "江西省", "37": "山东省", "41": "河南省", "42": "湖北省", "44": "广东省", "45": "广西壮族自治区", "46": "海南省", "50": "重庆市", "51": "四川省", "53": "云南省", "54": "西藏自治区", "61": "陕西省", "62": "甘肃省", "63": "青海省", "65": "新疆维吾尔自治区", "71": "台湾省", "81": "香港", "82": "澳门"} def idget(str): if dic.get(str): return dic[str] else: return "未知省份" instr = input("请输入您的身份证号:") if instr[:16].isdigit() and len(instr) == 18: print("你来自:", idget(instr[0:2])) print("你的生日是:" + instr[6:10] + "年" + instr[10:12] + "月" + instr[12:14] + "日") gender = "女" if int(instr[16]) % 2 == 0 else "男" print("你的性别是:" + gender) 输出结果: 请输入您的身份证号:220000198308124527 你来自: 吉林省 你的生日是:1983年08月12日 你的性别是:女巧用随机数和字符串切片完成成语答题效果import random list = ["春暖花开", "十字路口", "千军万马", "白手起家", "张灯结彩", "风和日丽", "万里长城", "人来人往", "自由自在", "瓜田李下", "助人为乐", "白手起家", "红男绿女", "春风化雨", "马到成功", "拔苗助长", "安居乐业", "走马观花", "念念不忘", "落花流水", "张灯结彩", "一往无前", "落地生根", "天罗地网", "东山再起", "一事无成", "山清水秀", "别有洞天", "语重心长", "水深火热", "鸟语花香", "自以为是"] i = 1 count = 20 print("直接填写答案,回车进入下一关。什么也不填忽略本成语!!") while True: word = random.choice(list) # 随机选择成语 bank = random.randint(0, 3) # 随机生成要抹去的字 new = word[:bank] + "___" + word[bank + 1:] # 输出考题 print(new) num = input("输入:") if not num: # 如果直接回车则略过此题 print("过!") continue elif num.strip(" ") == word[bank]: count += 2 print("正确,你真棒!") else: count -= 2 print("错了,正确答案:", word[bank]) i += 1 if i > 3: # 答题次数 break print("选手最后得分:", count) 输出结果:直接填写答案,回车进入下一关。什么也不填忽略本成语!! 风和___丽 输入:日 正确,你真棒! ___往无前 输入: 过! 马到成___ 输入:功 正确,你真棒! 自___自在 输入:由 正确,你真棒! 选手最后得分: 26根据日期生成产品序列号type_num = "BRM8S" date = "2021:12:28" date = date.split(":") year_num = date[0][2:] month = hex(int(date[1])).replace("0x", "") # 取月份的十六进制字符 day = date[2] date_num = year_num + month + day start = 100 count = int(input("请输入要生成的产品序列号(SN)数量:")) sn = "" for i in range(count): num = type_num + date_num + str(start + i).zfill(5) # 用0填充空位 sn += num + " " print(sn)以横式条形图的形式形象展示GDP数据gdp = "广东:97277.77:107671.07 江苏:92595.40:99631.52 " "山东:76469.70:71067.5 浙江:56197.00:62353 河南:48055.90:54259.2 " "四川:40678.10:46615.82 湖北:39366.60:45828.31 湖南:36425.78:39752.12 " "河北:36010.30:35104.5 福建:35804.04:42395" gdp_dict = {} gdp_list = [] base = 3000 new = gdp.split(" ") # 切割列表 for item in new: gdp_list = item.split(":") # 切割字符串 gdp_dict.update({gdp_list[0]: [gdp_list[2], gdp_list[1]]}) # 生成字典 up = sorted(gdp_dict.items(), key=lambda x: float(x[1][0]), reverse=False) # 使用匿名函数对字典排序 for item in up: lenb = format(float(item[1][0]) / base, ".0f") # 计算需要输出的■的个数 print(item[0].ljust(4) + " " + int(lenb) * chr(9632) + " 2019年GDP:" + str(item[1][0])) lenb = format(float(item[1][1]) / base, ".0f") print("".ljust(4) + " " + int(lenb) * chr(9632) + " 2018年GDP:" + str(item[1][1])) 输出结果: 河北 ■■■■■■■■■■■■ 2019年GDP:35104.5 ■■■■■■■■■■■■ 2018年GDP:36010.30 湖南 ■■■■■■■■■■■■■ 2019年GDP:39752.12 ■■■■■■■■■■■■ 2018年GDP:36425.78 福建 ■■■■■■■■■■■■■■ 2019年GDP:42395 ■■■■■■■■■■■■ 2018年GDP:35804.04 湖北 ■■■■■■■■■■■■■■■ 2019年GDP:45828.31 ■■■■■■■■■■■■■ 2018年GDP:39366.60 四川 ■■■■■■■■■■■■■■■■ 2019年GDP:46615.82 ■■■■■■■■■■■■■■ 2018年GDP:40678.10 河南 ■■■■■■■■■■■■■■■■■■ 2019年GDP:54259.2 ■■■■■■■■■■■■■■■■ 2018年GDP:48055.90 浙江 ■■■■■■■■■■■■■■■■■■■■■ 2019年GDP:62353 ■■■■■■■■■■■■■■■■■■■ 2018年GDP:56197.00 山东 ■■■■■■■■■■■■■■■■■■■■■■■■ 2019年GDP:71067.5 ■■■■■■■■■■■■■■■■■■■■■■■■■ 2018年GDP:76469.70 江苏 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 2019年GDP:99631.52 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 2018年GDP:92595.40 广东 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 2019年GDP:107671.07 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 2018年GDP:97277.77利用字符串子串个数统计功能实现敏感词汇统计word = input("请输入或者拷贝含有敏感词的宣传文字: ") sensitive = ["第一", "国家级", "最高级", "最佳", "独一无二", "一流", "仅此一次", "顶级", "顶尖", "尖端", "极品", "极佳", "绝佳", "绝对", "终极", "极致", "首个", "首选", "独家", "首发", "首次", "首款", "金牌", "名牌", "王牌", "领袖", "领先", "领导", "缔造者", "巨星", "掌门人", "至尊", "巅峰", "奢侈", "资深", "之王", "王者", "冠军"] sensitive_find = [] newword = word for item in sensitive: if word.count(item) > 0: # 判断敏感词出现的次数 sensitive_find.append(item + ":" + str(word.count(item)) + "次") # 记录敏感词出现次数 newword = newword.replace(item, " 33[1;31m" + item + " 33[0m") # 敏感词描红输出 print("发现敏感词如下:") for item in sensitive_find: print(item) print("敏感词位置已用星号进行标注: " + newword) 输出结果: 请输入或者拷贝含有敏感词的宣传文字: 他的技术绝对一流,堪称全国第一,国家级大师! 发现敏感词如下: 第一:1次 国家级:1次 一流:1次 绝对:1次 敏感词位置已用星号进行标注: 他的技术 绝对 一流,堪称全国 第一, 国家级大师!利用匿名函数和max函数取出数字字符串中的最大数num = "2748123" max_num = max(num, key=lambda x: int(x)) print(max_num) 输出结果: 8利用字符串替换方法去除指定子字符串with open("users.txt") as rfile: str1 = rfile.readline() str2 = str1.replace(" ", "") print(str1 == str2) 输出结果: False利用列表推导式去除指定子字符串word = "赵 钱 孙 李 周 吴 郑 王" word = "".join([i for i in word if i != " "]) print(word) 输出结果: 赵钱孙李周吴郑王利用字符串切片去除指定位置的子字符串str = "我爱40982345Python!" new_str = str[:2] + str[10:] print(new_str) 输出结果: 我爱Python!使用汉字转拼音模块对汉字以拼音为序进行排列# 导入汉字转拼音模块 from xpinyin import Pinyin names = ["张三", "李四", "王五", "赵六", "田七"] pin = Pinyin() # 创建汉字转拼音对象 temp = [] # 保存转换结果的空列表 for i in names: # 获取汉字的拼音,跟汉字组合成元组放到临时列表中 temp.append((pin.get_pinyin(i), i)) print(temp) # 输出获取拼音后的列表 temp.sort() # 对列表进行排序 result = [] # 保存排序后的列表 for i in range(len(temp)): result.append(temp[i][1]) # 取出汉字保存到新列表中 print(result) 输出结果: [("zhang-san", "张三"), ("li-si", "李四"), ("wang-wu", "王五"), ("zhao-liu", "赵六"), ("tian-qi", "田七")] ["李四", "田七", "王五", "张三", "赵六"]