Python练习题--持续更新
1、你是一个高级测试工程师,现在要做性能测试,需要你写一个函数,批量生成一些注册使用的账号。
产生的账号是以@163.com结尾,长度由用户输入,产生多少条也由用户输入,用户名不能重复,用户名必须由大写字母、小写字母、数字组成,结果如下图:
2、测试机器的磁盘太小,经常报警,要写一个清理日志的脚本,每次运行就把三天之前的日志删除,日志名的格式是xxx-20170623.log。
3、公司服务器,经常被别人攻击,要写个监控nginx日志的脚本,每分钟运行一次,如果这一分钟内同一个ip请求次数超过200次,加入黑名单,nginx日志每一行的格式如下:
46.161.9.44 - - [23/Jun/2017:03:17:37 +0800] "GET /bbs/forum.php?mod=forumdisplay&fid=2 HTTP/1.0" 200 48260 "http://aaaa.bbbbb.com/bbs/forum.php?mod=forumdisplay&fid=2" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "-" 46.161.9.44 - - [23/Jun/2017:03:17:39 +0800] "GET /bbs/forum.php?mod=forumdisplay&fid=2 HTTP/1.0" 200 46200 "http://aaaa.bbbbb.com/bbs/forum.php?mod=forumdisplay&fid=2" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "-"
def agent_log(): import time pin=0 while True: ips = [] fr = open('access.log') fr.seek(pin) for line in fr: ip = line.split()[0] ips.append(ip) new_ips = set(ips) for new_ip in new_ips: if ips.count(new_ip)>200: print('加入黑名单的ip是:%s'%new_ip) pin = fr.tell() #记录读完的指针位置 time.sleep(60)
4、额,来个小插曲,写程序求出1-100的累加和。1+2+3+4+5+.....+100。
5、不知不觉你已经写了很多python代码了,代码全部都放在e盘下面的my_code文件夹中,突然突发奇想,想统计了一下总共写了多少行代码,包括空行和注释,要把代码的行数、空行数、注释行数都统计出来。
6、有一个文件,里面有一些敏感词汇,如下,如果输入这些词,就用**代替,然后输出,例如输入今天没吃饭,碰到一个傻逼,原来那个sb是小明。输出今天没吃饭,碰到一个**,原来那个**是小明。
傻逼
傻b
煞笔
煞比
sb
傻B
shabi
with open('file.txt','a+',encoding='utf-8') as fr: with open('file_bak','w') as fw: fr.seek(0) for line in fr: new_line = line.replace('傻逼', '**').\ replace('sb', '**').replace('煞笔', '**').replace('煞比', '**').replace('傻B', '**') fw.write(new_line) print(new_line)
#1、读出来所有的敏感词 #2、循环这些敏感词,判断是不是在用户输入的字符串里面 #3、如果在的话就替换 fr = open('keywords.txt',encoding='utf-8') talk = input('请输入一句话:').strip() for line in fr: new_line = line.strip() if new_line in talk: talk = talk.replace(new_line,'**') print('河蟹过之后的是:%s'%talk)
7、写个简单的爬虫,把这个链接http://tieba.baidu.com/p/2166231880,里面所有的图片保存到本地。
8、有一个存着学生成绩的文件,里面存的是json串,json串读起来特别不直观,需要你写代码把它都写到excel中,并计算出总分和平均分,json格式如下
{ "1":["小花",99,100,98.5], "2":["小王",90,30.5,95], "3":["小明",67.5,49.6,88] }
写完之后excel格式如下:
9、列表、元组、集合有什么区别?
10、下面几段代码中哪个是错误的写法,为什么?
var = [1,2,3,4] var[1]=5 var1 = 'abc123' var1[0]='s' var2 = ('a','b','c','d') var2[-1]=2 var3={'a',3,'b','4'} var3[2]='c' var4={'name':'lily','sex':'nv'} print(var4['age'])
11、怎么通过不引入第三方变量的方式,交换两个变量的值?
a=1
b=2
12、下面的代码执行结果是什么,为什么?
li = [1,1,2,3,4,5,6,7,8,9] for i in li: if i%2!=0: li.remove(i) print(li)
13、下面这段代码的执行结果是什么?
money = 500 def test(consume): return money - consume def test1(money): return test(money)+money money = test1(money) print(money)
14、下面这段代码会打印什么,为什么?
def test(): global a a = 5 def test1(): c = a+5 return c res = test1() print(res)
15、写一个产生密码的程序,输入次数,输入多少次就产生多少条数据,要求密码必须包含大写字母、小写字母和数字,长度8位,不能重复
#需求分析 #1、循环,输入什么就循环多少次 #2、随机来取值,是从所有的大写字母、小写字母、数字里面来取 #3、 0123456789 a-z A-Z #4、长度8位,就是随机取8个 #5、不能重复,放到一个list里面,再判断,如果产生的数字不在这个list的话,就是不重复 #6、写到文件里面就行了 #来3个字符串 #012345679 从这个字符串里面取1位 包含数字 #a-z 再随机从这里取1位 包含小写字母了 #A-Z 再随机从这里取1位 包含大写字母了 #0123456789 a-z A-Z 再取5位,再和前面的3位加起来 8位 import random,string count = input('请输入你要产生多少条密码:').strip() all_passwds = [] for i in range(int(count)): num = random.sample(string.digits,1) #随机取1位数字 lower = random.sample(string.ascii_lowercase,1) #随机取1位小写字母 upper = random.sample(string.ascii_uppercase,1) #随机取1位大写字母 other = random.sample(string.ascii_letters+string.digits,5) #随机取5位 print(other) res = num+lower+upper+other #产生的8位密码 print(res) res = ''.join(res) if res not in all_passwds: #判断是否重复 all_passwds.append(res+'\n') with open('passwds.txt','a+') as fw: fw.seek(0) fw.writelines(all_passwds)
16、写一个注册程序,用字典保存
字典格式如下:
{
"niuhanyang":{"passwd":"123456","role":1"},
"jmy":{"passwd":"123456","role":2"},
"xiaohei":{"passwd":123456,"role":1}
}
role如果是1的话,代表管理员,如果是2代表普通用户,注册的用户都是普通用户
#需求分析: #1、先要从原来的数据库(咱们的user_info文件)里面,把已经存在的数据读出来 #2、让用户输入账号、密码、密码确认 #3、判断用户是否存在,如果不存在的话,才可以注册 #4、判断密码和确认密码输入一致的话,注册成功 #5、把新的用户写到这个userinfo字典中 #6、把新的userinfo替换旧的 #7、保存文件 fr = open('user_info.txt','a+') fr.seek(0) user_info = eval(fr.read()) #存的是从文件里面读出来的用户信息 user_num = len(user_info) #存的最开始的字典长度 for i in range(3): username = input('plz enter your username:').strip() password = input('plz enter your password:').strip() c_password = input('plz enter your password agen:').strip() if len(username)==0: print('用户名不能为空') elif username not in user_info: if password == c_password and len(password)>0: user_info[username]={'passwd':password,'role':'2'} print('注册成功!') break else: print('密码不能为空!两次输入密码必须一致!') else: print('你注册的用户已经存在!') if user_num == len(user_info): pass else: fr.seek(0) fr.truncate()#清空文件 fr.write(str(user_info)) fr.flush()#缓冲区的 fr.close()
17、注册和登录连上,能用你之前注册的用户来登录
#需求分析: #1、读原来的用户 #2、判断就行了 #3、说白了就是字典取值 fr = open('user_info.txt') user_info = eval(fr.read())#存的所有用户 for i in range(3): username = input('plz enter your username:').strip() password = input('plz enter your password:').strip() if len(username)<1 and len(password)<1: print('用户名/密码不能为空!') elif username in user_info:#存在 if user_info[username]['passwd'] == password: print('欢迎光临【%s】'%username) break else: print('密码错误!') else: print('用户不存在!')
18、
先让你登录
{
"nhy":{"passwd":123,'role':1,'moeny':10000,"carts":['mac']},
"nhy2":{"passwd":123,'role':2,'moeny':10000,"carts":[]}
}
#role是1的话,代表管理员,2代表普通用户
#普通用户:
#1、查看所有的商品
#2、输入商品名称购买商品,购买完了之后要加到自己的购物车里面,钱要减去
#3、可以查看自己购物车和余额,你已经买了xx东西,你还xxx钱
#4、退出
#管理员,1、添加商品,商品名称,商品价格
2、充值,输入用户名,给他加钱
3、退出