python练习题(3)--字符串及正则表达式的应用

1.输入一行字符,统计字符串中包含数字的个数

str = input("请输入一串字符:")
a = {}
for i in str:
    a[i] = str.count(i)
print(a)

2.已知字符串:"this is a test of python".  按要求执行以下操作:

(1)统计该字符串中字母s出现的次数

(2)取出子字符串"test"

(3)将字符串中每个单词的第一个字母变成大写, 输出到显示器。

(4)用两种方式实现该字符串的倒叙输出

str = "this is a test of python"

print(str.count("s"))  # (1)

print(str.split()[3])  # (2)

print(str.title())  # (3)

s1 = str.split(" ")  # (4)  第一种方法
for i in s1[::-1]:
    print(i, "", end="")

print(" ".join(str.split(" ")[::-1]))  #第二种方法

3.给定一个字符串来代表一个学生的出勤记录 ,这个记录仅包含以下三个字符:

A : Absent ,缺勤       ‘L:Late,迟到      ‘P : Present .到场

如果一个学生的出勤记录中不超过一个A(缺勤)并且不超过两个连续的L(迟到)那么这个学生会被奖赏。 你需要根据这个学生的出勤记录判断他是否会被奖赏。

示例1:     输入: "PPALLP"输出: True

示例2:     输入: "PPALLL"输出:False

A = "缺勤"
L = "迟到"
P = "到场"
a = input("请输入学生的出勤记录:")
if a.count("A") <= 1 and a.count("LLL") == 0:
    print("True")
else:
    print("False")

4.有一身份证号,判断此为男还是女,(身份证为18位)

a = input("请输入身份证号:")
b = int(a[16:17])
if b % 2 == 0:
    print("男")
else:
    print("女")

5.如下字符串,01#张三#20-02#李四#30-03#王五#40……,解析每个人分数多少。样式如下:
01 张三 20
02 李四 30
03 王五 40  ,并且计算总分。

a = "01#张三#20-02#李四#30-03#王五#40"
list1 = a.split("-")
list2 = [item.split("#") for item in list1]
print(list2)
sum = 0
for item in list2:
    sum += int(item[2])
print(sum)

6.检测某一个标识符是否是python的合法标识符(请分别用字符串函数和正则表达式两种方法完成)

# 方法一
s = input("请输入字符串:")
if s[0].isalpha() or s[0] == "_":
    for j in range(1, len(s)):
        if s[j].isalnum() == False and s[j] != "_":
            print("标识符非法")
            break
    else:
        print("标识符合法")
else:
    print("标识符非法")
# 方法二
while True:
    l = input('请输入字符串:')
    if l == 'exit':
        break
    if l[0].isalpha() or l[0] == '_':
        for i in l[1:]:
            if not (i.isalnum() or i == "_"):
                print('标识符不合法')
                break
        else:
            print('标识符合法')
    else:
        print('标识符不合法')

7.随机生成验证码:

        很多网站的注册登录业务都加入了验证码技术,以区分用户是人还是计算机,有效地防止刷票、论坛灌水、恶意注册等行为。目前验证码的种类层出不穷,其生成方式也越来越复杂,常见的验证码是由大写字母、小写字母、数字组成的六位验证码。

import random

a = ""
for i in range(6):
    b = random.randint(1, 3)  # b=1,大写字母,b=2,小写字母,b=3,数字
    if b == 1:  # A(65)-Z(90)
        c = random.randint(65, 90)
        a = a + chr(c)
    elif b == 2:  # a(97)-z(122)
        c = random.randint(97, 122)
        a = a + chr(c)
    elif b == 3:
        c = random.randint(0, 9)
        a = a + str(c)
print(a)

8.编程匹配简单的以www.开头以.com结尾的web域名,例如www.baidu.com

import re

patt = 'www.+\.com'
m = re.match(patt, 'www.baidu.com')
if m is not None: m.group()
print(m)

9.判断某一个字符串是否符合如下规则:用一个空格分隔的任意一对单词,比如名和姓,若符合,输出字符串,否则输出“匹配失败”。

import re

a = input("请输入字符串:")
for i in a:
    if re.match(r'\s', i):
        print("匹配成功")
        break
else:
    print("匹配失败")

10.匹配一个点(.)和一个空格分开的一字母和一个单词,如英国人名中的姓和名。

import re

s = "xian ming.xiao wang"
re.findall('\w+', s)
print(s)

11.利用正则表达式匹配163邮箱地址,以检测输入的邮箱是否合法.

import re

a = input("请输入邮箱地址:")
while True:
    b = re.match("^163\w", a)
    if b:
        print("邮箱地址合法")
        break
    else:
        print("邮箱地址不合法")
        break
else:
    print("邮箱地址不合法")

12.假设有一段英文,其中有单独的字母“I”误写为“i”,请编写程序进行纠正。例如,这一段英文是: "i am a teacher,i am man, and i am 38 years old.I am not a businessman.",请编写程序,将文中的i改为I,要求用户两种方法完成。

# 方法一
import re

a = "i am a teacher,i am man, and i am 38 years old.I am not a businessman."

b = re.compile(r"(?:[^\w]|\b)i(?:[^\w])")
while True:
    c = b.search(a)
    if c:
        if c.start(0) != 0:
            a = a[:c.start(0) + 1] + "I" + a[c.end(0) - 1:]
        else:
            a = a[:c.start(0)] + "I" + a[c.end(0) - 1:]
    else:
        break
print(a)
# 方法二
a = "i am a teacher,i am man, and i am 38 years old.I am not a businessman."
b = a.replace("i", "I")
print(b)

13.有一段英文文本,其中有单词连续重复了2次,编写程序检查重复的单词并只保留一个。例如文本内容为“This is is a desk.”,程序输出为“This is a desk.”

a = "This is is a desk"
b = re.compile(r"\b(\w+)(\s+\1){1,}\b")
c = b.search(a)
a = b.sub(c.group(1), a)
print(a)

14.判断手机号所属运营商

说到手机号大家并不陌生,一个手机号码由11位数字组成,前3位表示网络识别号,第4~7位表示地区编号,第8~11位表示用户编号。因此,我们可以通过手机号前3位的网络识别号辨别手机号所属运营商。在我国手机号运营商有移动、联通、电信,各大运营商的网络识别号如表1所示。

1 运营商和网络识别号

运营商

号码段

移动

134135136137138139147148150151152157158 159165178182183184187188198

联通

130131132140145146155156166185186175176

电信

133149153180181189177173174191199

本实例要求编写程序,实现判断输入的手机号码是否合法以及判断其所属的运营商的功能。

import re

tel = input("请输入电话号码:")
if re.match(r"^1\d{10}", tel):
    if re.match(r"^13[4-9]\d{8}", tel) or \
            re.match(r"^14[78]\d{8}", tel) or \
            re.match(r"^15[012789]\d{8}", tel) or \
            re.match(r"^165\d{8}", tel) or \
            re.match(r"^178\d{8}", tel) or \
            re.match(r"^18[23478]\d{8}", tel) or \
            re.match(r"^198\d{8}", tel):
        print("中国移动")
    elif re.match(r"^13[0-2]\d{8}", tel) or \
            re.match(r"^14[056]\d{8}", tel) or \
            re.match(r"^15[56]\d{8}", tel) or \
            re.match(r"^166\d{8}", tel) or \
            re.match(r"^17[56]\d{8}", tel) or \
            re.match(r"^18[56]\d{8}", tel):
        print(" 中国联通")
else:
    print("中国电信 ")

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖暖的味道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值