好用"/>
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 randomlst = [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 randomlst = ['z', 'b', 'Ab', 'CDE', '5', 6, 100, True, 3.14]
result = random.sample(lst, 3)
print(result)
输出结果:
[6, ‘z’, ‘CDE’]
从列表或字符串中随机选择一个元素或字符(可用于生成验证码或动态密码)
import randomstr1 = '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 timespeak_out = win32com.client.Dispatch('sapi.spvoice')
str='今天的气温是'+' '+'零下19度'
speak_out.speak(str) # 输出方言解释
winsound.PlaySound(str, winsound.SND_ASYNC) # 输出结束音
time.sleep(3) # 不加延迟程序马上结束,上面语句的结束音出不来
计算两个日期时间差
import datetimeday1 = 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('输入的密码正确!')breakelse: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 = 0try:a = int(input('请输入第一个数:'))b = int(input('请输入第二个数:'))if opr == '+':result = a + belif opr == '-':result = a - belif opr == '*':result = a * belif opr == '/':result = a / belse: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 randomlist = ["春暖花开", "十字路口", "千军万马", "白手起家", "张灯结彩", "风和日丽", "万里长城", "人来人往", "自由自在","瓜田李下", "助人为乐", "白手起家", "红男绿女", "春风化雨", "马到成功", "拔苗助长", "安居乐业", "走马观花","念念不忘", "落花流水", "张灯结彩", "一往无前", "落地生根", "天罗地网", "东山再起", "一事无成", "山清水秀","别有洞天", "语重心长", "水深火热", "鸟语花香", "自以为是"]
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("过!")continueelif num.strip(" ") == word[bank]:count += 2print("正确,你真棒!")else:count -= 2print("错了,正确答案:", word[bank])i += 1if 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 + "\n"
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) + "\t" + int(lenb) * chr(9632) + " 2019年GDP:" + str(item[1][0]))lenb = format(float(item[1][1]) / base, ".0f")print("".ljust(4) + "\t" + 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('请输入或者拷贝含有敏感词的宣传文字:\n')
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, ' \033[1;31m' + item + '\033[0m') # 敏感词描红输出
print('发现敏感词如下:')
for item in sensitive_find:print(item)
print('敏感词位置已用星号进行标注:\n' + 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('\n', '')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 Pinyinnames = ['张三', '李四', '王五', '赵六', '田七']
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’, ‘田七’)]
[‘李四’, ‘田七’, ‘王五’, ‘张三’, ‘赵六’]
以上内容引自今日头条,原作者:知者不惑FYK,见以下链接。
/
更多推荐
Python 实用技巧若干,确实好用
发布评论