“Python 语言程序设计实验2023春季”实验报告

实验报告三 字符串与正则表达式(3月31日23:00截止)

实验三 字符串与正则表达式

班级:软件22-4班 姓名:张权 学号:20222501435

一、实验学时:2学时

二、实验目的

  1. 理解转义字符、ASCII、UTF-8的基本概念与应用;
  2. 掌握字符串常用方法。
  3. 掌握正则表达式基本语法;
  4. 理解正则表达式扩展语法;
  5. 掌握正则表达式模块re的常用函数;

三、实验内容

通过编写函数实现下述各题。

  1. 输入一字符串,各个子串之间按空白字符隔开,分别显式其中最长、最短子串,以及最大、最小字符。
  2. 输入单个字符,判断并显示该字符是否为大写英文字母、小写英文字母、非英文文字字符、空格、数字或者其它字符。
  3. 输入一字符串,各个子串之间按空白字符隔开,要求将其中的纯英文子串的大写字母改为小写,含数字的子串中的阿拉伯数字改写为对应的汉字,并且将所有空白字符改写为'%'。
  4. 字符串加密与解密,输入一字符串,按如下规则加密,将原文中每个字符转换为对应的ascii码后,再将该ascii码加上一100至200之间的整数得到的数值即为该字符对应的密文;解密即为上述过程的逆运算。将该字符串加密后再解密,并且显示原文、密文、解密后文本。
  5. 输入一字符串,要求统计出该字符串中出现频率最高的字符。
  6. 令字符串 s='马丽于2022-4-29 10:10刊发了一首诗《Listen to me》,诗词的大意是:\n Mama you taught me to do the right things,\n So now you have to let your baby fly.\n You've given me everything that I will need,\n To make it through this crazy thing called life,\n Thank you Mum!' ,通过编写函数实现下述各题功能。
  • 1 应用正则表达式判断该字符串是否包含0~9的数字和大小写英文字母。

  • 2 根据正则表达式使用中文逗号、中文句号、英文逗号、英文点号、英文感叹号、英文换行符号将该字符串分割成多个子串。

  • 3 应用正则表达式提取该字符串中的日期时间字符串。

  • 4 应用正则表达式提取该字符串中的诗词名称。

  • 5 应用正则表达式提取该字符串中的姓名。

    四、实验结果

    (在此部分包括问题和解决办法、心得体会;列出保持缩进格式的程序代码及运行结果截图,请注意保持格式统一,截图清晰,大小合适)

    1. 输入一字符串,各个子串之间按空白字符隔开,分别显式其中最长、最短子串,以及最大、最小字符。

      #程序名 test1.py
      #功能:显式字符串中最长、最短子串,以及最大、最小字符
      #作者:张权
      #学号:20222501435
      #日期:2023.3.27
      # 字符串列表
      x=input('请输入一段字符串,字串之间用空格分开:')
      y=x.split(" ")
      y.sort(key=len)
      print("字符串中最短字串为:",y[0])
      y.sort(key=len,reverse=True)
      print("字符串中最长字符串为:",y[0])
      y.sort()
      print("字符串中最小字符为:",y[0])
      y.sort(reverse=True)
      print("字符串中最大字符为:",y[0])
      
      copy

      运行结果截图为: 图片描述

    2. 输入单个字符,判断并显示该字符是否为大写英文字母、小写英文字母、非英文文字字符、空格、数字或者其它字符。

      #程序名 test2.py
      #功能:判断输入字符的形式
      #作者:张权
      #学号:20222501435
      #日期:2023.3.26
      x=input('请输入一个字符')
      if x.isupper() is True:
          print(x,'是大写英文字母')
       elif x.islower() is True:
          print(x,'是小写英文字母')
       else:
          if x>='0'and x<='9':
            print(x,'是非英文文字字符还是数字')
          elif x.isspace() is True:
              print('该字符是非英文文字字符还是空格')
          else:
            print(x,'为其他字符')
      
      copy

      运行结果截图为:

图片描述

  1. 输入一字符串,各个子串之间按空白字符隔开,要求将其中的纯英文子串的大写字母改为小写,含数字的子串中的阿拉伯数字改写为对应的汉字,并且将所有空白字符改写为'%'。

    #程序名 test3.py
    #功能:将其中的纯英文子串的大写字母改为小写,含数字的子串中的阿拉伯数字改写为对应的汉字,并且将所有空白字符改写为'%'
     #作者:张权
    #学号:20222501435
     #日期:2023.3.29
    x=input('请输入一字符串,每个字串之间用空白字符隔开:')
     y=x.split(' ')
    t=0
    for i in y:
        if i.isalpha():
          i=i.lower()
            y[t]=i
          t=t+1
        else:
            t=t+1
    x=' '.join(y)
    table=''.maketrans('0123456789','零一二三四五六七八九')
    x=x.translate(table)
     x=x.replace(' ','%')
    print(x)
    
    copy

    ​ 运行结果截图为:

    图片描述

  1. 字符串加密与解密,输入一字符串,按如下规则加密,将原文中每个字符转换为对应的ascii码后,再将该ascii码加上一100至200之间的整数得到的数值即为该字符对应的密文;解密即为上述过程的逆运算。将该字符串加密后再解密,并且显示原文、密文、解密后文本。

    #程序名 test4.py
    #功能:字符串的加密和解密
    #作者:张权
    #学号:20222501435
    #日期:2023.3.29
    import random
    s=random.randint(100,200)
    text=input("请输入一段字符串:")
    text1=[]
    text2=[]
    x=0
    y=0
    for i in text:
        text1.append(str(ord(i)+s))
    text1="".join(text1)
    while y<len(text1):
        text2.append((chr(int(text1[y])*100+int(text1[y+1])*10+int(text1[y+2])-s)))
        y=y+3
    text2=''.join(text2)
    print("原文为:",text)
    print("密文为:",text1)
    print("解密后文本为:",text2)
    
    copy

    ​ 运行结果截图为:

    图片描述

  1. 输入一字符串,要求统计出该字符串中出现频率最高的字符。

    #程序名 test5.py
    #功能:统计出字符串中出现频率最高的字符
    #作者:张权
    #学号:20222501435
    #日期:2023.3.27
    x=input('请输入一段字符串:')
    y={}
    a=0
    print("出现频率最高的字符为:",end='')
    for i in x:
        if i is not y:
            y[i]=x.count(i)
    for key,value in y.items():
        if value==max(y.values()):
            print(key,end=' ')
    
    copy

    运行结果截图为:

    图片描述

  1. 令字符串 s='马丽于2022-4-29 10:10刊发了一首诗《Listen to me》,诗词的大意是:\n Mama you taught me to do the right things,\n So now you have to let your baby fly.\n You've given me everything that I will need,\n To make it through this crazy thing called life,\n Thank you Mum!' ,通过编写函数实现下述各题功能。
  • 1 应用正则表达式判断该字符串是否包含0~9的数字和大小写英文字母。

    #程序名 test6.1.py
    #功能:应用正则表达式判断该字符串是否包含0~9的数字和大小写英文字母
    #作者:张权
    #学号:20222501435
    #日期:2023.3.29
    import re
    s="马丽于2022-4-29 10:10刊发了一首诗《Listen to me》," \
      "诗词的大意是:\n Mama you taught me to do the right " \
      "things,\n So now you have to let your baby " \
      "fly.\n You've given me everything that I will need,\n " \
      "To make it through this crazy thing called life,\n Thank you Mum!"
    x=re.search('[a-z]',s)
    if x:
        x=re.search('[A-Z]',s)
        if x:
            x=re.search('[0-9]',s)
            if x:
                print("该字符串包含0-9的数字和大小写英文字母")
            else:
                print("该字符串不包含0-9的数字或大小写英文字母")
        else:
            print("该字符串不包含0-9的数字或大小写英文字母")
    else:
        print("该字符串不包含0-9的数字或大小写英文字母")
    
    copy

    运行结果截图如下:

    图片描述

  • 2 根据正则表达式使用中文逗号、中文句号、英文逗号、英文点号、英文感叹号、英文换行符号将该字符串分割成多个子串。

    #程序名 test6.2.py
    #功能:根据正则表达式使用中文逗号、中文句号、英文逗号、英文点号、英文感叹号、英文换行符号将该字符串分割成多个子串。
    #作者:张权
    #学号:20222501435
    #日期:2023.3.29
    import re
    s="马丽于2022-4-29 10:10刊发了一首诗《Listen to me》," \
      "诗词的大意是:\n Mama you taught me to do the right " \
      "things,\n So now you have to let your baby " \
      "fly.\n You've given me everything that I will need,\n " \
      "To make it through this crazy thing called life,\n Thank you Mum!"
    print(re.split('[,。\.,\\n]',s))
    
    copy

    运行结果截图为:

    图片描述

  • 3 应用正则表达式提取该字符串中的日期时间字符串。

    #程序名 test6.3.py
    #功能:应用正则表达式提取该字符串中的日期时间字符串。
    #作者:张权
    #学号:20222501435
    #日期:2023.3.30
    import re
    s="马丽于2022-4-29 10:10刊发了一首诗《Listen to me》," \
      "诗词的大意是:\n Mama you taught me to do the right " \
      "things,\n So now you have to let your baby " \
      "fly.\n You've given me everything that I will need,\n " \
      "To make it through this crazy thing called life,\n Thank you Mum!"
    print(re.findall('[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}',s))
    
    copy

    运行结果截图如下:

    图片描述

  • 4 应用正则表达式提取该字符串中的诗词名称。

    #程序名 test6.4.py
    #功能:应用正则表达式提取该字符串中的诗词名称。
    #作者:张权
    #学号:20222501435
    #日期:2023.3.30
    import re
    s="马丽于2022-4-29 10:10刊发了一首诗《Listen to me》," \
      "诗词的大意是:\n Mama you taught me to do the right " \
      "things,\n So now you have to let your baby " \
      "fly.\n You've given me everything that I will need,\n " \
      "To make it through this crazy thing called life,\n Thank you Mum!"
    print(re.findall(r'[《](.*)[》]',s))
    
    copy

    运行结果截图如下:

    图片描述

  • 5 应用正则表达式提取该字符串中的姓名。

    #程序名 test6.5.py
    #功能:应用正则表达式提取该字符串中的姓名。
    #作者:张权
    #学号:20222501435
    #日期:2023.3.30
    import re
    s="马丽于2022-4-29 10:10刊发了一首诗《Listen to me》," \
      "诗词的大意是:\n Mama you taught me to do the right " \
      "things,\n So now you have to let your baby " \
      "fly.\n You've given me everything that I will need,\n " \
      "To make it through this crazy thing called life,\n Thank you Mum!"
    pattern=re.compile(r'([\u4e00-\u9fa5]+)于')
    match=pattern.search(s)
    print(match.group(1))
    
    copy

    运行结果截图如下:

    图片描述

五、实验小结

(包括问题和解决办法、心得体会、意见与建议等)

1.问题:在本次实验中需要用到列表和字典等之前的知识,而我将这些知识遗忘了,做起来很困难。

​ 解决办法:根据同学的讲解并结合书上的知识解决了问题。

2.问题:用for循环时,有时忘记了i是列表中的元素,而错误的当成了整形,导致程序报错。

​ 解决办法:进行多次联系,熟悉掌握。

心得体会:要多复习之前的知识,将知识连贯起来使用,否则做题时会导致知识使用不连贯。

最新评论

答案正确,程序规范,很好。

2023-07-06 00:21:48
回复