python--实验4 字符串与正则表达式

一、实验目的:

  1. 熟悉字符串切片、运算等操作
  2. 掌握常用字符串操作函数和方法
  3. 掌握正则表达式

二、实验内容:

说明:基础题为必做题,提高题为选做题

1、 (基础题) 编写程序,要求用户输入一个身份证号,根据身份证号,显示输出出生年月日和性别。

程序代码:

def get_birth_date_and_gender(id_number):
    # 验证身份证号码是否为18位
    if len(id_number) != 18:
        return "身份证号码格式错误,请输入18位身份证号码。"
    
    try:
        birth_date = id_number[6:14]  # 身份证中的出生年月日部分
        gender_digit = int(id_number[16])  # 性别部分
        gender = "女" if gender_digit % 2 == 0 else "男"
        
        # 格式化输出
        birth_year = birth_date[:4]
        birth_month = birth_date[4:6]
        birth_day = birth_date[6:]
        formatted_birth_date = f"{birth_year}年{birth_month}月{birth_day}日"
        
        return f"出生日期: {formatted_birth_date}, 性别: {gender}"
    except ValueError:
        return "身份证号码包含非法字符。"

# 请求用户输入身份证号码
input_id_number = input("请输入您的身份证号码: ")
result = get_birth_date_and_gender(input_id_number)
print(result)

运行截图:

2、(基础题)求解字符串中所有数字的和:s = 'fdsd4gfdv2tgty67dcfd101dfds0vdsv3'(提示:isdigit()、isnumeric()、split()方法

程序代码:

def sum_of_digits_in_string(s):
    total_sum = 0
    for char in s:
        # 使用isdigit()检查字符是否为数字,它在字符是0-9时返回True
        if char.isdigit():
            total_sum += int(char)  # 将字符转换为整数并加到总和中
    return total_sum

# 给定的字符串
s = 'fdsd4gfdv2tgty67dcfd101dfds0vdsv3'
result = sum_of_digits_in_string(s)
print(f"字符串中所有数字的和是: {result}")

运行截图:

需要注意的是,isnumeric()方法在Python 3.0之后已经被废弃,因为它与str.isdigit()方法相同,所以在这个例子中我们使用isdigit()方法。此外,split()方法在这个场景中没有直接使用,因为我们不需要分割字符串,只是需要遍历它。如果需要分割字符串并处理每个部分,可以使用split(),但在这个特定的例子中,它不是必需的。

3、(基础题)编写程序,显示字符串“fjakdadaejkiafeqewiwonvm”,

  1. 要求统计字符串的长度;
  2. 去掉重复的字符,显示结果,并再次统计新字符串的长度,显示出来。

程序代码:

def remove_duplicates(s):
    # 使用集合去除重复字符,然后转换回字符串
    return "".join(sorted(set(s), key=s.index))

# 原始字符串
original_string = "fjakdadaejkiafeqewiwonvm"

# 统计原始字符串的长度
original_length = len(original_string)
print(f"原始字符串: {original_string}")
print(f"原始字符串长度: {original_length}")

# 去掉重复字符
new_string = remove_duplicates(original_string)
print(f"去掉重复字符后的字符串: {new_string}")

# 统计新字符串的长度
new_length = len(new_string)
print(f"新字符串长度: {new_length}")

运行截图:

这个程序首先定义了一个函数remove_duplicates,它使用集合(set)来去除字符串中的重复字符。集合是一个无序的不重复元素序列,所以当我们把字符串转换成集合时,所有重复的字符只会保留一个。然后,我们使用sorted()函数和一个自定义的排序键来保持原始字符串中字符的顺序,最后将排序后的集合转换回字符串。

接着,程序统计并打印原始字符串的长度,然后调用remove_duplicates函数处理字符串,并打印处理后的字符串及其长度。

 

4、 (基础题) 隐藏中奖信息中的手机号,例如:str = '中奖号码: 89483457 联系电话:13956485112',显示如下:

程序代码:

def hide_phone_number(phone_str):
    # 找到字符串中的电话号码
    phone_number = ""
    for char in phone_str:
        if char.isdigit():
            phone_number += char
        else:
            break

    # 隐藏电话号码中的部分数字
    if len(phone_number) > 7:  # 确保电话号码长度足够
        hidden_number = phone_number[0] + "xxxxxxxxxx"
    else:
        hidden_number = phone_number  # 如果电话号码长度不足7位,则不隐藏

    return hidden_number

# 示例字符串
str = '中奖号码: 89483457 联系电话:13956485112'
print(f"原始字符串: {str}")

# 隐藏联系电话中的手机号
hidden_phone_str = str.replace("联系电话:" + str.split("联系电话:")[1], "联系电话:1xxxxxxxxxxxx")
print(f"隐藏手机号后的字符串: {hidden_phone_str}")

运行截图:

5、(提高题)编写程序,验证下述电子邮件的有效性。

'nobodyin@gmail.com.cn'

'bill.maria@yahoo.com'

'uncle.sam@mifty.com.org'

'united.china@163.com.it'

'doggy#sample.com'

'y_cat-st@example.com'

程序代码:

import re

def is_valid_email(email):
    # 电子邮件的正则表达式
    pattern = re.compile(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$')
    return pattern.match(email)

# 测试电子邮件列表
emails = [
    'nobodyin@gmail.com.cn',
    'bill.maria@yahoo.com',
    'uncle.sam@mifty.com.org',
    'united.china@163.com.it',
    'doggy#sample.com',
    'y_cat-st@example.com'
]

# 验证每个电子邮件
for email in emails:
    result = "有效" if is_valid_email(email) else "无效"
    print(f"电子邮件 '{email}' 是 {result}")

运行截图:

电子邮件地址通常遵循一定的格式规则,一般形式为 local-part@domain,其中:

  • local-part 可以包含字母、数字、下划线、点、以及某些特殊字符。
  • domain 通常是域名,以点分隔,最后一部分必须是一个有效的顶级域名(如 .com.org 等)。

相关推荐

  1. Python 文件名表达式:深入探索实用技巧

    2024-07-10 09:14:04       15 阅读
  2. Python高级语法表达式

    2024-07-10 09:14:04       47 阅读
  3. Python表达式Json

    2024-07-10 09:14:04       46 阅读
  4. Python表达式

    2024-07-10 09:14:04       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 09:14:04       4 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 09:14:04       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 09:14:04       4 阅读
  4. Python语言-面向对象

    2024-07-10 09:14:04       4 阅读

热门阅读

  1. Html利用Vue动态加载单文件页面【httpVueLoader】

    2024-07-10 09:14:04       11 阅读
  2. linux:命令执行过程【图表】

    2024-07-10 09:14:04       8 阅读
  3. 系统架构设计师——网络设计

    2024-07-10 09:14:04       14 阅读
  4. SSL证书到期自动巡检脚本-推送钉钉告警

    2024-07-10 09:14:04       8 阅读
  5. 如何才能在Linux下编写驱动程序

    2024-07-10 09:14:04       6 阅读
  6. Tomcat打破双亲委派模型的方式

    2024-07-10 09:14:04       12 阅读
  7. C++惯用法: 通过std::decltype来SFINAE掉表达式

    2024-07-10 09:14:04       7 阅读
  8. HTTP 范围Range请求

    2024-07-10 09:14:04       8 阅读
  9. React 开发报错整理

    2024-07-10 09:14:04       14 阅读
  10. 微软 Edge 浏览器全解析

    2024-07-10 09:14:04       7 阅读