Python近期练习小案例

以下代码为本萌新的个人浅见,如有不足之处欢迎评论区批评指正~

目录

练习1:编写一个last函数接受列表并返回列表中最后一个元素的函数,如果列表为空,返回None。

练习2:创建一个名为divisors的函数,该函数接受一个整数,n> 1并返回一个数组,该数组具有从最小到最大的所有整数除数(1和数字本身除外)。如果数字为质数,则返回字符串“… is prime”。

练习3:设计一个程序,计算100的阶乘(100!=100x99x98x97x96x.......x3x2x1)

练习4:设计一个程序,将temp的字符串值转化成一个有结构的字典

练习5:小欧拿一百块钱,一只公鸡5块钱,一只母鸡3块钱,三只小鸡1元钱。买一百只,问公鸡、母鸡、小鸡各多少只,请用列表推导式解决

练习6:有如下值集合[11,22,33,44,55,66,77,88,99,90], 将所有大于66的值保存至字典的第一个key中,将小于66值保存至第二个key的值中。

练习7:使用lambda函数对1~1000进行求和

练习8:请你把下图的抽奖过程用程序实现并且封装成一个的函数。练习9:和电脑玩一个剪刀石头布的游戏:电脑随机出拳,我们可选择出什么。(电脑随机出、用户手动输入且要判断输入是否合法)封装为一个函数

练习10:小明、小红、小刚是同班同学,且坐在同一排,分别坐在第一位、第二位、第三位。由于他们的身高都差不多,所以,老师计划让他们三个轮流坐在第一位。每次换座位的时候,第一位变第三位,后面两位都往前一位

练习11:用循环写一个用户登录系统

练习12:猜数字游戏,系统随机生成一个数字,玩家有5次猜数字机会,每猜一次系统会提示“大了”或“小了”,直到玩家猜对或次数用尽为止练习13:给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割(给定的句子要求反转后仍为句子)

练习14:换行打印“你好,人们叫我'程序员' 这个世界的人都选择无视我 只有你看到了我并和我打招呼 我感到很孤单,很孤单 你愿意和我成为朋友吗?”

练习15:定义一个Person类,使用Person类,创建一个mayun对象后,添加company属性,值是"阿里巴巴";创建一个wangjianlin对象,添加company属性,值是"万达集团"

练习16:企业发放的奖金根据利润(I)的多少来提成(提成发放规则如下图):设计一个程序,输入利润即可算出提成

练习17:您的任务是创建一个给定数字的layers(n)函数,该函数返回n在第几层(图在下面)

练习18:创建一个20行5列数组,其值范围为0~9(须为整数),在其所有的值中随机抽取20个位置进行修改,修改后的值为100

练习19:用Python帮助小a写一份csv格式的房屋调研表格

练习20:获取并输出知乎网页的源代码,最后保存为txt文本

练习21:使用正则表达式从下面内容获取所有jpg结尾的网页图片链接

练习22:写一个程序:score = [23, 54, 65, 1, 0, 34, 67, 22],用for循环的方法从小到大排序并输出

练习23:定义一个汽车类,并在类中定义一个move方法,然后分别创建BMW_X9、AUDI_A9对象,并添加颜色、马力、型号等属性,然后分别打印出属性值、调用move方法(move方法调用后则输出--汽车开始跑了--)

练习24:去重与排序系统由随机生成的n个数字组成的列表

练习25:以2002年12月1日作为小a的生日,设计一个程序,当输入一个日期时判断该日期是否为小a的生日,若不是,则大致判断小a的年龄

练习26:*‘爬取拉勾网的招聘信息(以上海java相关岗位为例),并用csv的格式保存’


练习1:编写一个last函数接受列表并返回列表中最后一个元素的函数,如果列表为空,返回None。

程序分析:本题主要考察定义简单函数,在该情景下,用len()函数判断列表长度即可

代码解析:

练习2:创建一个名为divisors的函数,该函数接受一个整数,n> 1并返回一个数组,该数组具有从最小到最大的所有整数除数(1和数字本身除外)。如果数字为质数,则返回字符串“… is prime”。

程序分析:根据质数的定义,我们可以用for循环遍历比参数x小的每一个数(从2开始,到x-1),只要x 可以整除其中一个数,就把该数字添加进先前创建的列表(x必然不是质数),如果列表为空,说明x是质数。

代码解析:

l = []
def divisors(x):
    for i in range (2,x):
        if x % i == 0:
            l.append(i)
        else:
            continue
    if len(l) == 0:
        print('is prime')
    else:
        print(l)
divisors(5)
divisors(24)

练习3:设计一个程序,计算100的阶乘(100!=100x99x98x97x96x.......x3x2x1)

程序分析:用for循环遍历1~100的每一个数算乘积即可

代码解析:

s = 1
for i in range(1,101):
    s = s*i
print(s)

练习4:设计一个程序,将temp的字符串值转化成一个有结构的字典

题目:

程序分析:要生成字典首先要找出每一个item。这里用到一个split()函数分割出每一个等式,再分离出key 和 value,最后生成字典即可

代码解析:

练习5:小欧拿一百块钱,一只公鸡5块钱,一只母鸡3块钱,三只小鸡1元钱。买一百只,问公鸡、母鸡、小鸡各多少只,请用列表推导式解决

程序分析:对列表推导式的简单考察

代码解析:

list = [f'公鸡{a}只,母鸡{b}只,小鸡{3*c}只' for a in range(50) for b in range(50) for c in range(50) if a*5+b*3+c == 100 and a+b+3*c == 100]
print(list)

练习6:有如下值集合[11,22,33,44,55,66,77,88,99,90], 将所有大于66的值保存至字典的第一个key中,将小于66值保存至第二个key的值中。

程序分析:列表的遍历和简单的if条件判断以及字典的相关知识

代码解析:

l = [11,22,33,44,55,66,77,88,99,90]
p = []
o = []
k = {}
for i in l:
    if i <= 66:
        p.append(i)
    else:
        o.append(i)
k = {'k1':p,'k2':o}
print(k)

练习7:使用lambda函数对1~1000进行求和

代码解析:


练习8:请你把下图的抽奖过程用程序实现并且封装成一个函数

题目:

程序分析:这里要用time 模块的sleep函数,最后的小动物网上可以找到

代码解析:

def choujiang():
    import time
    import random
    l = ['很遗憾,你没有中奖','差一点就中奖啦','恭喜章鱼哥中奖!']
    print('开奖倒计时三秒')
    time.sleep(1)
    print('开奖倒计时二秒')
    time.sleep(1)
    print('开奖倒计时一秒')
    time.sleep(1)
    l = random.choice(l)
    print(l)
    if l == '恭喜章鱼哥中奖!':
        print('''/\____0<
| o o  |____~
|__--__--__|''')
choujiang()

练习9:和电脑玩一个剪刀石头布的游戏:电脑随机出拳,我们可选择出什么。(电脑随机出、用户手动输入且要判断输入是否合法)封装为一个函数

程序分析:把石头,剪刀,布放进一个列表,利用random.choice随机选一个,与玩家输入的匹配,判断输赢

代码解析:

def youxi():
    import random
    d = ['石头','剪刀','布']
    d = random.choice(d)
    l = input('请出拳:(石头、剪刀、布)')
    if d == '石头' and l == '剪刀' or d == '剪刀' and l == '布' or d == '布' and l == '石头':
        print('你输了!')
    elif d == '石头' and l == '布' or d == '剪刀' and l == '石头' or d == '布' and l == '剪刀':
        print('你赢了!')
    elif d == '石头' and l == '石头' or d == '剪刀' and l == '剪刀' or d == '布' and l == '布':
        print('平局')
    else:
        print('参数错误,无法识别')
        return
    print(f'玩家出:{l}')
    print(f'电脑出:{d}')


练习10:小明、小红、小刚是同班同学,且坐在同一排,分别坐在第一位、第二位、第三位。
由于他们的身高都差不多,所以,老师计划让他们三个轮流坐在第一位。每次换座位的时候,第一位变第三位,后面两位都往前一位

代码解析:考察列表的增删改查

代码解析:

lass_row = ['小明', '小红', '小刚']
def change():
    print('换座位')
    global class_row
    class_row.append(class_row[0])
    class_row.remove(class_row[0])
    print(class_row)

练习11:用循环写一个用户登录系统

程序分析:无非是if,while,for循环的综合考察,一定一定要注意逻辑关系,在缩进这里非常容易出错

代码解析:

users = ['root','westos']
passwd = ['123','456']
shu_ju = dict(zip(users,passwd))
n = 0
q = 0
def deng_lu():
    global n
    global q
    while n < 3:
        l = input('欢迎,请输入用户名:')
        for i in shu_ju.keys():
            if l == i:
                print('hello,',l)
                n = 3
                k = input('请输入密码')
                g = (l, k)
                while q < 3:
                    for o in shu_ju.items():
                        if o == g:
                            print('欢迎登陆')
                            q = 4
                        elif q == 2:
                            return  print('非法登陆')
                        else:
                            q += 1
                            d = input('密码错误,请重新输入:')
            else:
                n += 1
                l = input('用户不存在,请重新输入')
                if n==2:
                    return


练习12:猜数字游戏,系统随机生成一个数字,玩家有5次猜数字机会,每猜一次系统会提示“大了”或“小了”,直到玩家猜对或次数用尽为止

程序分析:本质上还是while,if函数,再加上random模块的应用。

代码解析:

def shuji():
    import random
    list = []
    for i in range(101):
        list.append(i)
    list_1 = random.choice(list)
    n = 0
    user = int(input('请输入数字'))
    while n < 5:
        if user==list_1:
            print('恭喜')
        elif user < list_1:
            print('too small')
            user = int(input('请输入数字'))
            n += 1
        else:
            print('too big')
            user = int(input('请输入数字'))
            n += 1
    print('游戏结束')


练习13:给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割(给定的句子要求反转后仍为句子)

程序分析:先分割输入的句子的每个单词(生成列表),再用reverse()反转。注:join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。

代码解析:

juzi = (input())
l = juzi.split( )
l.reverse()
print(" ".join(l))


练习14:换行打印“你好,人们叫我'程序员' 这个世界的人都选择无视我 只有你看到了我并和我打招呼 我感到很孤单,很孤单 你愿意和我成为朋友吗?

程序分析:推荐用r''' 字符串 '''完成转义,换行。

代码解析:

print(r'''你好,人们叫我'程序员'
这个世界的人都选择无视我
只有你看到了我并和我打招呼
我感到很孤单
很孤单你愿意和我成为朋友吗?''')


练习15:定义一个Person类,使用Person类,创建一个mayun对象后,添加company属性,值是"阿里巴巴";创建一个wangjianlin对象,添加company属性,值是"万达集团"

程序分析:类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。
对象:它是类的实例化。
方法:指类中定义的函数。

代码解析:

class Person():
    def __init__(self,name,company):
        self.name = name
        self.company = company
renwu_1 = Person('mayun','阿里巴巴')
renwu_2 = Person('wangjianlin','万达集团')


练习16:企业发放的奖金根据利润(I)的多少来提成(提成发放规则如下图):设计一个程序,输入利润即可算出提成

题目:

程序分析:注意提成是叠加的哦,Python的科学计数法用e来表示(10的五次方相当于e5)。

代码解析:

def jiang():
    i = int(input('今年的利润是:'))
    if i <= 1e5 :
        a = i/10
        print(f'奖金可提{a}')
    elif 1e5 < i and i <= 2e5:
        b = (1e5/10)+((i-1e5)/100)*7.5
        print(f'奖金可提{b}')
    elif 2e5 < i and i <= 4e5:
        c = (1e5/10)+(1e5/100)*7.5+(i-2e5)*0.05
        print(f'奖金可提{c}')
    elif 4e5 < i and i <= 6e5:
        d = (1e5/10)+(1e5/100)*7.5+(2e5)*0.05+(i-4e5)*0.03
        print(f'奖金可提{d}')
    elif 6e5 < i and i <= 10e5:
        e = (1e5/10)+(1e5/100)*7.5+(2e5)*0.05+2e5*0.03+(i-6e5)*0.015
        print(f'奖金可提{e}')
    else:
        f = (1e5/10)+(1e5/100)*7.5+(2e5)*0.05+2e5*0.03+4e5*0.015+(i-10e5)*0.001
        print(f'奖金可提{f}')

练习17:您的任务是创建一个给定数字的layers(n)函数,该函数返回n在第几层(图在下面)

题目:

程序分析: 通过观察会我们会发现,每一层最大的数为1、3、5、7......的平方。因此我们通过判断某一个数的平方根即可知道它属于那一层

代码解析:

def layers(x):
    p = int(x)**(1/2)#开平方
    if int(p) % 2 == 0:
        return (int(p)/2) + 1

    elif str(p-int(p))  == '0.0':#若x 刚好能够开平方
        return ((int(p)-1)/2)+1
    elif type(p) == float:#如果int(x)是奇数且不能开平方
        return ((int(p) + 1) / 2) + 1


练习18:创建一个20行5列数组,其值范围为0~9(须为整数),在其所有的值中随机抽取20个位置进行修改,修改后的值为100

代码解析:

import random
import numpy as np
array =np.array([[1,5,6,3,5],
         [6,5,9,8,7],
         [4,6,3,1,2],
         [7,8,3,6,4],
         [4,9,8,3,1],
         [5,9,1,7,8],
         [6,2,4,3,5],
         [1,2,3,4,5],
         [4,9,8,7,3],
         [8,9,7,6,5],
         [1,4,6,3,7],
         [1,5,6,3,5],
         [6,5,9,8,7],
         [4,6,3,1,2],
         [7,8,3,6,4],
         [4,9,8,3,1],
         [5,9,1,7,8],
         [6,2,4,3,5],
         [1,2,3,4,5],
         [4,9,8,7,3]])
list = []
for i in range(5):
    list.append(i)
for p in range(20):
    array[p,random.choice(list)] = 100
print(array)


练习19:用Python帮助小a写一份房屋调研表格

题目:

程序分析:我用到了openpyxl模块,然后把数据按照朝向、面积、单元等分类,最后写入即可

代码解析:

import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
l = ['小区名称','地址','建筑年龄','楼栋','单元','户室','朝向','面积']
for row in range(1):
    sheet.append(l)
danyuan = ['一单元','二单元','三单元','四单元']
chaoxiang = ['南北','东西']
sqrt = [140,80,70,60]
cheng = [i for i in range(1,16)]
shi = [1,2,3,4]
k = ['晨星花园','双云路88号','2010','1栋']
for column1 in range(2,182):
    sheet.append(k)
h1 = 2
while h1 <= 31:#一单元
    for n1 in cheng:
        for n2 in shi[:2]:
            sheet[f'E{h1}'] = danyuan[0]
            sheet[f'G{h1}'] = chaoxiang[0]
            sheet[f'H{h1}'] = sqrt[0]
            sheet[f'F{h1}'] = f'{n1}0{n2}'
            h1 += 1
h2 = 32
while h2 <= 61:#二单元
    for n1 in cheng:
        for n2 in shi[:2]:
            sheet[f'E{h2}'] = danyuan[1]
            sheet[f'F{h2}'] = f'{n1}0{n2}'
            sheet[f'G{h2}'] = chaoxiang[0]
            sheet[f'H{h2}'] = sqrt[0]
            h2 += 1
h3 = 62
while h3 <= 91:#三单元.南北
    for n1 in cheng:
        for n2 in shi[:2]:
            sheet[f'E{h3}'] = danyuan[2]
            sheet[f'F{h3}'] = f'{n1}0{n2}'
            sheet[f'G{h3}'] = chaoxiang[0]
            sheet[f'H{h3}'] = sqrt[3]
            h3 += 1
h4 = 92
while h4 <= 121:#三单元.东西
    for n1 in cheng:
        for n3 in shi[2:]:
            sheet[f'E{h4}'] = danyuan[2]
            sheet[f'F{h4}'] = f'{n1}0{n3}'
            sheet[f'G{h4}'] = chaoxiang[1]
            sheet[f'H{h4}'] = sqrt[1]
            h4 += 1
h5 = 122
while h5 <= 181:#四单元
    for n1 in cheng:
        for n4 in shi:
            sheet[f'E{h5}'] = danyuan[3]
            sheet[f'F{h5}'] = f'{n1}0{n4}'
            sheet[f'G{h5}'] = chaoxiang[1]
            sheet[f'H{h5}'] = sqrt[2]
            h5 += 1
wb.save('小区数据.xls')


练习20:获取并输出知乎网页的源代码,最后保存为txt文本

程序分析:这里涉及到了urillb模块,这一题算是比较常规的爬虫题,只要 获得请求头,完成请求对象的高级定制,模拟浏览器向服务器发出请求,获取源码,保留在本地即可。

代码解析:

# -*- coding:utf-8 -*-
import urllib.request
import requests
url = 'http://www.zhihu.com/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0',
           'Referer':'https: // www.baidu.com / link?url = -B0FUwUHex9xwNQuJruXFgqXozg79 - wteoaUFf6uPB_ & wd = & eqid = b891bed40003143700000006619359a6Sec - Fetch - Dest',
'Cookie':'_zap=5380819d-5d39-4045-bab0-2fbd7ad36f87; d_c0="AIBeZtj_ABSPTnhz7V7dIUHD6OWJ5-zOvkM=|1636444451"; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1637047309,1637047315,1637047396,1637048732; captcha_session_v2="2|1:0|10:1637044848|18:captcha_session_v2|88:R3FuTlJpMnVEKzZpWE5IRDdDNHBtTnFCNGo0TEp4eENsVlcvSW5jSVJyQjgwM0swQzJQRjl5b3dyeXNPMEpWNQ==|c4f851bcd49309ef9189010e722a5537f1537c0a67a5abd56bdddad6b8a01740"; gdxidpyhxdE=M6gE6HnlImM2yXbH2o7MLZ0tVexiI%2FKelxn%2B%5Caogwb1BCD%2F3Ashs55abltBqUmrO6tDCE2i9AWwgqrq%2B6UcAHC0lTyTOrrWaoHB5%5CKSHrCUNXHLe%2FbT2S36UckLxoeS98zl1ohrwD%5CuIOocuOK71cDyZ5jGxCAf%2FCj2Yvjes4iadcGB8%3A1637045500606; _9755xjdesxxd_=32; YD00517437729195%3AWM_NI=Do96azhUishegpCacT0lmT%2FJLB9cZyfksvyqPjNSq3Or%2Fn24AYbIVb8sWwqcOUfJcpRJe2AT2woi87rq92wqE%2FqDkq1M%2BVUt%2Bcw0eIijoZBtFupnxx8UpUtMJk%2B34ST9aGU%3D; YD00517437729195%3AWM_NIKE=9ca17ae2e6ffcda170e2e6eed3ed748286bba9db348cb08bb3d54b868b8eaeb540a5b4e1b1b268a586e5a2f82af0fea7c3b92a88b1f7d7e472ac8ba794eb6fa5b08d82e260f4b4a3b5ae42909ef784d973a6b5bd97fc7b94b682b4f4398daee18fb1408387aeaad56afcad9998f4698d8baaabe27c9296abd3c460f2a9a18abb3db2aff7d3f67b87f1bfa5ea7bf393e5b7d880e9bdb9d1e843abb6a1bbc18086abc08ffb74fc8bc0b6f7478ab5e5d4b75998e7afa8d837e2a3; YD00517437729195%3AWM_TID=uF1c7HnAfw5FURVBBRNro1QLnkGlDMM%2B; _xsrf=1Ihj3kypJXaMJgx4BmTDY2f3Am3n2qKe; __snaker__id=LeBen9v2N1AX2q0m; captcha_ticket_v2="2|1:0|10:1637044861|17:captcha_ticket_v2|704:eyJ2YWxpZGF0ZSI6IkNOMzFfWVhqTjFlSndlRms1bEd3YXFZZ0lkMUNEc2poRDgwUGwuVHRlUS5fOEZENHljemF4Y1ExU1BJZDlISGNlb3h2RDFHcWViSGd4T093U1B4bi5iR3pwLjA3dWttdzhxSGF4VFVBejQ4OXNUWVQ3UEJoeko2RFVqYlo5SHRmcmtsb2hvVFJYOFNLVk9SYTFiNWxOSjBrQzJSaFlNUzAwbGxqZnlGd05uQnptMXIyLmpqbl9HN3JaT19JOHRHN1VLYXp1QUtKU1ZzRHZjLWJqbVFRYnR2T1lNYWRnLTlZMW40WU5VdWduZlMtRmpnVXNXY29sdy4yT1RidWZfYXFCc2VtWEpnR1lMb2REZGdFOG9La3VuRE1mRkNuS291b2dsWXllSFpoWE5PYWJxVE5FVmJtcGNrWXVsTGRVaTVOcHg0ZmV0dXdMankuQzZtVmZYUDVDbGNFZ082SVNyR1lzOHRCci5VQmQyMTk5Zko5TnFPY2tKUEV4ZHhoLWZoRU4ubWNKV0RZaVo3TFU2NmpjZGZQN2Jxdi1SMVU5aXN2VUdySHY0OFB3enduTkREYTJyTnZfMHNqTk1mSkstQWUySjR4X3dPT1c3ZFBvZWJyVXlPXzVCUEtxSkItZHJNcGNoLjFMZ0VfaThac2lPQ1k0U3JMZUt0aHpuT05peC1OMyJ9|856ebcfb78605938fd648e22ca2a267f6221d3260a593011fa816b3d449259fa"; z_c0="2|1:0|10:1637044861|4:z_c0|92:Mi4xaTJxS0JRQUFBQUFBZ0Y1bTJQOEFGQ1lBQUFCZ0FsVk5mYUNBWWdCc2N1R2FES1U2cnRpbmprSktOeTZBby05bndn|cbcb17d99f70b3efe5139545106683f0a8afba736b7c74d75a5ea9de5825403a"; KLBRSID=53650870f91603bc3193342a80cf198c|1637048734|1637046697; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1637048732; SESSIONID=xXNEirxdIABqkjur7Q1tBIPPf5hbzhdadXTQbNO61Nv; JOID=UFwWB0gr5aZ9OywCTC1CeMfh1QVZVbrvP1NYfS9jouMLV0dxObSENRo8LQJMge9Tua3OUhbmNrQNMapp4_uGayA=; osd=Ul4cBk4p56x8PS4ARixEesXr1ANbV7DuOVFady5loOEBVkFzO76FMxg-JwNKg-1ZuKvMUBznMLYPO6tv4fmMaiY=; tst=r; NOT_UNREGISTER_WAITING=1'
           }
request = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
with open('知乎.txt','w',encoding='utf-8')as fp:
    fp.write(content)


练习21:使用正则表达式从下面内容获取所有jpg结尾的网页图片链接

程序分析:找到图片的标签,用re提取即可

代码解析:

import re
lianjie = '<a href="/bizhitupian/diannaobizhi/240508.htm" class="TypeBigPics" target="_blank"><img src="http://kr.shanghai-jiuxin.com/file/2021/1112/small95a18b4db31f407b3cd7c275d2eb7e36.jpg"  /><span>王者荣耀妲己女仆咖啡带鱼屏壁纸</span></a><div class="txtInfo gray"><em class="IcoList">查看:0次</em><em class="IcoTime">11-12</em></div></div></li><li><a href="/bizhitupian/shoujibizhi/240460.htm" class="TypeBigPics" target="_blank"><img src="http://kr.shanghai-jiuxin.com/file/2021/1111/small61c49fcdf69f916671dd183b6db267c5.jpg"  /><span>Windows 11 4k桌面壁纸</span></a><div class="TypePicInfos"><div class="txtInfo gray"><em class="IcoList">查看:0次</em><em class="IcoTime">11-11</em></div></div></li><li><a href="/bizhitupian/shoujibizhi/240459.htm" class="TypeBigPics" target="_blank"><img src="http://kr.shanghai-jiuxin.com/file/2021/1111/small8a95f9c4ad7bf3c7bb72233739d5da78.jpg"  /><span>微软win11 4k风景壁纸</span></a><div class="TypePicInfos"><div class="txtInfo gray"><em class="IcoList">查看:0次</em><em class="IcoTime">11-11</em></div></div></li><li><a href="/bizhitupian/shoujibizhi/240458.htm" class="TypeBigPics" target="_blank"><img src="http://kr.shanghai-jiuxin.com/file/2021/1111/small28c61714c3cd01ebbb53ef160c75b20d.jpg"  /><span>微软windows11风景4k壁纸</span></a><div class="TypePicInfos"><div class="txtInfo gray"><em class="IcoList">查看:0次</em><em class="IcoTime">11-11</em></div'
wenbeng = '<img.*?/>'
titles = re.findall(wenbeng,lianjie,re.S)
for i in titles:
   a = i.replace('<img.*?/>','')
   print(a)


练习22:写一个程序:score = [23, 54, 65, 1, 0, 34, 67, 22],用for循环的方法从小到大排序并输出

程序分析:把每一个数与前一个数做比较,如果比前一个小就交换位置,直到比前一个数大或者是列表的第一个元素,如果比前一个大,就原地不动。

代码解析:

score = [23,54, 65, 1, 0, 34, 67, 22]
for k in score:
    if  k > score[score.index(k)-1]:#如果k大于于前一个数
        continue#过
    else:
        i = 1
        while k < score[score.index(k) - 1]:#如果k小于前一个数,就与前一个数交换
            i += 1
            t = k
            l = score[score.index(k)-1]
            score[score.index(k)] = score[score.index(k)-1]
            score[score.index(l)] = t
            if score.index(k) == 0:#如果k在列表的第一个元素,跳出当前循环
                break

练习23:定义一个汽车类,并在类中定义一个move方法,然后分别创建BMW_X9AUDI_A9对象,并添加颜色、马力、型号等属性,然后分别打印出属性值、调用move方法(move方法调用后则输出--汽车开始跑了--

程序分析:与上文练习15类似,只不过是把类属性封装在move函数里面

代码解析:

class car():
    def move(self):
        print('%s %s %s ——汽车开始跑了——'%(self.color,self.mali,self.xinghao))
BMW_X9 = car()
BMW_X9.color = 'red'
BMW_X9.mali = '2500'
BMW_X9.xinghao = 'X9'
AUDI_A9 = car()
AUDI_A9.color = 'biue'
AUDI_A9.mali = '2500'
AUDI_A9.xinghao = 'A9'
BMW_X9.move()
AUDI_A9.move()

练习24:去重与排序系统由随机生成的n个数字组成的列表(不能用sort())

代码解析:

import random
l = [i for i in range(1,1001)]
n = input('请输入数字')
k = random.sample(l,int(n))
k = list(set(k))#去重
k.sort()#排序
while len(k) < int(n):#如果出现重复的元素,执行以下语句
    k.append(random.choice(l))
    k = list(set(k))
    k.sort
print(k)


练习25:以2002年12月1日作为小a的生日,设计一个程序,当输入一个日期时判断该日期是否为小a的生日,若不是,则大致判断小a的年龄

程序分析:因为是大致判断年龄,因此小a的年龄为输入年份减去当前年份再减一(小a生日是12月),接下来生日的判断看月份年龄是否匹配即可。

代码解析:

import re
year = 2002
moth = 12
day = 1
print(f'小欧的生日是{year}年{moth}月{day}日')
data = input('今天的日期是')
l = re.sub("\D",".",data)
l = l.split('.')
if int(l[1])==int(moth) and int(l[2])==int(day):
    print('可以去农院路庆祝了!')
else:
    age = int(l[0])-int(year)-1
    print(f'小欧今年{age}周岁了!')


练习26:*‘爬取拉勾网的招聘信息(以上海java相关岗位为例),并用csv的格式保存’

程序分析:首先我们要找到每一页的url的规律,然后把请求头全部复制过去,先看看拉勾网有什么反爬手段,再找我们要爬取内容的标签(我用xpath提取)注意:我们爬取的每一页的目标信息都会储存在一个列表里,所以最后输出的是一个二维列表,要写成csv格式要把它们转化为一维列表。

代码解析:

import urllib.request
from lxml import etree
base_url = 'https://www.lagou.com/wn/jobs?px=new&pn='
base_url2 = '&kd=Java&city=%E4%B8%8A%E6%B5%B7'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
'Accept-Language':' zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Connection':' keep-alive',
'Cookie':' user_trace_token=20211122203056-5e157933-5ab5-4b4e-9238-d9ee56017da2; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1637657734,1637727134,1637727135,1637731346; _ga=GA1.2.1538230499.1637584246; LGUID=20211122203058-8f51187c-7222-4d76-80a9-f7deeac94034; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2222999873%22%2C%22%24device_id%22%3A%2217d47a0acce225-0500f0fda5c76-4c3e217e-1327104-17d47a0accf2ff%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fwww.baidu.com%2Flink%22%2C%22%24os%22%3A%22Windows%22%2C%22%24browser%22%3A%22Firefox%22%2C%22%24browser_version%22%3A%2294.0%22%7D%2C%22first_id%22%3A%2217d47a0acce225-0500f0fda5c76-4c3e217e-1327104-17d47a0accf2ff%22%7D; _gid=GA1.2.18850933.1637584253; LG_LOGIN_USER_ID=""; LG_HAS_LOGIN=1; showExpriedIndex=1; showExpriedCompanyHome=1; showExpriedMyPublish=1; hasDeliver=0; privacyPolicyPopup=false; RECOMMEND_TIP=true; index_location_city=%E4%B8%8A%E6%B5%B7; __lg_stoken__=76fb5de9ce291dbd2b865b7d7260db312b57e4b144864d911fd0d38ab6c3b15d2aa3ed12ede5ddda1e5f59ce6f0f5d8e320d153a36c8cead67a872d49ac14d449dcd09805590; SEARCH_ID=9696a9790c864fd3843b4345001f9e3e; JSESSIONID=ABAAABAABEIABCI414C793BDEE938385361E4280D0AB9C0; WEBTJ-ID=20211124121213-17d5024dea87f4-0050297e304155-4c3e217e-1327104-17d5024dea9535; _putrc=""; X_HTTP_TOKEN=f92c00699ac30524063137736132bdc5965c908e42; sensorsdata2015session=%7B%7D; login=false; unick=""; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1637731346; __SAFETY_CLOSE_TIME__22999873=1; LGSID=20211124132240-c0746319-4145-4bed-beef-10c77b33c76d; LGRID=20211124132240-929c3fb1-862c-4cf4-b528-72ba78294fd8; TG-TRACK-CODE=index_navigation; _gat=1; PRE_UTM=; PRE_HOST=www.baidu.com; PRE_SITE=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DfcVpxvxnnQRQR%5FD3HVEkD9ioD-3jmTmv8Vj1gRJ2JF3%26wd%3D%26eqid%3Dc0ccd71f000278be00000006619dcc1a; PRE_LAND=https%3A%2F%2Fwww.lagou.com%2F',
'Upgrade-Insecure-Requests':'1',
'Sec-Fetch-Dest':'document',
'Sec-Fetch-Mode':'navigate',
'Sec-Fetch-Site':'same-origin',
'Sec-Fetch-User':'?1',
'Cache-Control':'max-age=0',
'TE':'trailers',
'Referer':'https://www.lagou.com/'}
company_list = []
career_list = []
salay_list = []
address_list = []
indusdry_list = []
for i in range(1,31):
    request = urllib.request.Request(url=base_url + str(i) + base_url2,headers=headers)
    response = urllib.request.urlopen(request)
    content = response.read().decode('utf-8')
    tree = etree.HTML(str(content))
    company_list.append(tree.xpath('//div[@id="__next"]//div[@class="company-name__2-SjF"]/a/text()'))
    career_list.append(tree.xpath('//div[@id="__next"]//div[@class="p-top__1F7CL"]/a/text()')[::2])
    salay_list.append(tree.xpath('//div[@id="__next"]//div[@class="p-bom__JlNur"]/span/text()'))
    address_list.append(tree.xpath('//div[@id="__next"]//div[@class="p-top__1F7CL"]/a/text()')[1::2])
    indusdry_list.append(tree.xpath('//div[@id="__next"]//div[@class="industry__1HBkr"]/text()'))
company_list = [j1 for k1 in range(len(company_list)) for j1 in company_list[k1]]
career_list = [j2 for k2 in range(len(career_list)) for j2 in career_list[k2]]
salay_list = [j3 for k3 in range(len(salay_list)) for j3 in salay_list[k3]]
address_list = [j4 for k4 in range(len(address_list)) for j4 in address_list[k4]]
indusdry_list = [j5 for k5 in range(len(indusdry_list)) for j5 in indusdry_list[k5]]
import pandas as pd
dataframe = pd.DataFrame({'公司':company_list,'地址':address_list,'职位':career_list,'待遇':salay_list,'要求':indusdry_list})
dataframe.to_csv('lagou.csv',encoding='utf-8-sig')


 

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值