python练习题(六)正则表达式

1、提示用户输入自己的名字、年龄、身高,并将该用户信息以JSON格式保存在文件中。再写一个程序读取刚刚保存的JSON文件,恢复用户输入的信息。

import json
name = input('请输入您的名字: ')
while True:
    try:    #采用异常处理机制,保证输入的格式正确
        age = int(input('请输入您的年龄: '))
        break
    except:
        print('年龄需要您输入整数')
while True:
    try:
        height = float(input('请输入您的身高: '))
        break
    except:
        print('身高需要您输入浮点数')
with open('my.txt', 'w+') as f:    #打开my.txt文件,如果不存在,就建立
    json.dump({'name': name, 'age': age, 'height': height}, f)    #转换为json格式,保存在文件中

with open('my.txt', 'r') as f:      #打开my.txt文件
    my_info = json.load(f)         #从json格式转化成python格式
    print(my_info['name'])         #打印出信息
    print(my_info['age'])
    print(my_info['height'])

2、给定一个字符串,该字符串只包含数字0~9、英文逗号,英文点号,请使用英文逗号、英文点号将它们分割成多个子串。

import re, sys
while True:
    string = input('输入字符串: ')
    if string == 'exit':
        sys.exit(0)
    if not re.fullmatch('[0-9,\.]+', string):
        raise ValueError("您的输入只能包含0-9数字、英文逗号、英文点号")
    rt_list = re.findall('[0-9]+', string)
    print(rt_list)

3、定义一个正则表达式,用于验证国内的所有手机号码。

import re, sys

while True:
    string = input('请输入手机号: ')
    if string == 'exit':
        sys.exit(0)
    if re.fullmatch('^(1[358][0-9]|14[579]|16[6]|17[0135678]|19[89])\d{8}$', string):
        print('是手机号码')
    else:
        print('不是手机号码')

4、提示用户输入一个字符串,程序使用正则表达式获取该字符串中第一次重复出现的英文字母(包括大小写)。

import re, sys

while True:
    string = input('请输入字符串: ')
    if string == 'exit':
        sys.exit(0)
    m = re.findall(r'([a-zA-Z])[\w ]*?\1', string)
    if m:
        print(m[0])

5、提示用户输入一个字符串和一个子串,打印出该子串在字符串中出现的start和end位置:如果没有出现,则打印(-1, -1)。

import re
string, sub = input("请输入第一个字符串: "), input('请输入子串: ')
matches = list(re.finditer(r'(?={})'.format(sub), string))
if matches:
    print('\n'.join(str((match.start(),
        match.start() + len(sub) - 1)) for match in matches))
else:
    print('(-1, -1)')

6、提示用户输入两行,第一行是所有学习python的学员编号(以逗号隔开),第二行是所有学习Java的学员编号(以逗号隔开),计算所有只学python不学java的学员的数量。

import re

python_set = set(re.findall('[^,\.\s]+', input('学习Python的学员: ')))
java_set = set(re.findall('[^,\.\s]+', input('学习Java的学员: ')))
print(python_set)
print(java_set)
diff = python_set - java_set
print('只学Python不学Java的学员:', diff)
print('只学Python不学Java的学员有%d人' % len(diff))

7、提示用户输入两行,第一行是所有学习python的学员编号(以逗号隔开),第二行是所有学习Java的学员编号(以逗号隔开),计算所有既学python又学java的学员的数量。

import re

python_set = set(re.findall('[^,\.\s]+', input('学习Python的学员: ')))
java_set = set(re.findall('[^,\.\s]+', input('学习Java的学员: ')))
print(python_set)
print(java_set)
inter = python_set & java_set
print('既学Python又学Java的学员:', inter)
print('既学Python又学Java的学员有%d人' % len(inter))

8、计算用户输入的两个带时区的时间戳字符串之间相差的秒数。

from datetime import datetime as dt

fmt = '%a %d %b %Y %H:%M:%S %z'
for i in range(int(input('请输入要比较几组:'))):
    print(int(abs((dt.strptime(input('第一个时间:'), fmt) - 
        dt.strptime(input('第二个时间:'), fmt)).total_seconds())))

例如:
在这里插入图片描述
9、提示用户输入一个字符串,程序要输出该字符串中出现次数最多的3个字符,以及对应的出现次数。

from collections import Counter

string = input('请输入一个字符串: ')
c = Counter(string)
[print(t[0]) for t in c.most_common(3)]

10、定义一个fibonacci(n)函数,该函数返回包含n个元素的裴波那契数列的列表。再使用lambda表达式定义一个平方函数,程序最终输出裴波那契数列的前n个元素的平方值。

def fibonacci(n):
    rvt_list = [1, 1]
    # 生成fibonacci数列
    [rvt_list.append(rvt_list[-1] + rvt_list[-2]) for i in range(2, n)]
    return rvt_list
print(fibonacci(10))
# 计算fibonacci数列的元素的平方
x = map(lambda x: x*x , fibonacci(10))
print([e for e in x])
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值