首页 > 编程语言 >Python实验报告(第五周)

Python实验报告(第五周)

时间:2022-09-29 18:12:06浏览次数:49  
标签:程序员 item Python pattern re 第五 字符串 print 实验报告

实验5:Python字符串及正则表达式 一、实验目的和要求

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

二、实验环境

软件版本:Python 3.10 64_bit

三、实验过程

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

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

1 programmer_1 = "程序员甲:搞IT太辛苦了,我想换行……怎么办?"
2 programmer_2 = "程序员乙:敲一下回车键"
3 print(programmer_1 + "\n" + programmer_2)

(2)运行结果如图所示:

 

 

 

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

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

1 programer_1 = "你知道我的生日吗?"       # 程序员甲问程序员乙的台词
2 print("程序员甲说:",programer_1)       # 输出程序员甲的台词
3 programer_2 = "输入你的身份证号码。"     # 程序员乙的台词
4 print("程序员乙说:",programer_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、实例3:输出被@的好友名称

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

1 str1 = "@明日科技 @扎克伯格 @俞敏洪"
2 list1 = str1.split(" ")         # 用空格分割字符串
3 print("您@的好友有:")
4 for item in list1:
5     print(item[1:])             # 输出每个好友名时,去掉@符号

(2)运行结果如图所示:

 

 

 

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

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

1 list_friend = ["明日科技","扎克伯格","俞敏洪","马云","马化腾"]  # 好友列表
2 str_friend = " @".join(list_friend)               # 用空格+@符号进行连接
3 at = "@" + str_friend                        # 由于使用join()方法时,第一个元素前不加分隔符,所以需要在前面加上@符号
4 print("您要@的好友:",at)

(2)运行结果如图所示:

 

 

 

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

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

1 # 假设已经注册的会员名称保存在一个字符串中,以“|”进行分隔
2 username_1 = "|MingRi|mr|mingrisoft|WGH|MRSoft|"
3 username_2 = username_1.lower()                    # 将会员名称字符串全部转换为小写
4 regname_1 = input("输入要注册的会员名称:")
5 regname_2 = "|" + regname_1.lower() + "|"          # 将要注册的会员名称全部转换为小写
6 if regname_2 in username_2:                        # 判断输入的会员名称是否存在
7     print("会员名",regname_1,"已经存在!")
8 else:
9     print("会员名",regname_1,"可以注册!")

(2)运行结果:

输入mrsoft后

 

输入python后

 

 

 

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

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

1 import math                                              # 导入Python数学模块
2 # 以货币形式显示
3 print("1251+3950的结果是(以货币形式显示):¥{:,.2f}元".format(1251+3950))
4 print("{0:.1f}用科学计数法表示:{0:E}".format(120000.1))    # 用科学计数法表示
5 print("Π取5位小数:{:.5f}".format(math.pi))                # 输出小数点后五位
6 print("{0:d}的16进制结果是:{0:#x}".format(100))            # 输出十六进制数
7 # 输出百分比,并且不带小数
8 print("天才是由{:.0%}的灵感,加上{:.0%}的汗水。".format(0.01,0.99))

(2)运行结果如图所示:

 

 

 

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

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

 1 import re                                           # 导入Python的re模板
 2 pattern = r"(13[4-9]\d{8})$|(15[01289]\d{8})$"
 3 mobile = "13634222222"
 4 match = re.match(pattern,mobile)                    # 进行模式匹配
 5 if match == None:                                   # 判断是否为None,为真表示匹配失败
 6     print(mobile,"不是有效的中国移动手机号码。")
 7 else:
 8     print(mobile,"是有效的中国移动手机号码。")
 9 mobile = "13144222221"
10 match = re.match(pattern,mobile)                    # 进行模式匹配
11 if match == None:                                   # 判断是否为None,为真表示匹配失败
12     print(mobile,"不是有效的中国移动手机号码。")
13 else:
14     print(mobile,"是有效的中国移动手机号码。")

(2)运行结果如图所示:

 

 

 

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

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

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

(2)运行结果如图所示:

 

 

 

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

(1)在IDLE中创建一个名为checktnt.py的文件,然后在该文件中导入Python的re模块,再定义一个验证危险字符的模式字符串,并应用该模式字符串验证两段文字,若出现危险字符则使用sub()方法进行替换。代码如下:

1 import re                                           # 导入Python的re模板
2 pattern = r"(黑客)|(抓包)|(监听)|(Trojan)"            # 模式字符串
3 about = "我是一名程序员,我喜欢看黑客方面的图书,想研究一下Trojan。\n"
4 sub = re.sub(pattern,"@_@",about)                   # 进行模式替换
5 print(sub)
6 about = "我是一名程序员,我喜欢看计算机网络方面的图书,喜欢开发网站。"
7 sub = re.sub(pattern,"@_@",about)                   # 进行模式替换
8 print(sub)

(2)运行结果如图所示:

 

 

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

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

1 import re                        # 导入Python的re模板
2 str1 = "@明日科技 @扎克伯格 @俞敏洪"
3 pattern = r"\s*@"
4 list1 = re.split(pattern,str1)   # 用空格和@或单独的@分割字符串
5 print("您@的好友有:")
6 for item in list1:
7     if item !="":                # 输出不为空的元素
8         print(item)              # 输出每个好友名

(2)运行结果如图所示:

 

 

 

11、正则表达式(re模块)实践一:匹配出由“数字、字母、特殊字符”这三种字符组成的8位密码

(1)代码如下:

1 import re                       # 导入Python的re模块
2 pattern = r"^(?![A-Za-z0-9]+$)(?![a-z0-9\\W]+$)(?![A-Za-z\\W]+$)(?![A-Z0-9\\W]+$)^.{8}$"    # 模式字符串
3 passward = ["Aab_0!@#","asd123~!@1111","11223344"]              # 要匹配的密码列表
4 for item in passward:                                           # 遍历列表中的每个密码
5     match = re.search(pattern, item)                            # 进行模式匹配
6     if match == None:                                           # 判断是否为None,为真表示匹配失败
7         print(item,"不是由数字、字母、特殊字符组成的8位密码")
8     else:
9         print(item,"是由数字、字母、特殊字符组成的8位密码")

(2)运行结果如图所示:

 

 

 

12、正则表达式(re模块)实践二:匹配出身份证属于广东省的身份证号码(提示:广东省身份证的开头两位数字为44)

(1)代码如下:

 1 import re
 2 pattern = r"(^44\d{13}$)|(^44\d{16}$)|(^44\d{15})(\d|X|x)$"         # 模式字符串
 3 idcard = ["445222200401022422","44233212189678902x",
 4           "44279273611389230X","447865432197397",
 5           "402112321534556","4411223344556677889989"]               # 要匹配的字符串列表
 6 for item in idcard:                              # 遍历列表中的每个身份证号码
 7     if (len(item) == 15) or (len(item) == 18):                      # 判断是否符合身份证号码长度
 8         match = re.search(pattern, item)                            # 进行模式匹配
 9         if match == None:                                           # 判断是否为None,为真表示匹配失败
10             print(item + " 的开头两位数字为:" + item[0:2] + ",不是广东省的身份证号码")
11         else:
12             print(item + " 的开头两位数字为:" + item[0:2] + ",是广东省的身份证号码")
13     else:
14         print(item + " 的长度为" + str(len(item)) + ",不符合身份证号码格式")

(2)运行结果如图所示:

 

 

13、实战一:打印象棋口诀

(1)下象棋前需要了解以下象棋口诀:

   ① 马走日

   ② 象走田

   ③ 车走直路炮翻山

   ④ 士走斜线护将边

   ⑤ 小卒一去不回还

应用字符串保存上面的象棋口诀并加上正确的标点符号输出。

代码如下:

1 list = ["马走日","象走田","车走直路炮翻山","士走斜线护将边","小卒一去不回还"]      # 创建口诀列表
2 str1 = " ,".join(list)              # 用空格+,符号进行连接
3 str2 = str1 + " 。"                  # 在后面加上。符号
4 for item in str2:
5     if item == ",":                 # 一句口诀后换行输出
6         print(item)
7     else:                            # 否则不换行输出
8         print(item,end = "")

(2)运行结果如图所示:

 

 

14、实战二:判断车牌归属地

(1)根据车牌号码可以知道该车辆的归属地,本实战将实现输出指定车牌的归属地功能。代码如下:

 1 list_num = ["津A • 12345","沪A • 23456","京A • 34567"]    # 创建车牌号码列表
 2 for index,item in enumerate(list_num):                   # 遍历列表中的每个车牌号码
 3     print("第" + str(index+1) + "张车牌号码:\n" + item)
 4     if item[0:1] == "津":                                # 判断车牌号码的归属地是否为天津
 5         beyond = "天津"
 6     elif item[0:1] == "沪":                              # 判断车牌号码的归属地是否为天津
 7         beyond = "上海"
 8     elif item[0:1] == "京":                              # 判断车牌号码的归属地是否为天津
 9         beyond = "北京"
10     print("这张号码的归属地:",beyond)

(2)运算结果如图所示:

 

 

15、实战三:模拟微信抢红包

(1)模拟微信抢红包(提示:本实例实现时需要应用生成随机数的random模块和支持十进制浮点运算的decimal 模块)。代码如下:

 1 import random               # 导入Python的random模块
 2 import decimal              # 导入Python的decimal模块
 3 print("——————————模拟微信抢红包——————————")
 4 money = float(input("请输入要装入红包的总金额(元):"))    # 输入红包总金额
 5 num = int(input("请输入红包的个数(个):"))                # 输入红包个数
 6 red_list = []
 7 money = round(money,2)
 8 num = decimal.Decimal(num)
 9 for i in range(1,int(num)):                # 生成 num-1 个红包
10     red = random.uniform(0.01,money)       # 随机在0.01到红包总金额中取一个数
11     red = round(red,2)                     # 取小数点后两位
12     money = money - red 
13     red_list.append(red)                   # 将 num-1 个红包存入列表中
14 red_list.append(round(money,2))            # 将剩余金额作为最后一个红包
15 random.shuffle(red_list)                   # 打乱列表顺序
16 for j in range(len(red_list)):
17     print("第" + str(j+1) + "个红包:" + str(red_list[j]) + "元")

(2)运行结果如图所示:

 

 

16、实战四:显示实时天气预报

(1)应用字符串的format()方法格式化输出实时天气预报,代码如下:

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

(2)运行结果如图所示:

标签:程序员,item,Python,pattern,re,第五,字符串,print,实验报告
From: https://www.cnblogs.com/xiakong/p/16742520.html

相关文章

  • python人工智能项目实战,PDF+源码
    机器学习AI算法工程 公众号:datayx《python人工智能项目IntelligentProjectsUsingPython》实施机器学习和深度学习方法,使用Python构建智能,认知AI项目主要特点帮助您掌......
  • 用 Python 翻译音频
    用Python翻译音频FrançoiseGilot,TheTelephoneCall,1952我被要求开始转录一些工作中的电话。有些电话很短,有些可能长达一个小时。有些也有更多的背景噪音,也听......
  • Python 环境管理
    Python环境管理Python版本、虚拟环境、依赖、包管理曾几何时,开发人员的笔记本电脑上只有一个Python版本和一个Python环境,一切运行良好。直到有一天,您需要处理多个项......
  • 我学到了为 AWS 编写 Python TUI 控制台的五件事
    我学到了为AWS编写PythonTUI控制台的五件事AWSCloudExplorerrunningonLinux通常,我喜欢使用Terraform和Ansible使用声明性语言编写代码以部署基础设施。......
  • python GIL全局解释器锁
    全局解释器锁简称:GIL(GlobalInterperterLock)。首先需要明确一点就是,GIL并不是Python语言的特性,它是在现实Python解释器时引用的一个概念。GIL只在CPython解释器上存在。......
  • python 线程
    1.1线程的背景知识importthreading#导入线程相关的模块t=threading.current_thread()#返回当前线程print(t)#主线程执行print(t.getName())#线程名字print......
  • python使用win32api进行后台窗口的部分截图函数
    defwindow_capture_beat(hwnd,stayx:int,endx:int,stay:int,endy:int):hwndDC=win32gui.GetWindowDC(hwnd)mfcDC=win32ui.CreateDCFromHandle(hwndDC)......
  • python 监控键盘事件
    frompynputimportkeyboard#按下后执行defon_press(key):try:ifkey==keyboard.KeyCode.from_char('enter'):passelifkey......
  • python5种线程锁
    # 线程安全线程安全是多线程或多进程编程中的一个概念,在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会......
  • python 生成伪随机数函数 random
    """random函数:出一个伪随机数具体怎么做?一般我们会考虑先查找python官方自带的文档在IDLE的右上角点击HELP-->PythonDoc(F1)-->点击左上角的索引-->输入我们要......