python入门(第5节实践课---正则表达式和函数的使用)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/jjsjsjjdj/article/details/102537715

第一题

统计有多少个不同的座机电话号码多少不同的手机号码, 多少个不同的电子邮件?然后写入一个文件数字为座机号码数里 手机号码数里电子邮件数量+学号的立方做为结果

import numpy as np
import re
s=open("G:/临时文件/complex.txt","r").read()  #读文件:open("路径","r").read() #写文件:open("路径","w").write()

pat="\d{4}-\d{7}"
pat1="\d{3}-\d{8}"
x=set(re.findall(pat,s)).union(set(re.findall(pat1,s)))  #union集合合并

pat2="\d{11}"   #十一位数的字符串 {}内表示符号的个数
y=set(re.findall(pat2,s))  #set去重


pat3="\w+@+\w+\.+\w"  #\w表示数字、字母、下划线等常规字符
#pat4='[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+'
z=set(re.findall(pat3,s))

a=len(x)
b=len(y)
c=len(z)
p=1750300142
d=a*b*c+p**3

print("座机电话号码数目为",a)
print("手机号数目为",b)
print("邮箱数目为",c)
print("结果为",d)

第二题

用你学号的3位尾数作为访问http:// 125.220. 66. 143/学号三位. html例如你是10000031, 则访问http://125. 220. 66. 143/31. html 0被 动略过.你会发现一个数字,和一个链接。点击这个链接,又会发现一个链接。如此这样n次后,你会发现一个网页没有链接,并且出现Thus_ is the end的字样。求这些不同页面出现数的和

注意:本题采用本地打开html文件的方式

from bs4 import BeautifulSoup
import re
with open('E:/findsum/142.html', 'r')as wb_data:  #用jupytor Notebook打开本地网页文件
    Soup = BeautifulSoup(wb_data, 'html')            #解析为网页格式
    t=Soup.decode("GBK")    #解析对应的字符
    #print(t)
    pat="\d+"    
    number=re.findall(pat,t)[0]   #读取下一个地址的网页数字           
    s=0
    while 1:       #循环直到不存在跳转页面为止
        s+=eval(number)    #(正则表达式找到的都是字符串,所以要强制转化为数字)
        str1="E:/findsum/"+number+".html"    #重新定义页面,循环操作
        with open(str1, 'r')as wb_data:      
            Soup = BeautifulSoup(wb_data, 'html')                      
            t=Soup.decode("GBK")    
            pat="\d+"    
            number=re.findall(pat,t)[0]
            if number=="0000":        #最后0000页面表示结束,结束后跳出,防止报错
                break
print("求和的结果为")
print(s)

第三题

编写一个函数,接受两个正整数作为参数,返回一个列表,第一个元素为两数的最大公约数,第二个元素为最小公倍数

#求公因数
def fun1(a,b):
    gongyinshu=0
    if a>b:            #始终使a最小值
        a,b=b,a
    for i in range(1,a+1):   #从0到a找最最大公因数
        if(a%i==0 and b%i==0):  
            gongyinshu=i
    return gongyinshu

#求公倍数
def fun2(a,b):
    gongbeishu=0
    if a>b:        #保证b是最大值
        a,b=b,a
    i=b           #从b开始找最小公倍数
    while i:
        if(i%a==0 and i%b==0):
            gongbeishu=i
            break
        i=i+1
    return gongbeishu

#将最大公因数和最小公倍数放入数组           
def fun(a,b,list1):
    list1.append(fun1(a,b))    
    list1.append(fun2(a,b))
    return list1


list1=[]
x=input("请输入两个正整数")
y=x.split()
a=int(y[0])
b=int(y[1])
list1=fun(a,b,list1)
print(list1)

第四题

从文件读取数据,文件内容为38, 399, 229,2, 23, 22, 3434, 344,可以自己设计这个文件,用逗号为分隔符。
编写个函数,返回值为一个元祖,包括了文件中所有数据和所有数据的积,所有数据的平均值和方差这四个数据

#定义一个函数求所有元素之积
def fun(list2):
    s=1
    for i in  list2:
        s*=i 
    return s

x=open("G:/临时文件/text1.txt","r").read()#读取文件
list0=[]
list1=x.split(",")  #去除逗号
list2=list(map(int,list1)) #解包列表(将列表中的字符串元素全部变成int型元素)
print("列表为:",list2)
import numpy as np
print("所有数据和为",np.sum(list2))
print("所有数据的积为",fun(list2))
print("所有数据的平均值为",np.mean(list2))
print("方差为",np.var(list2))
list0.append(np.sum(list2))
list0.append(fun(list2))
list0.append(np.mean(list2))
list0.append(np.var(list2))
print("所求的元组为",tuple(list0))#最后转换元组

第五题

编写一个函数,返回当前的时间字符串例如15:21:05

def o(x):    
    if len(x)==1:    #如果只有一位数,前面要添0
        return "0"+x  
    else:
        return x

def timeshow():
    import datetime
    x=datetime.datetime.today().timetuple()  #转换为时间元组形式timetuple()
    str1=o(str(x[3]))+";"+o(str(x[4]))+":"+o(str(x[5]))
    return str1

print("当前时间为:",timeshow())

猜你喜欢

转载自blog.csdn.net/jjsjsjjdj/article/details/102537715
今日推荐