以下代码为本萌新的个人浅见,如有不足之处欢迎评论区批评指正~
目录
练习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的值中。
练习8:请你把下图的抽奖过程用程序实现并且封装成一个的函数。练习9:和电脑玩一个剪刀石头布的游戏:电脑随机出拳,我们可选择出什么。(电脑随机出、用户手动输入且要判断输入是否合法)封装为一个函数
练习10:小明、小红、小刚是同班同学,且坐在同一排,分别坐在第一位、第二位、第三位。由于他们的身高都差不多,所以,老师计划让他们三个轮流坐在第一位。每次换座位的时候,第一位变第三位,后面两位都往前一位
练习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格式的房屋调研表格
练习21:使用正则表达式从下面内容获取所有jpg结尾的网页图片链接
练习22:写一个程序:score = [23, 54, 65, 1, 0, 34, 67, 22],用for循环的方法从小到大排序并输出
练习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的字符串值转化成一个有结构的字典
题目:![](https://i-blog.csdnimg.cn/blog_migrate/8db076113c35ba3380f2c2b1f3faa0f5.png)
程序分析:要生成字典首先要找出每一个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进行求和
代码解析:
![](https://i-blog.csdnimg.cn/blog_migrate/aa54b92a752f3d0401df1f9fb10cd7b1.jpeg)
练习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_X9
、
AUDI_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')