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

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

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

一、实验学时: 2学时

二、实验目的

1.理解转义字符、ASCII、UTF-8的基本概念与应用;

2.掌握字符串常用方法;

3.掌握正则表达式基本语法;

4.理解正则表达式扩展语法;

5.掌握正则表达式模块re的常用函数;

三、实验内容

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

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

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

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

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

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

令字符串 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.输入一字符串,各个子串之间按空白字符隔开,分别显式其中最长、最短子串,以及最大、最小字符。

#程序名:1.py
#功能:输入一字符串,各个子串之间按空白字符隔开,分别显式其中最长、最短子串,以及最大、最小字符。
#作者:赵民昌
#学号:20222501290
#日期:2023/3/30
#思路:用split函数分割,找到最长与最短字符,构建字符串集合,用max与min找到最大最小字符

s = input("请输入字符串:")
substrings = s.split()  # 按空白字符分割字符串为子串列表

longest_substring = max(substrings, key=len)  # 找到最长子串
shortest_substring = min(substrings, key=len)  # 找到最短子串

all_chars = set(s)  # 构建所有字符的集合
max_char = max(all_chars)  # 找到最大字符
min_char = min(all_chars)  # 找到最小字符

print("最长子串:", longest_substring)
print("最短子串:", shortest_substring)
print("最大字符:", max_char)
print("最小字符:", min_char)
copy

图片描述

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

#程序名:2.py
#功能:输入单个字符,判断并显示该字符是否为大写英文字母、小写英文字母、非英文文字字符、空格、数字或者其它字符。
#作者:赵民昌
#学号:20222501290
#日期:2023/3/31
#思路:输入字符,用isalpha/isupper/isspace/isdigit判断大写小写空格

c = input("请输入字符:")

if c.isalpha():
    if c.isupper():
        print(c, "是大写英文字母")
    else:
        print(c, "是小写英文字母")
elif c.isspace():
    print(c, "是空格")
elif c.isdigit():
    print(c, "是数字")
else:
    print(c, "是非英文字符或其它字符")
copy

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

#程序名:3.py
#功能:输入一字符串,各个子串之间按空白字符隔开,要求将其中的纯英文子串的大写字母改为小写,含数字的子串中的阿拉伯数字改写为对应的汉字,并且将所有空白字符改写为'%'。
#作者:赵民昌
#学号:20222501290
#日期:2023/3/31
import re

# 定义数字对应汉字的字典
num_dict = {
    "0": "零",
    "1": "一",
    "2": "二",
    "3": "三",
    "4": "四",
    "5": "五",
    "6": "六",
    "7": "七",
    "8": "八",
    "9": "九"
}

# 输入字符串,并将空白字符替换为'%'
str_input = input("请输入一串字符串:").replace(" ", "%")

# 利用正则表达式分割子串
sub_str_list = re.split(r"(\W+)", str_input)

# 对于分割后的每个子串进行相应的处理
for i in range(len(sub_str_list)):
    sub_str = sub_str_list[i]
    # 判断是否为纯英文子串,是则进行大写转小写
    if sub_str.isalpha():
        sub_str_list[i] = sub_str.lower()
    # 判断是否为含数字的子串,是则进行阿拉伯数字转汉字
    elif any(c.isdigit() for c in sub_str):
        for digit, word in num_dict.items():
            sub_str_list[i] = sub_str_list[i].replace(digit, word)
            
# 将所有子串重新拼接为一个字符串
result_str = ''.join(sub_str_list)

# 输出处理后的结果
print(result_str)
copy

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

#程序名:4.py
#功能:字符串加密与解密,输入一字符串,按如下规则加密,将原文中每个字符转换为对应的ascii码后,再将该ascii码加上一100100至200200之间的整数得到的数值即为该字符对应的密文;解密即为上述过程的逆运算。将该字符串加密后再解密,并且显示原文、密文、解密后文本。
#作者:赵民昌
#学号:20222501290
#日期:2023/3/31
import random

# 加密函数
def encrypt(text):
    # 生成一个随机整数
    shift = random.randint(100100, 200200)
    encrypted_text = ''
    for c in text:
        # 将字符转换为ascii码并加上shift后得到新的ascii码
        encrypted_ascii = ord(c) + shift
        # 将新的ascii码转换为字符拼接到加密文本中
        encrypted_text += chr(encrypted_ascii)
    return encrypted_text, shift

# 解密函数
def decrypt(encrypted_text, shift):
    decrypted_text = ''
    for c in encrypted_text:
        # 将ascii码减去shift即可得到原始的ascii码
        decrypted_ascii = ord(c) - shift
        # 将得到的ascii码转换为字符拼接到解密文本中
        decrypted_text += chr(decrypted_ascii)
    return decrypted_text

# 输入待加密的字符串
text = input("请输入要加密的字符串:")

# 加密字符串并输出结果
encrypted_text, shift = encrypt(text)
print("加密后的字符串为:", encrypted_text)

# 解密加密后的字符串并输出解密后的结果
decrypted_text = decrypt(encrypted_text, shift)
print("解密后的字符串为:", decrypted_text)
copy

图片描述 5.输入一字符串,要求统计出该字符串中出现频率最高的字符。

令字符串 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.应用正则表达式提取该字符串中的姓名。

#程序名:5.py
#功能:输入一字符串,要求统计出该字符串中出现频率最高的字符。
#作者:赵民昌
#学号:20222501290
#日期:2023/3/31

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!'

# 1. 判断字符串是否包含数字和字母
if re.search(r'[0-9a-zA-Z]', s):
    print("该字符串包含数字和字母")
else:
    print("该字符串不包含数字和字母")

# 2. 分割字符串成多个子串
substrings = re.split(r'[,。,.\n!]', s)
print("分割后的子串为:", substrings)

# 3. 提取字符串中的日期时间字符串
date_time_string = re.findall(r'\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}', s)
print("日期时间字符串为:", date_time_string)

# 4. 提取字符串中的诗词名称
poem_name = re.findall(r'《(.+?)》', s)
print("诗词名称为:", poem_name)

# 5. 提取字符串中的姓名
names = re.findall(r'[^\u4e00-\u9fa5]+([\u4e00-\u9fa5]+)[^\u4e00-\u9fa5]+', s)
print("姓名为:", names)
copy

图片描述

五、实验小结

实验问题:

1. 图片描述 问题解决: 正则表达式用于匹配日期时间字符串,其中\d表示数字字符,{4}表示匹配4位数字,[-/]表示匹配连字符或斜杠,{1,2}表示至少匹配1位数字,最多匹配2位数字。后面的空格和冒号用于匹配日期时间之间的空格和冒号。

学后理解:

正则表达式

正则表达式是一种强大的文本处理工具,它可以用来匹配、查找和替换字符串。通过使用一定的语法规则和通配符,正则表达式能够提供高效、灵活的文本处理功能。

在程序设计中,正则表达式被广泛应用于字符串处理、数据验证、搜索引擎等方面。学习正则表达式需要掌握一定的语法知识和常用的表达式模式,例如字符集合、限定符、元字符等。同时,熟练掌握正则表达式还需要多做练习和实践,通过不断调试和优化表达式,提高其效率和准确性。

最新评论

本次实验解题逻辑清晰,内容丰富,格式整洁。

2023-06-13 17:59:46
回复