星期一
1.序列
#记录生肖
s='猴鸡狗猪鼠牛虎兔龙蛇马羊'
print(s[0:4])
print(s[-1])
year=2018
print(year%12)
print(s[year%12])
print('狗'in s)
print('狗'not in s)
print(s+"3")
print(s*3)
2.if
x="abc"
if x=="ac":
print("相等")
else:
print('不相等')
3.for
a='猴鸡狗猪鼠牛虎兔龙蛇马羊'
for y in range(2000,2019):
print('%s 年的属相是 %s'%(y,a[year%12]))
4.for循环if嵌套
z1=('摩羯','水瓶','双鱼','白羊','金牛','双子','巨蟹','狮子','处女','天枰','天蝎','射手')
z2=((1,20),(2,19),(3,21),(4,21),(5,21),(6,22),(7,23),(8,23),(9,23),(10,23),(11,23),(12,23))
int_m=int(input('请输入月份:'))
int_n=int(input('请输入日子:'))
for x in range(len(z2)):
if z2[x]>=(int_m,int_n):
print(z1[x])
break
elif int_m==12 and int_n>23:
print(z1[0])
break
5.while循环if嵌套
z1=('摩羯','水瓶','双鱼','白羊','金牛','双子','巨蟹','狮子','处女','天枰','天蝎','射手')
z2=((1,20),(2,19),(3,21),(4,21),(5,21),(6,22),(7,23),(8,23),(9,23),(10,23),(11,23),(12,23))
int_m=int(input('请输入月份:'))
int_n=int(input('请输入日子:'))
n=0
while z2[n]<(int_m,int_n):
if int_m==12 and int_n>23:
break
n+=1
print(z1[n])
星期二
字典
a='猴鸡狗猪鼠牛虎兔龙蛇马羊'
z1=('摩羯','水瓶','双鱼','白羊','金牛','双子','巨蟹','狮子','处女','天枰','天蝎','射手')
z2=((1,20),(2,19),(3,21),(4,21),(5,21),(6,22),(7,23),(8,23),(9,23),(10,23),(11,23),(12,23))
while True:
#请用户输入信息
y=int(input('请输入年份:'))
m=int(input('请输入月份:'))
d=int(input('请输入日子:'))
dict1={}
dict2={}
for i in a:
dict1[i]=0
for i in z1:
dict2[i]=0
n=0
while z2[n]<(m,d):
if m==12 and d>23:
break
n+=1
#输出信息
print(z1[n])
dict1[a[y % 12]] += 1
print('%s 年的属相是 %s'%(y,a[y%12]))
dict2[z1[n]]+= 1
for key in dict1.keys():
print('%s 的生肖有 %d 个'%(key,dict1[key]))
for key in dict2.keys():
print('%s 的星座有 %d 个'%(key,dict2[key]))
列表推导式
#从0到10的所有偶数的平方
alist=[]
for i in range(0,11):
if i%2==0:
alist.append(i*i)
print(alist)
blist=[i*i for i in range(0,11) if i%2==0]
print(blist)
a='猴鸡狗猪鼠牛虎兔龙蛇马羊'
adict={}
for j in a:
adict[j]=0
print(adict)
bdict={j:0 for j in a}
print(bdict)
文件的内建函数
file1=open('name.txt','w')
file1.write('诸葛亮')
file1.close
file2=open('name.txt','a')
file2.write('刘备')
file2.write('曹操')
file2.close()
file2=open('name.txt')
print(file2.readline())
file3=open('name.txt')
for line in file3.readlines():
print(line)
file4=open('name.txt')
file4.tell()
print('当前位置%s'%file4.tell())
print('当前内容是%s'%file4.read(1))
print('当前位置是%s'%file4.tell())
file4.seek(0)
print('当前位置%s'%file4.tell())
print('当前内容%s'%file4.read(1))
异常
try:
a=open('name.txt')
except Exception as e:
print(e)
finally:
a.close()
函数
def func(a,b,c):
print('a=%s'% a)
print('b=%s'% b)
print('c=%s'% c)
func(1,c=3,b=2)
函数的可变长参数
def howlong(first,*other):
print(1+len(other))
howlong(123,456)
函数的变量作用域
var1=123
def func():
#global var1 加上 global ,对外面也产生影响
var1=456
print(var1)
func() #456
print(var1) #123 #456
函数的迭代器和生成器
#迭代器
#iter() next()
list1=[1,2,3]
it=iter(list1)
print(next(it))
print(next(it))
print(next(it))
#生成器
def frange(start,stop,step):
x=start
while x<stop:
yield x
x+=step
for i in frange(10,20,0.5):
print(i)
lambda
def true():
return True
true()
def true(): return true
lambda : True
def add(x,y):
return x+y
add(3,5)
#lambda 括号内 :返回
def add(x,y):return x+y
lambda x,y : x+y
print(add(2,5))
python内建函数
#filter
a=[1,2,3,4,5,6,7]
filter(lambda x:x>2,a) #list
print(filter(lambda x:x>2,a))
list(filter(lambda x:x>2,a))
print(list(filter(lambda x:x>2,a))) #[3,4,5,6,7]
#map
b=[1,2,3]
map(lambda x:x,b) #list
print(map(lambda x:x,b))
list(map(lambda x:x,b) )
print(list(map(lambda x:x,b) )) #[1,2,3]
list(map(lambda x:x+1,b))
print(list(map(lambda x:x+1,b))) #[2,3,4]
c=[4,5,6]
list(map(lambda x,y:x+y,b,c))
print(list(map(lambda x,y:x+y,b,c))) #[5,7,9]
#reduce(函数,序列[,初始值]) 初始值可省略 from functools import reduce reduce(lambda x,y:x+y,[2,3,4],1) print(reduce(lambda x,y:x+y,[2,3,4],1)) #(1+2)+3+4=10
#zip
e=(1,2,3)
f=(4,5,6)
zip(e,f)
for i in zip(e,f):
print(i) #(1, 4)
#(2, 5)
# (3, 6)
dicta={'a':'aa','b':'bb'}
dictb=zip(dicta.values(),dicta.keys())
print(dictb) #dict
print(dict(dictb))
#{'aa':'a','bb':'b'} value和 key 对调
闭包
def func():
a=1
b=1
return a+b
def sum(a):
def add(b):
return a+b
return add
num1=func()
num2=sum(2)
print(num2(4)) #6
#add 函数名称或函数的引用
#add() 函数的调用
print(type(num1)) #int
print(type(num2)) #function
def counter():
cnt=[0]
def add1():
cnt[0] +=1
return cnt[0]
return add1
num3=counter()
print(num3()) #1
print(num3()) #2
print(num3()) #3
def counter(first=0):
cnt=[first]
def add1():
cnt[0] +=1
return cnt[0]
return add1
num5=counter(5)
num10=counter(10)
print(num5())
print(num5())
print(num10())
print(num10())
闭包的使用
#a*x+b=y
def aline(a,b):
def arg_y(x):
return a*x+b
return arg_y
#a=3 b=5
#x=10 y=?
line1=aline(3,5)
line2=aline(7,8) #两条直线
print(line1(10))
#a*x+b=y
def aline(a,b):
return lambda x:a*x+b
#a=3 b=5
#x=10 y=?
line1=aline(3,5)
print(line1(10))
装饰器
def tips(func):
def nei(a,b):
print('start')
func(a,b)
print('stop')
return nei
@tips
def add(a,b):
print(a+b)
def sub(a,b):
print(a-b)
print(add(4,5))
def new_tips(argv):
def tips(func):
def nei(a,b):
print('start %s %s'%(argv,func.__name__))
func(a,b)
print('stop')
return nei
return tips
@new_tips('add')
def add(a,b):
print(a+b)
@new_tips('sub')
def sub(a,b):
print(a-b)
print(add(4,5))
print(sub(7,3))
自定义上下文管理器
fd=open('name.txt')
try:
for line in fd:
print(line)
finally:
fd.close()
with open('name.txt') as f:
for line in f:
print(line)
星期三
模块
import matplotlib as m
from matplotlib import sleep
sleep()
import time
time.sleep()
类
#面向过程
user1={'name':'tom','hp':100}
user2={'name':'jerry','hp':80}
def role(rolename):
print('name is %s , hp is %s '%(rolename['name'],rolename['hp']))
role(user1)
#面向对象
class Player(): #定义一个类
def __init__(self,name,hp,occu):
self.name=name #变量被称作属性 #name前加__ 只能通过定义新的方法换新名字,不能采用赋值
self.hp=hp
self.occu=occu
def role(self): #定义一个方法
print('%s:%s:%s'%(self.name,self.hp,self.occu))
def updatename(self,newname): #定义一个方法
self.name=newname
print(self.name)
class Mons():
'定义怪物类'
def __init__(self,hp=100):
self.hp=hp
def run(self):
print('移动到某处')
def whoami(self):
print('我是怪物')
class Ani(Mons):
'定义动物类'
def __init__(self,hp=10):
super(Ani, self).__init__(hp)
class Boss(Mons):
'定义boss类'
def whoami(self):
print('我是boss')
user1=Player('tom',100,'fashi') #类的实例化
user2=Player('jerry',90,'zhanshi')
user1.role()
user2.role()
user1.updatename('nike')
a1=Mons(1000)
print(a1.hp)
print(a1.run())
a2=Ani(800)
print(a2.hp)
print(a2.run())
a3=Boss(450)
print(a3.whoami())
#判断类型,是否属于子类
print(isinstance(a2,Mons))
类的使用——自定义with
class Testwith():
def __enter__(self):
print('run')
def __exit__(self, exc_type, exc_val, exc_tb):
if exc_tb is None:
print('正常结束')
else:
print('has error %s'% exc_tb)
with Testwith():
print('Test is running')
raise NameError('testNameError')
多线程
def myThread(arg1,arg2):
print('%s %s' % (arg1,arg2))
for i in range(1,6,1):
t1=myThread(i,i+1)
import threading
import time
from threading import current_thread
def myThread(arg1,arg2):
print(current_thread().getName(),'start')
print('%s %s' % (arg1,arg2))
time.sleep(1)
print(current_thread().getName(),'stop')
for i in range(1,6,1):
t1=threading.Thread(target=myThread,args=(i,i+1))
t1.start()
print(current_thread().getName(),'end')
import threading
from threading import current_thread
class Mythread(threading.Thread):
def run(self):
print(current_thread().getName(),'start')
print('run')
print(current_thread().getName(),'stop')
t1=Mythread()
t1.start()
t1.join()
print(current_thread().getName(),'end')
星期四
re
import re
p=re.compile('ca*t')
print(p.match('caaaat'))
phone = '123-456-789' # 这是电话号码
p2=re.sub(r'#.*$','',phone) #把#后面的内容删除,替换为空
print(p2)
p3=re.sub(r'\D','',p2) #去掉-,即只有数字
print(p3)
日期
import time
print(time.time())
print(time.localtime())
print(time.strftime('%Y-%m-%d %H:%M:%S'))
import datetime
print(datetime.datetime.now())
newtime=datetime.timedelta(minutes=10)
print(datetime.datetime.now()+newtime)
one_day=datetime.datetime(2008,5,27)
new_day=datetime.timedelta(days=10)
print(one_day + new_day)
random
import random
print(random.randint(1,5))
print(random.choice(['aa','bb','cc']))
OS
import os
print(os.path.abspath('..'))
print(os.path.exists('/Users')) #判断文件是否存在
print(os.path.isfile('/Users')) #判断是否是文件
print(os.path.isdir('/Users')) #是否是目录
os.path.join('/tmp/a/','b/c')
path
from pathlib import Path
p = Path('.')
print(p.resolve())
p.is_dir()
#新建目录
q= Path('/tmp/a')
Path.mkdir(q,parents=True)
numpy
import numpy as np
arr1=np.array([2,3,4])
print(arr1)
print(arr1.dtype)
arr2=np.array([1.2,2.3,5.5])
print(arr2)
print(arr2.dtype)
print(arr1 + arr2)
print(arr2 * 10)
data=[[1,2,3], [4,5,6]]
arr3=np.array(data)
print(arr3)
print(arr3.dtype)
arr4=np.arange(10) #0,1,2,3,4,5,6,7,8,9
print(arr4)
print(arr4[1]) #从0开始
print(arr4[1:5])
arr4[2:4]=18
print(arr4)
arr_slice = arr4[5:8].copy()
arr_slice[:] =15 #从第一个元素到最后一个元素
print(arr_slice)
print(arr4)
pandas
from pandas import Series,DataFrame
import pandas as pd
obj = Series([4,5,6,-7])
print(obj)
print(obj.index)
print(obj.values)
obj2=Series([4,7,-5,3],index=['a','b','c','d'])
print(obj2)
obj2['c']=6
print(obj2)
print('f' in obj2)
sdata={'beijing':5124,'shanghai':8459,'chengdu':5126}
obj3=Series(sdata)
print(obj3)
obj3.index=['bj','sh','cd']
print(obj3)
data={'city':['shanghai','shanghai','shanghai','beijing','beijing'],
'year':[2016,2017,2018,2016,2017],
'pop':[1.5,1.7,1.3,1.4,1.5]}
frame=DataFrame(data) #二维
frame2=DataFrame(data,columns=['year','city','pop']) #排序
print(frame)
print(frame2)
#提取一维
print(frame2['city'])
print(frame2.city)
#添加新的一列
frame2['new']=100
print(frame2)
#新的一列,判断首都是不是北京 true/false
frame2['cap']= frame2.city =='beijing'
print(frame2)
#赋值,字典
pop={'beijing':{2008:1.5,2009:2.0}, #beijing是行索引
'sahnghai':{2008:2.0,2009:3.600}
}
frame3=DataFrame(pop)
print(frame3)
print(frame3.T) # 年份是行索引 (.T替换)
#dataframe 重新索引
obj4=Series([4.5,7.2,-5.3,3.6],index=['b','d','c','a'])
obj5=obj4.reindex(['a','b','c','d','e'],fill_value=0)
print(obj5)
obj6=Series(['blue','purple','yellow'],index=[0,2,4])
print(obj6)
print(obj6.reindex(range(6)))
print(obj6.reindex(range(6),method='ffill')) #ffill 利用上面的进行填充
print(obj6.reindex(range(6),method='bfill')) #bfill 利用下面的进行填充
#删除操作
from numpy import nan as NA
data1=Series([1,NA,2])
print(data1.dropna())
data2=DataFrame([[1.,6.5,3],[1.,NA,NA],[NA,NA,NA]
])
data2[4]=NA #空列
print(data2.dropna(how='all')) #删除一行全是NA的
print(data2.dropna(axis=1,how='all')) #删除空列
#缺失值填充
data2.fillna(0)
print(data2.fillna(0,inplace=True))
print(data2)
#层次化索引
import numpy as np
data3=Series(np.random.randn(10),
index=[['a','a','a','b','b','b','c','c','d','d'],
[1,2,3,1,2,3,1,2,2,3]])
print(data3)
print(data3['b'])
print(data3['b':'c'])
print(data3.unstack()) #二维
print(data3.unstack().stack()) #一维
mat
import matplotlib.pyplot as plt
#绘制简单的曲线
plt.plot([1,3,5],[4,8,10])
plt.show()
import numpy as np
x=np.linspace(-np.pi,np.pi,100) #x的定义域为 -3.14~3.14,中间隔100个元素
plt.plot(x,np.sin(x))
plt.show()
x1=np.linspace(-np.pi*2,np.pi*2,100) #定义域为: -2pi 到 2pi
plt.figure(1,dpi=50) #创建图表1 ,精度50
for i in range(1,5): #画四条线
plt.plot(x,np.sin(x/i))
plt.show()
# #直方图
plt.figure(1,dpi=50) #创建图表1,dip表示图片精细度,dip越大文件越大,杂志要300以上
data=[1,1,1,2,2,2,3,3,4,5,5,6,4]
plt.hist(data) #只要传入数据,直方图就会统计数据出现的次数
plt.show()
#散点图
x=np.arange(1,10)
y=x
fig=plt.figure()
plt.scatter(x,y,c = 'r',marker ='o') # c='r'表示散点的颜色为红色 , marker表示指定三点多形状为圆形
plt.show()
星期五
from urllib import request
url='http://www.baidu.com'
response=request.urlopen(url,timeout=1)
print(response.read().decode('utf-8'))
get post 请求
from urllib import parse
from urllib import request
data=bytes(parse.urlencode({'word':'hello'}),encoding='utf8') #post post比get多这些部分,encode decode
print(data)
response=request.urlopen('http://httpbin.org/post',data=data) #post
print(response.read().decode('utf-8'))
response2=request.urlopen('http://httpbin.org/get', timeout=1) #get
print(response2.read())
response3=request.urlopen('http://httpbin.org/get', timeout=0.11)
try:
response3 = urllib.request.urlopen('http://httpbin.org/get', timeout=0.1)
except urllib.error.URLError as e:
if isinstance(e.reason,socket.timeout):
print('TIMEOUT')
#get 请求
import requests
url='http://httpbin.org/get'
data={'key':'value','abc':'xyz'}
#.get是使用get方式请求url,字典类型的data不用进行额外处理
response=requests.get(url,data)
print(response.text)
#post 请求
import requests
url='http://httpbin.org/post'
data={'key':'value','abc':'xyz'}
#.post 表示post方法
response=requests.post(url,data)
#返回类型为json格式
print(response.json())
结合正则表达式爬取图片链接