第一周python学习

星期一

 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())

结合正则表达式爬取图片链接

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值