实验5:字符串及正则表达式

一、实验目的和要求

学会使用字符串的常用操作方法和正确应用正则表达式

二、实验环境

软件版本:Python 3.10 64_bit

三、实验过程

1、实例01:使用字符串拼接输出一个关于程序员的笑话

(1)在IDLE中创建一个名称为programmer_splice.py的文件,然后在该文件中定义两个字符串变量,分别记录两名程序员说的话,再将两个字符串拼接到一起,并且在中间拼接一个转义字符串(换行符),最后输出,代码如下:

1 programmer_1 = '程序员甲:搞IT太辛苦了,我想换行……怎么办?' #变量1赋值为字符串
2 programmer_2 = '程序员乙:敲一下回车键'
3 print(programmer_1 +'\n'+ programmer_2)

(2)运行结果如下:

2、实例02:截取身份证号中的出生日期

(1)在IDLE中创建一个名称为idcard.py的文件,然后在该文件中定义3个字符串变量,分别记录两名程序员说的话,再从程序员甲说的身份证号中截取出出生日期,并且组合成“YYYY年MM月DD日”格式的字符串,最后输出截取到的出生日期和生日,代码如下:

1 programmer_1 = '你知道我的生日吗?'          #变量1赋值为字符串
2 print('程序员甲说:',programmer_1)
3 programmer_2 = '输入你的身份证号码。'
4 print('程序员乙说:',programmer_2)
5 idcard = '123456199006277890'
6 print('程序员甲说:',idcard)
7 birthday = idcard[6:10] +'年'+ idcard[10:12] +'月'+ idcard[12:14] +'日' #字符串连接
8 print('程序员乙说:','你是' + birthday +'出生的,所以你的生日是' + birthday[5:]) #字符串切片

(2)运行结果如下:

3、实例03:输出被@的好友名称

(1)在IDLE中创建一个名称为atfriend.py的文件,然后在该文件中定义一个字符串,内容为“@明日科技 @扎克伯格 @俞敏洪”,然后使用split()方法对该字符串进行分割,从而获得好友名称,并输出,代码如下:

1 str1 = '@明日科技 @扎克伯格 @俞敏洪'
2 list1 = str1.split(' ') #分割后的字符串列表['@明日科技',…]
3 print('您的好友有:')
4 for item in list1:
5 print(item[1:]) #输出列表中每个字符串从索引1开始的内容

(2)运行结果如下:

4、实例04:通过好友列表生成全部被@的好友

(1)在IDLE中创建一个名称为atfriend-join.py的文件,然后在该文件中定义一个列表,保存一些好友名称,然后使用join()方法将列表中的每个元素用空格+@符号进行连接,再在连接后的字符串前添加一个@符号,最后输出,代码如下:

1 list_friend = ['明日科技','扎克伯格','俞敏洪','马云','马化腾']
2 str_firend = ' @'.join(list_friend) #将列表的每一个元素用' @'连接起来(除了第一个元素)
3 at = '@' +str_firend #将上述字符串变量的第一个元素前用@连接起来
4 print('您要@的好友:',at)

(2)运行结果如下:

5、实例05:不区分大小写验证会员名是否唯一

(1)在IDLE中创建一个名称为checkusername.py的文件,然后在该文件中定义一个字符串,内容为已经注册的会员名称,以“|”进行分隔,然后使用lower()方法将字符串全部转换为小写字母,接下来再应用input()函数从键盘获取一个输入的注册名称,也将其全部转换为小写字母,再应用if…else…语句和in关键字判断转换后的会员名是否存在转换后的会员名成字符串中,并输出不同的判断结果,代码如下:

1 username_1 = '|MingRi|mr|mingrisoft|WGH|MRSoft|'
2 username_2 = username_1.lower() #将字符串统一成小写字母
3 regname_1 = input('输入要注册的会员名称:') #键盘输入新字符串
4 regname_2 = '|' + regname_1.lower() + '|' #将新字符串转成小写后,与原字符串连接
5 if regname_2 in username_2:
6 print('会员名', regname_1, '已经存在!') #判断字符串是否重复
7 else:
8 print('会员名', regname_1, '可以注册!')

(2)运行结果如下:(以mrsoft和python为例)

6、实例06:格式化不同的数值类型数据

(1)在IDLE中创建一个名称为formatnum.py的文件,然后在该文件中将不同类型的数据进行格式化,并输出,代码如下:

1 import math                                                         #导入python的math模块(文件)
2 print('1251+3950的结果是(以货币形式显示):¥{:,.2f}元'.format(1251+3950))
3 #{:,.2f}用,分隔+小数点后保留两位的flaot型数据
4 print('{0:.1f}用科学计数法表示:{0:E}'.format(120000.1)) #{0:}索引值从0开始,:E是用科学计数法表示
5 print('π取5位小数:{:.5f}'.format(math.pi))
6 print('{0:d}的16位进制结果是:{0:#x}'.format(100)) #10进制为d,16进制为#x
7 print('天才是由{:.0%}的灵感,加上{:.0%}的汗水。'.format(0.01,0.99)) #{:.0%}小数点后保留的形式

(2)运行结果如下:

7、实例07:验证输入的手机号码是否为中国移动的号码

(1)在IDLE中创建一个名称为checkmobile.py的文件,然后在该文件中导入Python的re模块,在定义一个验证手机号码的模式字符串,最后应用该模式字符串验证这两个手机号码,并输出验证结果,代码如下:

 1 import re
2 pattern = r'(13[4-9]\d{8}$|15[01289]\d{8})$' #原生字符串表示 13开头 可选数字范围[] 数据类型及位数 结束符|
3 mobile = '13634222222'
4 match = re.match(pattern,mobile) #match变量重新赋值为 进行模式匹配后的结果值(True None)
5 if match == None:
6 print(mobile,'不是有效的中国移动手机号码。')
7 else:
8 print(mobile,'是有效的中国移动手机号码。')
9 mobile = '13144222221'
10 match = re.match(pattern,mobile)
11 if match == None:
12 print(mobile,'不是有效的中国移动手机号码。')
13 else:
14 print(mobile,'是有效的中国移动手机号码。')

(2)运行结果如下:

8、实例08:验证是否出现危险字符

(1)在IDLE中创建一个名称为checktnt.py的文件,然后在该文件中导入Python的re模块,在定义一个检验危险字符的模式字符串,最后应用该模式字符串验证两段文字,并输出检验结果,代码如下:

 1 import re
2 pattern = r'(黑客)|(抓包)|(监听)|(Trojan)' #模式字符串
3 about = '我是一名程序员,我喜欢看黑客方面的图书,想研究一下Trojan。'
4 match = re.search(pattern,about) #进行模式匹配,查找是否出现模式字符串中的字符,返回匹配值
5 if match == None: #匹配值为None时,about表示的字符串后加''的内容
6 print(about,'@ 安全!')
7 else:
8 print(about,'@ 出现了危险词汇!')
9 about = '我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。'
10 match = re.match(pattern,about)
11 if match == None:
12 print(about,'@ 安全!')
13 else:
14 print(about,'@ 出现了危险词汇!')

(2)运行结果如下:

9、实例09:替换出现的危险字符

(1)在IDLE中创建一个名称为checktnt.py的文件,然后在该文件中,导入Python的re模块,再定义一个验证危险字符的模式字符串,最后应用该模式字符串验证两段文字,并输出验证结果,代码如下:

1 import re
2 pattern = r'(黑客)|(抓包)|(监听)|(Trojan)' #模式字符串
3 about = '我是一名程序员,我喜欢看黑客方面的图书,想研究一下Trojan。\n'
4 sub = re.sub(pattern,'@_@',about) #re.sub()可替换字符串,匹配到pattern中的字符串后,将其替换成''的内容
5 print(sub) #输出sub的值(被替换后的字符串)
6 about = '我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。'
7 sub = re.sub(pattern,'@_@',about)
8 print(sub)

(2)运行结果如下:

10、实例10:输出被@的好友名称(应用正则表达式)

(1)在IDLE中创建一个名称为atfriendsplit1.py的文件,然后在该文件中定义一个字符串,内容为“@明日科技 @扎克伯格 @俞敏洪”,然后使用re模块的split()方法对该字符串进行分割,从而获取出好友名称,并输出,代码如下:

1 import re
2 str1 = '@明日科技 @扎克伯格 @俞敏洪'
3 pattern = r'\s*@' #模式字符串:\s和@
4 list1 = re.split(pattern,str1) #用@分割字符串,得出一个一维列表[@… @… @…]
5 print('您@的好友有:')
6 for item in list1:
7 if item !="": #列表元素不是空格时输出元素
8 print(item)

(2)运行结果如下:

11、实战01:打印象棋口诀

(1)在IDLE中创建一个名称为checktnt.py的文件,然后在该文件中应用字符串输出象棋口诀,代码如下:

 1 str1 = '马走日'
2 str2 = '象走田'
3 str3 = '车走直路炮翻山'
4 str4 = '士走斜线护将边'
5 str5 = '小卒一去不回还'
6 str6 = ','
7 str7 = '。'
8 print('象棋口诀:')
9 print(str1+str6)
10 print(str2+str6)
11 print(str3+str6)
12 print(str4+str6)
13 print(str5+str7)

(2)运行结果如下:

12、实战02:判断车牌归属地

(1)在IDLE中创建一个名称为carplace.py的文件,然后在该文件中实现输出指定车牌的归属地功能,代码如下:

 1 import re
2 chepai = ('津A·12345','沪A·23456','京A·34567')
3 for i in range(len(chepai)):
4 print("第"+str(i+1)+"张车牌号码:"+"\n"+chepai[i]) #按照序列输出车牌
5 if chepai[i][0] == '津': #第i个元素按照字符分割成8个小元素
6 print("这张号牌的归属地:天津")
7 if chepai[i][0] == '沪':
8 print("这张号牌的归属地:上海")
9 if chepai[i][0] == '京':
10 print("这张号牌的归属地:北京")

(2)运行结果如下:

13、实战03:模拟微信抢红包

(1)在IDLE中创建一个名称为qianghongbao.py的文件,然后在该文件中应用输出随机数的random模块和设定小数位的decimal模块,代码如下:

 1 import random
2 import decimal
3 print("——————————模拟微信抢红包——————————")
4 money = input("请输入要装入红包的总金额(元):")
5 nums = int(input("请输入红包的个数(个):"))
6 money_total = decimal.Decimal(money)
7 for num in range(1,nums+1): #循环输出
8 if num == nums:
9 last = money_total #最后一个人的金额=总金额-last
10 else:
11 last = money_total/2*decimal.Decimal(str(random.random())) #限制单个红包不超出总额的一半【可不设置】
12 last = last.quantize(decimal.Decimal('0.00')) #四舍五入,保留两位小数
13 money_total = money_total - last
14 print("第%d个红包:%s" %(num,str(last))) #%字符输出形式【类似C语言】

(2)运行结果如下:

14、实战04:显示实时天气预报

(1)在IDLE中创建一个名称为weathereport.py的文件,然后在该文件中应用字符串的format()方法格式化输出实时天气预报,代码如下:

1 weather = '2018年4月17日\t 天气预报:{:s}\t {:d}℃~{:d}℃\t 微风转西风3~4级'
2 print(weather.format('晴',20,7))
3 print('08:00\t 天气预报:{:s}\t {:d}℃\t 微风'.format('晴',13))
4 print('12:00\t 天气预报:{:s}\t {:d}℃\t 微风'.format('晴',19))
5 print('16:00\t 天气预报:{:s}\t {:d}℃\t 微风'.format('晴',18))
6 print('20:00\t 天气预报:{:s}\t {:d}℃\t 微风'.format('晴',15))
7 print('00:00\t 天气预报:{:s}\t {:d}℃\t 微风'.format('晴',12))
8 print('04:00\t 天气预报:{:s}\t {:d}℃\t 微风'.format('晴',9))

(2)运行结果如下:

Python实验报告(第5章)的更多相关文章

  1. Python实验报告——第4章 序列的应用

    实验报告 [实验目的] 1.掌握python中序列及序列的常用操作. 2.根据实际需要选择使用合适的序列类型. [实验条件] 1.PC机或者远程编程环境. [实验内容] 1.完成第四章 序列的应用 实 ...

  2. Python实验报告——第3章 流程控制语句

    实验报告 [实验目的] 1.掌握python中流程控制语句的使用,并能够应用到实际开发中. [实验条件] 1.PC机或者远程编程环境 [实验内容] 1.完成第三章流程控制语句实例01-09,实战一到实 ...

  3. Python实验报告——第2章 Python语言基础

    实验报告 [实验目的] 1.熟悉在线编程平台. 2.掌握基本的 python 程序编写.编译与运行程序的方法. [实验条件] 1.PC机或者远程编程环境 [实验内容] 1.完成第二章实例01-07,实 ...

  4. python实验报告(第11章)

    实验11:使用Python操作数据库 一.实验目的和要求 1.学会数据库编程接口: 2.学会使用SQLite: 3.学会使用MySQL. 二.实验环境 软件版本:Python 3.10 64_bit ...

  5. python实验报告(第12章)

    实验12:GUI界面编程 一.实验目的和要求 1.学会应用常用控件: 2.学会使用BoxSizer布局: 3.学会事件处理. 二.实验环境 软件版本:Python 3.10 64_bit 三.实验过程 ...

  6. Python实验报告(第8章)

    实验8:模块 一.实验目的和要求 1.了解模块的内容: 2.掌握模块的创建和导入方式: 3.了解包结构的创建和使用. 二.实验环境 软件版本:Python 3.10 64_bit 三.实验过程 1.实 ...

  7. Python实验报告(第13章)

    实验13:Pygame游戏编程 一.实验目的和要求 学会Pygame的基本应用 二.Pygame的优点及应用 使用Python进行游戏开发的首选模块就是Pygame,专为电子游戏设计(包括图像.声音) ...

  8. Python实验报告(第10章)

    实验10:文件及目录操作 一.实验目的和要求 1.掌握基本文件操作(创建.打开.关闭.写入): 2.掌握目录操作的基本操作(创建.删除.遍历): 3.了解高级文件操作(删除文件.获取文件基本信息). ...

  9. Python实验报告(第9章)

    实验9:异常处理及程序调试 一.实验目的和要求 1.了解代码异常知识: 2.掌握异常处理的try-except语句.try-except-else语句.try-except-finally语句.rai ...

  10. Python实验报告(第6章)

    实验6:函数 一.实验目的和要求 1.掌握函数的创建和调用: 2.了解不同的参数如何进行传递: 3.了解返回值的应用: 4.学习变量的作用域: 5.学习匿名函数(lambda). 二.实验环境 软件版 ...

随机推荐

  1. P1886 滑动窗口 /【模板】单调队列 方法记录

    原题链接 滑动窗口 /[模板]单调队列 题目描述 有一个长为 \(n\) 的序列 \(a\),以及一个大小为 \(k\) 的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最 ...

  2. 微软出品自动化神器【Playwright+Java】系列(五) 之 常见点击事件操作

    写在前面 明天就是周五了,这周有那么一两天心情特别不好,真的是做什么都没兴致,所以导致整个人都很丧,什么都不想做. 本打算周一就更新这篇文章的,但由于公司一直加班,每天到家很晚,都是挤时间去学,理解后 ...

  3. SpringBoot框架SpEL表达式注入漏洞复现与原理分析

    前言 这是2016年的一个洞,利用条件是至少知道一个触发 springboot 默认错误页面的接口及参数名. 影响版本:1.1.0-1.1.12 1.2.0-1.2.7 1.3.0 修复方案:升级版本 ...

  4. 测试开发HTTP请求过程(一)

    测试开发HTTP请求过程 HTTP请求过程: 首先要熟悉http请求过程: 1,服务端建立socket监听 2,客户端发送http请求 3,客户端与服务端建立socket连接 4,客户端------t ...

  5. 8.uvloop

    uvloop是asyncio的事件循环的替代方案,性能高于默认asyncio的事件循环的效率,相当于提升两倍,效率可以比肩Go pip3 install uvloop   import asyncio ...

  6. 写一个shell,自动执行jmeter测试脚本

    贡献一个自己写的shell脚本,很简单,但又可以高效率的自动执行jmeter压测脚本. #!/bin/bash #author:zhangyl #version:V1 #该脚本放置于压测脚本的上一层目 ...

  7. java基础篇—基础语法

    一.关键字和保留字    1.什么是关键字? 通俗来说就是带有特殊含义的字符,有自己专门用途的单词 2.特点? 关键字全部由小写构成,以下是java官方列举出的关键字 注意: 保留关键字:指的是现有版 ...

  8. 安装kali linux(干货)

    安装kali 一. 准备工具 1. VMware Workstation Pro https://www.vmware.com/cn/products/workstation-pro/workstat ...

  9. __init__、__all__

    在python中 引用模块包的时候,要先进入此模块的__init__.py中畅游一遍,因此,我们多次需要一个语句的时候,就可以将这些语句写入到__init__.py中: 在使用*号的时候我们可以用__ ...

  10. C语言实验手册

    在三位整数(100~999)中寻找符合条件的整数,并以此从小到大存到数组当中,它既是完全平方数,又是两位数字相同,例如144,676等. #include<stdio.h> #includ ...