疯狂Python讲义第十章练习

守給你的承諾、 提交于 2020-02-01 20:16:12
# -*- coding: utf-8 -*-
'''
Created on 2020年1月31日

@author: guzl86
1. 提示用户输入自己的名字、年龄、身高,并将该用户信息以 JSON 格式保存在文件中。再
写一个程序读取刚刚保存的 JSON 文件,恢复用户输入的信息 。
'''
import json
if __name__ == '__main__':
    info = {}
    info['name'] = input('请输入您的姓名:')
    info['age'] = input('请输入您的年龄:')
    info['height'] = input('请输入您的身高:')
    fp = open("10-1.dat",'w')
    json.dump(info, fp)
    fp.close()
    
    info1 = {}
    fp1 = open("10-1.dat",'r')
    info1 = json.load(fp1)
    fp1.close()
    print(info1)
    pass
# -*- coding: utf-8 -*-
'''
Created on 2020年1月31日

@author: guzl86
2. 给定一个字符串,该宇符串只包含数字 O~9 、英文逗号、英文点号,请使用英文逗号、英
文点号将它们分割成多个子串 。
知识点:
1.re.fullmatch(pattern, string, flags=0):
    该函数要求整个字符串能匹配pattern,如果匹配则返回包含匹配信息的
  _sre.SRE_Match对象;否则返回None
2.re.split(pattern, string, maxsplit=0, flags=0):
    使用pattern对string进行分割,该函数返回分割得到的多个子串组成的列表
    其中maxsplit参数控制最多分割几次。
'''
import re
if __name__ == '__main__':
    my_str ='2349348,23840931,.23493.4239840,394820.444'
    if re.fullmatch(r'[0-9,\.]+', my_str) == None:
        raise ValueError("输入参数不正确")
    print(re.split(r'[,.]', str))
    pass
# -*- coding: utf-8 -*-
'''
Created on 2020年1月31日

@author: guzl86
3. 定义一个正 则 表达式,用于验证国内的所有手机号码 。
知识点:
1.^:匹配一行的开头
2.$:匹配一行的结尾
3.[]:用于确定中括号表达式的开始位置和结束位置
4.|:指定在两项之间人选一项。
5.\d:匹配0~9的所有数字
6.\D:匹配非数字
7.{}:用于标记前面子表达式出现的频度
'''
import re
if __name__ == '__main__':
    pnum = '13158661713'
    print(re.fullmatch(r'^(1[358][0-9]|14[579]|16[6]|17[0135678]|19[89])\d{8}$', pnum))
    print(re.fullmatch(r'^(1[358][0-9]|14[579]|16[6]|17[0135678]|19[89])[0-9]{8}$', pnum))
    pass
# -*- coding: utf-8 -*-
'''
Created on 2020年1月31日

@author: guzl86
4. 提示用户输入 一个字符串,程序使用正则表达式获取该字符串中第一次重复出现的英文字
母 (包括大小写〉。
'''
import re
if __name__ == '__main__':
    estr = input("请输入一串英文字母:")
    print(re.findall(r'(\w)\1', estr))
    pass
# -*- coding: utf-8 -*-
'''
Created on 2020年2月1日

@author: guzl86
5 . 提示用户输入一个字符串和一个子串,打印出该子串在字符串中出现的 start和end 位置;
如果没有出现,则打印(-1,-1) 。例如用户输入 :
aaadaa
aa
程序输出:
(0, 1)
(1, 2)
(4,5)
知识点:
1.re.finditer(pattern,string,flag=0:扫描整个字符串,并返回字符串
    中所有匹配pattern的子串组成的迭代器,迭代器元素是_sre_SRE_Match对象。
2.(?=exp):也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。
'''
import re
if __name__ == '__main__':
    my_srt = input('请输入一个字符串:')
    my_srt = 'aaadaa'
    my_sub_str = input('请输入一个子串:')
    my_sub_str = 'aa'
    nodes =  list(re.finditer(r'(?={})'.format(my_sub_str), my_srt))
    if nodes:
        for node in nodes:
            print("("+str(node.start())+','+str(node.start()+len(my_sub_str)-1)+')')
    else:
        print("(-1,-1)")
    pass
# -*- coding: utf-8 -*-
'''
Created on 2020年2月1日

@author: guzl86
6. 提示用户输入两行,第 一行是所有学习 Python 的学员编号(以逗号隔开),第二行是所有
学习 Java 的学员编号(以逗号隔开〕,计算所有只学 Python 不学 Java 的学员的数量。
知识点:
1. a.issubset(b):a是否为b的子集,类似 a<=b
2. a.issuperset(b):a是否为b的父集,类似a>=b
3. a.difference(b):将b中的集合从a中剔除,类似a-b
4. a.intersection(b):求a和b的交集
5. a.union(b):求a和b的并集
'''
if __name__ == '__main__':
    p_student = input("请输入python学员的编号,并用逗号隔开:")
    p_set = set(p_student.split(','))
    j_student = input("请输入Java学员的编号,并用逗号隔开:")
    j_set = set(j_student.split(','))
    #两个集合做减法,就可以得到只学python,不学java的学院,并求出其数量
    print(len(p_set-j_set))
    pass
# -*- coding: utf-8 -*-
'''
Created on 2020年2月1日

@author: guzl86
7. 提示用户输入两行,第 一 行是所有学习 Python 的学员编号(以逗号隔开),第 二行是所有
学习 Java 的学员编号(以逗号隔开),计算既学 Python 又学 Java 的学员的数量。
知识点:
1. a.issubset(b):a是否为b的子集,类似 a<=b
2. a.issuperset(b):a是否为b的父集,类似a>=b
3. a.difference(b):将b中的集合从a中剔除,类似a-b
4. a.intersection(b):求a和b的交集
5. a.union(b):求a和b的并集
'''
if __name__ == '__main__':
    p_student = input("请输入python学员的编号,并用逗号隔开:")
    p_set = set(p_student.split(','))
    j_student = input("请输入Java学员的编号,并用逗号隔开:")
    j_set = set(j_student.split(','))
    #求两个集合的交集
    print(p_set.intersection(j_set))
    pass
# -*- coding: utf-8 -*-
'''
Created on 2020年2月1日

@author: guzl86
8. 计算用户输入的两个带时区的时间戳字符串之间相差的秒数。例如用户输入:
Sun 10 May 2015 13:54:36 -0700
Sun 10 May 2015 13:54:36 -0000
程序应该输出:
25200
'''
import time
import datetime
if __name__ == '__main__':
    time_str1 = 'Sun 10 May 2015 13:54:36 -0700'
    time_str2 = 'Sun 10 May 2015 13:54:36 -0000'
    fmt = '%a %d %b %Y %H:%M:%S %z'
    print(
          int(
              abs(
                  time.mktime(time.strptime(time_str1,fmt))
                  -time.mktime(time.strptime(time_str2,fmt))
                  )
              )
          )
    pass
# -*- coding: utf-8 -*-
'''
Created on 2020年2月1日

@author: guzl86
9. 提示用户输入一个字符串,程序要输出该字符串中出现次数最多的 3 个字符,以及对应的
出现次数。
'''
from collections import Counter
if __name__ == '__main__':
    my_str = input("请输入一个字符串:")
    c = Counter(my_str)
    print(c.most_common(3))
    pass
# -*- coding: utf-8 -*-
'''
Created on 2020年2月1日

@author: guzl86
10. 定义一个 fibonacci(n)函数,该函数返回包含 n 个元素 的 斐波那契数列 的列表。再使用 lambda
表达式定义一个平方函数,程序最终输出斐波那契数列的前 n个元素的平方值。
'''
def fibonacci(n):
    ret = [1,1]
    if(n<2):
        return ret[0:n]
    else:
        [ret.append(ret[i-1] + ret[i-2]) for i in range(2, n)]
        return list(map(lambda x:x*x,ret))
if __name__ == '__main__':
    print(fibonacci(10))
    pass

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!