第五章 字符串及正则表达式
一. 使用字符串拼接输出一个关于程序员的笑话
- 代码:
programmer_1 = '程序员甲: 搞IT太辛苦了,我想换行......怎么办?'
programmer_2 = '程序员乙: 敲一下回车键'
print(programmer_1 + '\n' + programmer_2)
- 结果:
程序员甲: 搞IT太辛苦了,我想换行......怎么办?
程序员乙: 敲一下回车键
二. 截取身份证号码中的出生日期
- 代码:
programer_1 = '你知道我的生日吗?' #程序员甲问程序员乙的台词
print('程序员甲说:',programer_1) #输出程序员甲的台词
programer_2 = '输入你的身份证号码.' #程序员乙的台词
print('程序员乙说:',programer_2) #输出程序员乙的台词
idcard = '123456199006277890' #定义保存身份证号码的字符串
print('程序员甲说:',idcard) #程序员甲说出身份证号码
birthday = idcard[6:10] + '年'+idcard[10:12] +'月' + idcard[12:14] +'日' #截取生日
print('程序员乙说:','你是'+birthday +'出生的,所以你的生日是'+birthday[5:])
- 结果:
程序员甲说: 你知道我的生日吗?
程序员乙说: 输入你的身份证号码.
程序员甲说: 123456199006277890
程序员乙说: 你是1990年06月27日出生的,所以你的生日是06月27日
三. 输出被@的好友名称
- 1. 代码:
str1 = '@明日科技 @扎克伯格 @俞敏洪'
list1 = str1.split(' ') #用空格分割字符串
print('您@的好友有:')
for item in list1:
print(item[1:]) #输出每个好友名时,去掉@符号
- 结果:
您@的好友有:
明日科技
扎克伯格
俞敏洪
四. 通过好友列表生成全部被@的好友
- 代码:
list_friend = ['明日科技','扎克伯格','俞敏洪','马云','马化腾']
str_friend = ' @'.join(list_friend) #用空格+@符号进行连接
at = ' @'+str_friend #由于使用join()方法时,第一个元素前不加分隔符,所欲需要在前面加上@符号
print('您要@的好友:',at)
- 结果:
您要@的好友: @明日科技 @扎克伯格 @俞敏洪 @马云 @马化腾
五. 不区分大小写验证会员名是否唯一
- 代码:
#假设已经注册的会员名称保存在一个字符串中,以“|”进行分隔
username_1 = '|MingRi|mr|mingrisoft|WGH|MRSoft|'
username_2 = username_1.lower() #将会员名称字符串全部转换为小写
regname_1 = input('输入要注册的会员名称:')
regname_2 = '|' +regname_1.lower()+'|' #将要注册的会员名称全部转换为小写
if regname_2 in username_2: #判断输入的会员名称是否存在
print('会员名',regname_1, '已经存在!')
else:
print('会员名',regname_1,'可以注册!')
- 结果:
输入要注册的会员名称:TFBOYS
会员名 TFBOYS 可以注册!
六. 格式化不同的数值类型数据
- 代码:
import math #导入python的数学模块
#以货币形式显示
print('1251+3950的结果是(以货币形式显示): ¥{:,.2f}元'.format(1251+3950))
print('{0:.2f}用科学计数法表示: {0:E}'.format(120000.1)) #用科学计数法表示
print('π取5位小数:{:5f}'.format(math.pi)) #输出小数点后五位
print('{0:d}的16进制的结果是:{0:#x}'.format(100)) #输出十六进制数
#输出百分比,并且不带小数
print('天才是由{:.0%}的灵感,加上{:.0%}的汗水。'.format(0.01,0.99))
- 结果:
1251+3950的结果是(以货币形式显示): ¥5,201.00元
120000.10用科学计数法表示: 1.200001E+05
π取5位小数:3.141593
100的16进制的结果是:0x64
天才是由1%的灵感,加上99%的汗水。
七. 验证输入的手机号码是否为中国移动的号码
- 代码:
import re #导入python的re模板
pattern = r'(13[4-9]\d{8})$|(15[01289]\d{8})$'
mobile = '13634222222'
match = re.match(pattern,mobile) #进行模式匹配
if match == None: #判断是否为None,为真表示匹配失败
print(mobile,'不是有效的中国移动手机号码。')
else:
print(mobile,'是有效的中国移动手机号码。')
mobile = '13144222221'
match = re.match(pattern,mobile) #进行模式匹配
if match ==None: #判断是否为None,为真表示匹配失败
print(mobile,'不是有效的中国移动手机号码。')
else:
print(mobile,'是有效的中国移动手机号码。')
- 结果:
13634222222 是有效的中国移动手机号码。
13144222221 不是有效的中国移动手机号码。
八.验证是否出现危险字符
1.代码:
import re #导入python的re模块
pattern = r'(黑客)|(抓包)|(监听)|(Trojan)' #模式字符串
about = '我是一名程序员,我喜欢看黑客方面的图书,想研究一下Trojan。'
match = re.search(pattern, about) #进行模式匹配
if match == None: #判断是否为None,为真表示匹配失败
print(about, '@ 安全!')
else:
print(about, '@ 出现了危险词汇!')
about = '我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。'
match = re.match(pattern, about) #进行模式匹配
if match == None: #判断是否为None,为真表示匹配失败
print(about, '@ 安全!')
else:
print(about, '@ 出现了危险词汇!')
2.结果:
我是一名程序员,我喜欢看黑客方面的图书,想研究一下Trojan。 @ 出现了危险词汇!
我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。 @ 安全!
九.替换出现的危险字符
- 代码:
import re #导入python的re模板
pattern = r'(黑客)|(抓包)|(监听)|(Trojan)' #模式字符串
about = '我是一名程序员,我喜欢看黑客方面的图书,想研究一下Trojan。\n'
sub = re.sub(pattern,'@__@',about) #进行模式替换
print(sub)
about = '我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。'
sub = re.sub(pattern,'@__@',about) #进行模式替换
print(sub)
- 结果:
我是一名程序员,我喜欢看黑客方面的图书,想研究一下Trojan。
我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。
十.输出被@的好友名称(应用正则表达式)
1.代码:
import re
str1 = '@明日科技 @扎克伯格 @俞敏洪'
pattern = r'\s*@'
list1 = re.split(pattern,str1) #用空格和@或单独的@分割字符串
print('您@的好友有:')
for item in list1:
if item !="": #输出不为空的元素
print(item) #输出每个好友名
2.结果:
您@的好友有:
明日科技
扎克伯格
俞敏洪
实战一:打印象棋口诀
- 代码:
print("象棋口诀:")
str1 = '马走日'
str2 = ','
str3 = '象走田'
str4 = '车走直路炮翻山'
str5 = '士走斜线护将边'
str6 = '小卒一去不回还'
str7 = '。'
print(str1+str2)
print(str3+str2)
print(str4+str2)
print(str5+str2)
print(str6+str7)
- 结果:
象棋口诀:
马走日,
象走田,
车走直路炮翻山,
士走斜线护将边,
小卒一去不回还。
实战二:判断车牌归属地
- 代码:
str1 = '津A·12345','沪A·23456','京A·34567'
for i in range(len(str1)):
print('第' + str(i+1) +'张车牌号码:\n' + str1[i])
if str1[i][0]== '津':
print('这张号牌的归属地:天津')
if str1[i][0] == '沪':
print('这张号牌的归属地:上海')
if str1[i][0] == '京':
print('这张号牌的归属地:北京')
- 结果:
第1张车牌号码:
津A·12345
这张号牌的归属地:天津
第2张车牌号码:
沪A·23456
这张号牌的归属地:上海
第3张车牌号码:
京A·34567
这张号牌的归属地:北京
实战三:模拟微信抢红包
- 代码:
import random
import decimal
money = input("请输入要转入红包的总金额:")
money_total = decimal.Decimal(money)
nums = int(input("请输入红包的个数:"))
for num in range(1,nums+1):
if num == nums:
last = money_total
else:
last = money_total/2*decimal.Decimal(str(random.random()))
last = last.quantize(decimal.Decimal('0.00'))
money_total = money_total-last
print("第%d个红包: %s" %(num,str(last)))
- 结果:
请输入要转入红包的总金额:50
请输入红包的个数:10
第1个红包: 22.58
第2个红包: 8.81
第3个红包: 6.66
第4个红包: 0.63
第5个红包: 5.38
第6个红包: 2.08
第7个红包: 0.90
第8个红包: 1.09
第9个红包: 0.53
第10个红包: 1.34