目录:
Day1 python基础和列表操作
Day2 循环及列表高级操作(步长)
Day3 函数、元素翻转、判断字符串、计算键值乘积
Day4 计算集合差并交、字典升序排列、定义圆类算周长面积
Day5 python面向对象
Day6 python爬虫网络基础知识
Day7 爬虫基础
Day1 python基础和列表操作
0.如何在Python中一次性输入多个参数
a,b,c=map(int,input().split(','))
1.import module与from module import* 的区别
import module将整个模块(module)导入;from module import*将某个模块中的全部函数导入
2.字符串不能改变是那种含义?试用程序验证说明
3.编程实现有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
5.定义List=[‘a’,‘b’,0,1,‘c’]输出前三个元素,输出第2个和第5个元素,输出除第一个外所有元素。
Day2 循环及列表高级操作(步长)
0.List1=[2,4,6] list2=[1,3,5]将List1和List2合并,并升序排列
1.一个小于100的正整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
2.从键盘任意获取一串数字,实现让他们错落相加并将结果输出。如:12345 错落相加 1+3+5 2+4 最终结果96,123456 错落相加 1+3+5 2+4+6 最终结果912
3.从键盘上获取任意一串英文,实现: (1)将重复字符去掉 (2)将大写转换成小写,小写转换成大写。如:abC 处理后 Abc
Day3 函数、元素翻转、判断字符串、计算键值乘积
0.请编写用例并加以说明,解释Python中赋值拷贝、深拷贝与浅拷贝的区别
b = a: 赋值引用,a 和 b 都指向同一个对象。
b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
代码:
import copy
a = [1, 2, 3, 4, ['a', 'b']] # 原始对象
b = a # 赋值,传对象的引用
c = copy.copy(a) # 对象拷贝,浅拷贝
d = copy.deepcopy(a) # 对象拷贝,深拷贝
a.append(5) # 修改对象a
a[4].append('c') # 修改对象a中的['a', 'b']数组对象
print('a = ', a)
print('b = ', b) #a 和 b 都指向同一个对象,a 变 b 也变
print('c = ', c) #浅拷贝引用类型才修改,基本数据类型不修改
print('d = ', d) #深拷贝都修改
结果:
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]
1.编写函数实现指定个数的元素翻转到数组的尾部。
#例如:arr = [1,2,3,4,5,6] 将长度为 6 的 数组 arr 的前面 2 个元素翻转到数组尾部。
#得到: arr = [3,4,5,6,1,2]
代码:
#将所有元素右移二次
def leftRotate(arr, d, n):
for i in range(d):
leftRotatebyOne(arr, n)
def leftRotatebyOne(arr, n):
temp = arr[0]
for i in range(n - 1):
arr[i] = arr[i + 1]
arr[n - 1] = temp
def printArray(arr, size):
for i in range(size):
print("%d" % arr[i], end=" ")
arr = [1, 2, 3, 4, 5, 6]
leftRotate(arr, 2, 6)
printArray(arr, 6)
结果:
3 4 5 6 1 2
2.编写程序实现给定一个字符串,然后判断指定的子字符串是否存在于该字符串中。
代码:
str = "I am a programmer"
if "pro" in str:
print("pro存在")
else:
print("pro不存在")
if str.find("python") >=0:
print("python存在")
else:
print("python不存在")
结果:
pro存在
python不存在
3.编写程序实现给定一个字典,计算所有键值为数字值的乘积。
代码:
dict = {"zhangsan" : 1, "lisi" : 2, "wangwu" : 3, "zhaoliu" : 4}
mult = 1
for i in dict:
if(type(dict[i]) == int):
mult *= dict[i]
else:
continue
print(mult)
结果:
24
Day4 计算集合差并交、字典升序排列、定义圆类算周长面积
0.编写函数实现输入任意两个集合及对应运算符,能够返回两个集合的计算的结果,如集合A = {1,2,3} B = {2,3} 运算符 - 得到计算结果为A与B的差集,Result = {1}
代码:
set1 = set(input("第一个集合:").split(","))
set2 = set(input("第二个集合:").split(","))
str = input("请输入运算符:")
if str == "+":
print("交集:", set1 & set2)
elif str == "*":
print("并集:", set1 | set2)
elif str == "-":
print("差集:", set1 - set2)
else:
print("输入错误")
结果:
第一个集合:1,2,3
第二个集合:2,3
请输入运算符:-
差集: {'1'}
1.编写函数实现输入任意键值均为数字的字典,可以返回按字典的键值升序排列的新字典。如字典dict = {‘a’:1,‘b’:3,‘c’:2},输出为[(‘a’, 1), (‘c’, 2), (‘b’, 3)]
代码:
dict = dict(eval(input()))
sorted_dict=sorted(dict.items(),key=lambda x:x[1])
print(sorted_dict)
结果:
{'a':1,'b':3,'c':2}
[('a', 1), ('c', 2), ('b', 3)]
2.定义Circle(圆)类,成员包括圆心位置、半径、颜色等属性。编写构造方法和其他方法,计算周长和面积
代码:
class Circle:
# 定义私有属性
_local = 0
_radius = 0
_color = ""
# 定义构造方法
def __init__(self, local, radius, color):
self._local = local
self._radius = radius
self._color = color
def show(self):
print("该圆属性为:%f,%d,%s" % (self._local, self._radius, self._color))
def zhouchang(self):
return 3.14 * 2 * self._radius
def area(self):
return 3.14 * self._radius * self._radius
l=float(input("位置:"))
r=int(input("半径:"))
c=str(input("颜色:"))
circle = Circle(l,r,c)
circle.show();
print("周长:"+str(circle.zhouchang()))
print("面积:"+str(circle.area()))
结果:
位置:10.8
半径:4
颜色:红
该圆属性为:10.800000,4,红
周长:25.12
面积:50.24
Day5 python面向对象
0.定义people类包含公有属性:姓名。私有属性:基本工资。
通过构造函数对其初始化、输出函数(输出所有成员)、私有成员的存取函数。
定义people的派生类—销售员类—包含销售量和销售区域属性。
通过构造函数对其初始化,输出函数(输出所有成员).
计算工资函数(销售量10002%即为提成工资+父类people中的基本工资)
定义people的派生类—储备干部类—包括私有成员储备等级(等级值范围1-5,5级别最高,可以依照储备类别升职)和储备类别属性.
通过构造函数对其初始化(默认初始化基本工资3000,储备等级1等,其他属性由输入参数决定).
输出函数(输出所有成员),薪资函数(依照等级提升薪资)(储备等级每升1挡,工资增加1000)
提升等级函数(可以调用该方法修改等级,调用一次提升一档,注意工资要跟随产生变化,最高等级5级)
定义多继承类—销售经理类—包含公有属性管理区域,经理的工资包含基本工资1W+销售区域提成(区域总数量*0.5%),构造函数和输出函数
class people:
# 定义私有属性
name = ""
# 定义公有属性
_salary = 0
# 定义构造方法
def __init__(self, name, salary):
self.name = name
self._salary = salary
def setSalary(self,salary):
self._salary = salary
def getSalary(self):
return self._salary
def show(self):
print("姓名 :%s 基本工资:%d" %(self.name,self._salary))
class Seller(people):
number = 0
region = ''
def __init__(self, name, salary, number, region):
people.__init__(self, name, salary)
self.number = number
self.region = region
def allSalary(self):
all = self.number * 1000 * 0.02 + people.getSalary(self)
return all
def show(self):
print("姓名 :%s 销售量:%d 销售区域: %s 工资 %d: " %
(self.name, self.number, self.region,self.allSalary()))
class Position(people):
level = 1 # 等级
type = 0
def __init__(self, name, type):
self.name = name
self.type = type
self._salary = 3000
self.level = 1
def addLevel(self):
self.level += 1;
def showSalary(self):
if self.level == 1:
return self._salary
elif self.level == 2:
return self._salary + 1000
elif self.level == 3:
return self._salary + 2000
elif self.level == 4:
return self._salary + 3000
elif self.level == 5:
return self._salary + 4000
def show(self):
print("姓名 :%s 薪资:%d 等级:%d 类别:%d " %
(self.name, self.showSalary(), self.level, self.type))
class Manager(Seller, Position):
area = 0
def __init__(self, name, salary, number, region, level, type, area):
Position.__init__(self, name, type)
Seller.__init__(self, name, salary, number, region)
self.area = area
def AllSalary(self):
allSalary = self.area * 0.005 + 10000
return allSalary
def show(self):
print("姓名 :%s 管理地区: %s 管理区域个数:%d 工资:%d" %
(self.name, self.region, self.area,self.allSalary()))
s = Seller("张三", 5000, 100, "上海")
s.show()
p = Position("李四", 3)
p.show()
p.addLevel()
p.show()
m = Manager("王五", 30000, 66, "北京", 4, 1, 998)
m.show()
姓名 :张三 销售量:100 销售区域: 上海 工资 7000:
姓名 :李四 薪资:3000 等级:1 类别:3
姓名 :李四 薪资:4000 等级:2 类别:3
姓名 :王五 管理地区: 北京 管理区域个数:998 工资:31320
1. 通过查找内置函数解决,输入指定的年份,月份和日期(如13号),能判断当天是星期几。
import datetime
year=int(input("年:"))
month=int(input("月:"))
day=int(input("日:"))
week=int(datetime.datetime(year,month,day).strftime("%w"))
def getNumber(week):
if week==1:
return "一"
elif week==2:
return "二"
elif week == 3:
return "三"
elif week==4:
return "四"
elif week==5:
return "五"
elif week==6:
return "六"
elif week==7:
return "日"
print("%d年%d月%d日是星期%s"%(year,month,day,getNumber(week)))
年:2020
月:3
日:11
2020年3月11日是星期三
Day6 python爬虫网络基础知识
0.用自己的理解描述URL和URI的联系
URI用来唯一的标识一个资源。Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个URI来定位的,URL是统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
1.用自己的理解描述HTTP请求过程
客户端发送一个携带请求行、请求头、空行和请求数据的HTTP请求到服务器,服务器接收并处理客户端发过来的请求后会返回一个包含状态行、消息报头、空行和响应正文的HTTP响应消息。
2.用自己的理解描述DOM对网页爬取的影响
通过DOM可以访问一个元素的父元素或者子元素,可以利用DOM指定需要爬取的元素。
3.用自己的理解描述爬虫的基本原理
提取静态网页、ajax携带的json数据、cookie、session等内容并保存到数据库中。
返回顶部
Day7 python爬虫基础
0.通过urllib库爬取www.taobao.com的源码,并设置如果响应时间超过0.1秒则抛出异常提示。
from urllib import request, error
try:
response = request.urlopen(url='https://www.taobao.com/',timeout=0.1)
print(response.read().decode('utf-8'))
except Exception as e:
print(str(e))
1.通过urllib爬取http://www.13333.cn/,若无法访问则利用异常处理返回无法访问的原因及状态码。
from urllib import request, error
try:
response = request.urlopen('http://www.13333.cn/')
print(response.read().decode('utf-8'))
except error. URLError as e:
print(e.reason, e.code)