第五章 字符串及正则表达式

一. 使用字符串拼接输出一个关于程序员的笑话

  1. 代码:

programmer_1 = '程序员甲: 搞IT太辛苦了,我想换行......怎么办?'

programmer_2 = '程序员乙: 敲一下回车键'

print(programmer_1 + '\n' + programmer_2)

  1. 结果:

程序员甲: 搞IT太辛苦了,我想换行......怎么办?

程序员乙: 敲一下回车键

 

二. 截取身份证号码中的出生日期

  1.  代码:

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:])

  1. 结果:

程序员甲说: 你知道我的生日吗?

程序员乙说: 输入你的身份证号码.

程序员甲说: 123456199006277890

程序员乙说: 你是1990年06月27日出生的,所以你的生日是06月27日

 

三. 输出被@的好友名称

  1. 1.      代码

str1 = '@明日科技 @扎克伯格 @俞敏洪'

list1 = str1.split(' ')           #用空格分割字符串

print('您@的好友有:')

for item in list1:

        print(item[1:])               #输出每个好友名时,去掉@符号

  1. 结果:

您@的好友有:

明日科技

扎克伯格

俞敏洪

 

四. 通过好友列表生成全部被@的好友

  1. 代码:

    list_friend = ['明日科技','扎克伯格','俞敏洪','马云','马化腾']

str_friend = ' @'.join(list_friend)   #用空格+@符号进行连接

at = ' @'+str_friend    #由于使用join()方法时,第一个元素前不加分隔符,所欲需要在前面加上@符号

print('您要@的好友:',at)

  1. 结果:

您要@的好友:  @明日科技 @扎克伯格 @俞敏洪 @马云 @马化腾

 

五. 不区分大小写验证会员名是否唯一

  1. 代码:

#假设已经注册的会员名称保存在一个字符串中,以“|”进行分隔

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,'可以注册!')

  1. 结果:

输入要注册的会员名称:TFBOYS

会员名 TFBOYS 可以注册!

 

六. 格式化不同的数值类型数据

  1. 代码:

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))

  1. 结果:

1251+3950的结果是(以货币形式显示): ¥5,201.00元

120000.10用科学计数法表示: 1.200001E+05

π取5位小数:3.141593

100的16进制的结果是:0x64

天才是由1%的灵感,加上99%的汗水。

 

七. 验证输入的手机号码是否为中国移动的号码

  1. 代码:

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,'是有效的中国移动手机号码。')

  1. 结果:

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。 @ 出现了危险词汇!

我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。 @ 安全!

 

九.替换出现的危险字符

  1. 代码:

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)

  1. 结果:

我是一名程序员,我喜欢看黑客方面的图书,想研究一下Trojan。

 

我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。

十.输出被@的好友名称(应用正则表达式)

1.代码:

import re

str1 = '@明日科技 @扎克伯格 @俞敏洪'

pattern = r'\s*@'

list1 = re.split(pattern,str1)     #用空格和@或单独的@分割字符串

print('您@的好友有:')

for item in list1:

    if item !="":              #输出不为空的元素

        print(item)            #输出每个好友名

2.结果:

您@的好友有:

明日科技

扎克伯格

俞敏洪

 

 

实战一:打印象棋口诀

  1. 代码:

print("象棋口诀:")

str1 = '马走日'

str2 = ','

str3 = '象走田'

str4 = '车走直路炮翻山'

str5 = '士走斜线护将边'

str6 = '小卒一去不回还'

str7 = '。'

print(str1+str2)

print(str3+str2)

print(str4+str2)

print(str5+str2)

print(str6+str7)

  1. 结果:

象棋口诀:

马走日,

象走田,

车走直路炮翻山,

士走斜线护将边,

小卒一去不回还。

 

 

 

实战二:判断车牌归属地

  1. 代码:

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. 结果:

第1张车牌号码:

津A·12345

这张号牌的归属地:天津

第2张车牌号码:

沪A·23456

这张号牌的归属地:上海

第3张车牌号码:

京A·34567

这张号牌的归属地:北京

 

 

实战三:模拟微信抢红包

  1. 代码:

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)))

  1. 结果:

请输入要转入红包的总金额: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

posted @ 2022-10-06 15:57  3-1  阅读(116)  评论(0)    收藏  举报