day04

Posted zfzhp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day04相关的知识,希望对你有一定的参考价值。

1、上周回顾:
    1、 list
a = []
a.append(‘xx‘)
a.insert(0,‘sdf‘)
a.reomve(‘xxx‘)
a.pop(0)
a[0]
字典
dic = {}
dic[‘username‘] = ‘wufenghong‘
{‘username‘:‘wufenghong‘}
dic.pop(‘username‘)
dic.get(‘dfsdf‘) #None
dic[‘dfsdf‘] #报错
元组
t = (‘sdf‘,)
t.count()
t.index()
字符串方法
‘‘.strip() #
‘‘.split()
‘sdfsdf,sdfsd234,sdfs23‘.split(‘,‘)
‘‘.upper()
‘‘.lower()
‘sdf‘.count(‘ss‘)
names = [‘wfh‘,‘lyj‘]
‘,‘.join(names)
‘.jpg‘.endswith() #True
‘xxx‘.startswith()#
‘xx‘.isdigit()#判断是不是纯数字
文件读写
f = open(‘xx‘,‘‘)
#r r+
w w+
a a+
f.seek(0)
f.read() #读取文件里面所有的内容,返回的是字符串
f.readline()#只读一行的内容,返回的字符串
f.readlines()#读取文件里面所有的内容,返回的是一个list
#list里面每个元素是每行的数据
f.write(‘xxx‘)#只能写字符串
f.writelines()#写可迭代对象
f.tell() #获取当前文件指针的位置
f.close()
2、文件读写
# f = open(‘a.txt‘,‘w‘,encoding=‘utf-8‘)
# names = [‘a‘,‘b‘,‘c‘]
# #
# s=‘dingfei,123456‘
# # f.write(s)
# f.writelines(s)
# # for name in names:
# # f.write(name)
# for name in names:
# f.writelines(names)
# import time
# f = open(‘hahah‘,‘w‘)
# f.write(‘sdfsfsd‘)
# f.flush() #立即把缓冲区里面的内容写到磁盘里面

# with open(‘a.txt‘,‘w‘) as gy , open(‘b.txt‘) as gy2:
# gy.write(‘hhh‘)
# gy2.write(‘sdfs‘)

# rb
# wb
# ab
import requests
url = ‘http://www.nnzhp.cn/wp-content/uploads/2018/01/601a335c499837a995ae10867fc36101.png‘
img = requests.get(url).content

f = open(‘hhh.jpg‘,‘wb‘)# bytes ,以二进制模式打开
f.write(img)
3、修改文件
with open(‘geci‘,‘a+‘,encoding=‘utf-8‘) as f:
f.seek(0)
all = f.read()
new_all = all.replace(‘二‘,‘一‘)
f.seek(0)
f.truncate()
f.write(new_all)
f.flush()

import os
with open(‘geci‘,encoding=‘utf-8‘) as f,open(‘geci.gy‘,‘w‘,encoding=‘utf-8‘) as f2:
for line in f:
new_line = line.replace(‘一‘,‘二‘)
f2.write(new_line)

os.remove(‘geci‘)#删文件
os.rename(‘geci.gy‘,‘geci‘)#改名
4、监控文件
#1、如果同一个ip地址60s之内访问超过200次,那么就把ip加入黑名单
#需求分析:
#1、60秒读一次文件
#2、分割,取到第一个元素,ip地址
#3、把所有的ip加入到一个list里,如果ip次数超过200次,加入黑名单

import time
point = 0 #文件指针
while True:
ips = []#存放所有的ip地址
blk_set = set() #存放需要加入黑名单ip
with open(‘access.log‘,encoding=‘utf-8‘) as f:
f.seek(point)
for line in f:
ip = line.split()[0]
ips.append(ip)
#10.125.1.1
if ips.count(ip)>200:
blk_set.add(ip)
for ip in blk_set: #这里是因为防止ip重复加入黑名单,因为集合是去重的,所以里面没有重复的ip
#os.system(‘jiaurru %s‘%ip)
print(‘加入黑名单%s‘%ip)
point = f.tell()
time.sleep(30)
5、集合
# int string list tuple dict bool float set

#集合,天生去重
s = set() #空的集合
s2 = {‘1‘,‘2‘,‘3‘,‘4‘}
s3 = {‘1‘,‘2‘,‘5‘}
#集合是无序的,所以没有办法通过下标取值
s2.add(‘1‘) #添加值
s2.remove(‘1‘) #删除值
s2.pop()#随机删一个值

#print(s2)
# print(s3.intersection(s2)) #取交集
# print(s3 & s2)#取交集
#
# print(s3.union(s2))#取并集
# print(s3|s2)#取并集

# print(s2.difference(s3)) # 在s2中存在,在s3中没有的
# print(s2 - s3) #取差集

#交集
#并集
#差集
6、函数
# 函数
#函数 方法 功能
#说白了,函数就是把一堆代码组合到一起,变成一个整体。
#函数不调用不会被执行
#提高代码的复用性
#全局变量、局部变量

def hello(file_name,content=‘‘): #形参,形式参数
#函数里面的变量都是局部变量
f = open(file_name, ‘a+‘,encoding=‘utf-8‘)
if content:
f.write(content)
res = ‘‘
else:
f.seek(0)
res = f.read()
f.close()
return res


# users = hello(‘tlx.txt‘)
# print(users)
# ybq = hello(‘ybq.txt‘,‘1223332423‘)
# print(ybq)

#形参
#实参
#位置参数,必填参数
#默认值参数,不是必填的,

#返回值
#如果想获取到函数的结果,那么必须return
#如果函数没有写return的话,返回值是None,return不是必须写的,需要获取到函数的
#返回结果再写。
#return 立即结束函数
# a = 100 #全局变量
# def test():
# global a #声明全局变量
# a = 5
# print(‘里面的‘,a)
# test()
# print(‘外面的‘,a)


money = 500

def test(consume):
return money - consume

def test1(money):
return test(money) + money

money = test1(money)
print(money)
7、可变参数
def test(a,b,c,d,*args):#可变参数
print(‘a‘,a)
print(‘b‘,b)
# print(args[2])

# test(2,3,‘123‘,‘456‘,‘789‘,‘sfsdf‘)#位置调用

#关键字参数
def test2(a,**kwargs):
print(a)
print(kwargs)
# test2(a=1,name=‘hhh‘,sex=‘nv‘)

#1、写一个校验字符串是否为合法的小数
# 0.88
# -0.99
# s . 1
#1、小数点的个数,小数点的个数 1
#2、按照小数点分割

def check_float(s):
s = str(s)
if s.count(‘.‘) == 1:
s_list = s.split(‘.‘) #[1,5] [-s,55]
left = s_list[0] # -s [‘‘,‘s‘]
right = s_list[1]
if left.isdigit() and right.isdigit(): #正小数
return True
elif left.startswith(‘-‘) and left.count(‘-‘)==1:#负小数
if left.split(‘-‘)[-1].isdigit() and right.isdigit():
return True
return False
8、递归
# 递归 自己调用自己
count = 0
def test1():
# num = int(input(‘please enter a number:‘))
global count
count+=1
num = 8
if num % 2 == 0: # 判断输入的数字是不是偶数
pass
print(count)
return test1() # 如果不是偶数的话继续调用自己,输入值
print(test1()) # 调用test
# 用递归能实现的用循环都能实现,最好别用递归。
#递归最多能递归999次。
9、对比请求报文
#1、对比俩字典里面不一样的值
#需求分析:
#1、循环第一个字典,取到k,然后从第二个字典里面取值,然后判断两个值是否一样

d1 = {‘a‘:1,‘b‘:2,‘f‘:5}
d2 = {‘s‘:3,‘b‘:4}

def compare(d1,d2):
for k in d1:
v1 = d1.get(k)
v2 = d2.get(k)

if v2:
if v1 != v2:
print(‘value不一样的k是%s,v1是%s v2是%s ‘%(k,v1,v2))
else:
print(‘key不一样是%s‘%k)


compare(d1,d2)
compare(d2,d1)

# k : hhh value : xx
def print_var_type(var):
if type(var)==str:
print(‘字符串‘)
elif type(var)==dict:
print(‘字典‘)
elif type(var)==int:
print(‘整数‘)
elif type(var)==list:
print(‘列表‘)
elif type(var) == tuple:
print(‘元组‘)
elif type(var) == float:
print(‘小数类型‘)
elif type(var) == set:
print(‘集合‘)
10、作业需求分析
#需求分析:
#1、http://www.nnzhp.cn/archives/433 15题 选做
#判断两个字典里面 不一样的k和v d1,d2 ,只要判断d1里面
#循环d1的k,通过k去d2里面取值
#判断通过k取到的类型是什么,如果是字典的话,继续循环
#然后再判断k和v
#2、写一个添加商品的程序 必做
# 1、添加商品
#商品名称
#价格
#数量
#颜色
# 2、查看商品
# 3、删除商品
#输入商品名称
# import check
# print(check.check_float(‘1.5‘))
# 文件修改
#1、简单粗暴
#2、一行行的,2个文件
# 集合,天生去重
# 函数
#提高代码的复用性
#定义函数,
# 位置参数(必填参数),默认值参数(非必填的)
# 函数的返回值
# 局部变量和全局变量
# def s(a,b):pass
# s(1,2) s(b=1,a=1)
#模块
#导入模块的实战
#找的模块时候的 顺序

# names = {‘name‘:‘tlx‘}
# f = open(‘tlx.txt‘,)#字符串转字典
# # f.write(str(names))
# dic = eval(f.read())
# print(type(dic))
print(‘请输入你的选择:1、添加商品2、查看商品3、删除商品‘)

技术分享图片

 


























































































































































































































































































































以上是关于day04的主要内容,如果未能解决你的问题,请参考以下文章

day04

day04-函数

[code] PTA 胡凡算法笔记 DAY039

Day04.HelloWorld

Day04_Java basic

DAY 04 while和for循环