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

news2024/12/26 11:29:49

一、实验目的:

  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 等)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1908651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java面试八股之MySQL支持哪些数据类型

MySQL支持哪些数据类型 MySQL支持多种数据类型,这些类型可以大致分为三大类:数值类型、日期/时间类型和字符串类型。下面是一些常见的数据类型及其用途: 数值类型 整数类型: TINYINT:通常占用1字节。 SMALLINT&am…

11 个例子讲清spark提交命令参数

目录 提交命名参数详情为什么有这么多参数如何开始学习一些具体的例子1. 基本的Spark应用提交2. 提交带有依赖的Python脚本3. 运行Spark SQL作业4. 提交Spark Streaming作业5. 使用外部包运行Spark作业6. 动态资源分配7. 使用多个配置文件8. GPU 支持9. 自定义日志配置10. 使用…

【nginx】nginx的配置文件到底是什么结构,到底怎么写?

背景:我window中下载了一个nginx,想要通过nginx来对本地的两个项目做动态代理,但是没想到下载启动都没遇见什么问题,但是在配置nginx.conf配置文件时,遇见了很多问题,查了好久没查到什么特别有用的内容&…

微信小程序开发跳转京东,淘宝小程序

没有淘宝小程序,所以只能提示他复制链接网页打开 跳转京东小程序 获取京东小程序 京东小程序appId:wx91d27dbf599dff74 或者点开京东小程序,查看详情即可获取到京东的appid 店铺页面路径 店铺首页:pages/shop/index/index?…

无人机在交通管理方面的应用与潜力

随着智能化和数字化技术的发展,无人机已经成为智慧交通管理体系中的重要一环。无人机能够搭载各种专业设备,如超清摄像头、红外热成像摄像头、目标跟踪器等,从而完成多任务的数据采集和快速机动的任务执行。这些数据通过无线传输实时回传&…

深圳航空x-s3-s4e逆向和顶象滑块动态替换问题

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言(lianxi a…

Redis基础教程(十六):Redis Stream

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

windows10下的游戏怎么卸载?

在Windows 10中卸载游戏可以通过多种途径进行,下面是一些常见的方法: 方法一:通过“设置”应用卸载 1. 点击左下角的“开始”按钮,打开“开始”菜单。 2. 选择“设置”图标(齿轮形状)。 3. 在“设置”窗…

互联网接入技术的简单介绍

引言 要连接到互联网,用户必须先连接到某个ISP(互联网服务提供商)。接入技术解决的就是用户如何连接到本地ISP的问题,通常称之为“最后一公里”。本文将详细介绍几种主要的互联网接入技术,帮助初学者了解不同的接入方…

Linux三剑客(grep、awk和sed)操作及与管道结合使用

1. 总览 grep、sed和awk被称为Linux三剑客,是因为它们在文本处理和数据操作方面极其强大且常用。 Linux三剑客在文件处理中的作用: grep(数据查找定位):文本搜索工具,在文件中搜索符合正则表达式的文本内容…

spark任务,使用 repartition 对数据进行了重新分区,但任务输入数据大小仍存在不均衡

目录 目录 确认 Spark 任务重新分区后的数据不均衡 1. 检查分区大小 2. 使用 DataFrame API 检查分区 3. 使用 Spark UI 查看分区情况 4. 使用日志记录分区信息 可能原因 1. 数据分布不均衡 2. 分区策略 3. 数据预处理 解决方案 1. 检查数据分布 2. 使用 coalesce…

Elasticsearch:Node.js ECS 日志记录 - Pino

在我的上一篇文章 “Beats:使用 Filebeat 从 Python 应用程序中提取日志” 里,我详述了如何使用 Python 来生成日志,并使用 Filebeat 来收集日志到 Elasticsearch 中。在今天的文章中,我来详细描述如何使用 Node.js 来生成 ECS 相…

ubuntu18修改文件打开数

Ubuntu18永久修改 最大文件打开数和最大线程数 1、查看操作系统: cat /etc/os-release2、查看当前用户设置: ulimit -a 或者: ulimit -nopen files 是当前最大文件打开数量 max user processes是当前最大线程数量 3、永久修改配置&#x…

音视频入门基础:H.264专题(10)——FFmpeg源码中,存放SPS属性的结构体和解码SPS的函数分析

一、引言 FFmpeg源码对AnnexB包装的H.264码流解码过程中,通过ff_h2645_extract_rbsp函数拿到该H.264码流中的某个NALU的NALU Header RBSP后(具体可以参考:《FFmpeg源码:ff_h2645_extract_rbsp函数分析》)&#xff0c…

7月5日,自然保护地总体规划智能编制系统,线上宣讲会(腾讯会议:638-228-003)

7月5日(本周五)下午2:30,国家林草局林草调查规划院胡理乐研究员,介绍自然保护地总体规划智能编制系统,欢迎大家线上参加!(腾讯会议号:638-228-003) 系统主要特色&#x…

内存与硬盘(笔记)

文章目录 1. 内存① 笔记② 相关软件 2. 硬盘① 笔记② 相关软件 3. 区别:4. 推荐 1. 内存 ① 笔记 ① 笔记本的内存条和台式机的内存条是不互通的 ② 我们常说的内存其实指的是运行内存(前台后台同时能运行多少APP) ③ 下图来自京东: 解析&#xff1…

ShardingSphereConnection@4691d] will not be managed by Spring

boot整合分库分表后启动执行,提示链接不被spring管理, 应该看自己需要, 解决:

(十一) Docker compose 部署 Mysql 和 其它容器

文章目录 1、前言1.1、部署 MySQL 容器的 3 种类型1.2、M2芯片类型问题 2、具体实现2.1、单独部署 mysql 供宿主机访问2.1.1、文件夹结构2.1.2、docker-compose.yml 内容2.1.3、运行 2.2、单独部署 mysql 容器供其它容器访问(以 apollo 为例)2.2.1、文件…

近红外光谱脑功能成像(fNIRS):2.实验设计、指标计算与多重比较

一、实验设计的策略与方法 近红外光谱成像(INIRS)作为一种非侵入性脑功能成像技术,为研究大脑活动提供了一种高效、生态效度高的方法。然而,为了充分利用INIRS技术并确保实验结果的准确性和可靠性,研究者必须精心设计实…

【密码学】流密码的基本概念

在介绍流密码之前,我们先来弄明白一个基础前置知识点——异或运算。 一、异或运算(XOR) 运算规则:相同为0,不同为1 特点:一个比特进行两次异或运算,可以恢复成原来的比特。 明文:110…