Python练习题--持续更新

1、你是一个高级测试工程师,现在要做性能测试,需要你写一个函数,批量生成一些注册使用的账号。

产生的账号是以@163.com结尾,长度由用户输入,产生多少条也由用户输入,用户名不能重复,用户名必须由大写字母、小写字母、数字组成,结果如下图:


 

2、测试机器的磁盘太小,经常报警,要写一个清理日志的脚本,每次运行就把三天之前的日志删除,日志名的格式是xxx-20170623.log。

 

3、公司服务器,经常被别人攻击,要写个监控nginx日志的脚本,每分钟运行一次,如果这一分钟内同一个ip请求次数超过200次,加入黑名单,nginx日志每一行的格式如下:

 

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、退出

 

posted @ 2017-10-15 09:42  尘世风  阅读(752)  评论(0编辑  收藏  举报
*/