一.判断练习
需求:90-100:优秀;80-90:良好;60-80:及格;0-60:不及格;小于或大于100:分数不合法
# score =float(input('请输入你的分数:') )#强制类型转换
# if score >= 90 and score <=100:
# print('优秀')
# elif score >= 80:
# print('良好')
# elif score >= 60:
# print('及格')
# elif score >= 0:
# print('不及格')
# else:
# print('分数不合法')
二、list练习
#登入
#欢迎 xxx登录,今天的是时间是xxx。
#登录密码错误3次,受限
#需求分析:1.输入账号,账号是否存在;2.通过账号获取下标,获得对应密码;3.输入密码,与下标密码比对是否一致;4.若是,输出欢迎登入,若不是,重新输入账号密码
# import datetime
# today = datetime.datetime.today()
# usernames = ["xiaohei","xiaobai","xiaoming"]
# passwords = ['123456','11111','1']
# for i in range(3):
# username = input("username")
# while usernames.count(username) == 0:
# # while username not in usernames: #这个也可以使用
# print("账号不存在,请重新输入")
# username = input("username")
# password = input("password")
# # if usernames.index(username) == passwords.index(password):#不能通过下标位置一致去判断,因为输入不是passwords内的元素,会报错
# if passwords[usernames.index(username)] == password:
# print("欢迎%s登入,今天的时间是count%s。"%(username,today))
# break
# else:
# print("密码错误,请重新输入")
# else:
# print("登入次数过多,最多登陆三次")
三、循环小练习
需求:猜0-100随机整数,总共猜七次机会,每次猜提示猜大了或猜小了,超过七次游戏结束
# import random
# a = random.randint(1,100)
# count = 0
# while count < 7:
# b = int(input("猜的数字:" ))
# while b < 1 or b > 100:
# print("请重新输入1-100的整数")
# b = int(input("被猜的数字:"))
# count = count + 1
# if b > a :
# print("猜大了")
# continue
# elif b < a:
# print("猜小了")
# else:
# print("恭喜你猜对了")
# else:
# print("游戏结束")
四、监控日志
需求:读取监控日志,对每分钟出现50次以上的ip地址进行提示:
自写:
# j = 0
# point = 0
# import time
# while True:
# a = []
# s = set()
# f = open('access.log', encoding='utf-8')
# for line in f:
# new_line = str(line.split()[0])
# a.append(new_line)
# point = f.tell()
# f.close()
# for i in a:
# if a.count(a[j]) > 50:
# s.add(a[j])
# j = j + 1
# new_list = list(s)
# for b in new_list:
# print("ip地址【%s】有问题,请注意!"%b)
# time.sleep(60)
注:时间久会报:list index out of range的错误
高手:
#1、监控,一直在运行,死循环,每分钟读一次文件
#2、第一次运行,读取文件所有的内容,从文件内容里面获取到ip地址,以及每个ip地址出现的次数
#4、记住当前指针的位置,下次从这个位置开始读
#5、判断每个ip地址出现的次数,如果大于50次,那么发短信报警
#6、等待60秒,继续重复上面的操作,读文件,获取内容
# import time
# point = 0 #最前面的位置
#
# while True:
# ip_list = {} # {ip:2 }
# f = open('access.log',encoding='utf-8')
# f.seek(point)#移动文件指针到哪个位置
# for line in f:
# ip = line.split()[0]
# if ip not in ip_list:
# ip_list[ip] = 1
# else:
# ip_list[ip] +=1
# point = f.tell() #当前文件指针的位置
# f.close()
# for ip in ip_list:
# count = ip_list.get(ip)
# if count>=50:
# print('ip地址【%s】有问题,请注意!'%ip)
# time.sleep(60)
五、注册登录
# usernames = ['xiaohei','xiaobai','xiaoming']
# passwords = ['123456','11111','1']
# 需要通过代码把上面的两个list转成下面的字典
# user_info = {'xiaohei':'123456','xiaobai':'11111','xiaoming':'1','lcl':'123'}
# 1、注册
# 1、输入账号和密码、确认密码
# 2、要校验账号是否存在(从字典里面判断),存在的话,不能注册
# 3、校验两次输入的密码是否一致,如果一致,加入到字典中,提示注册成功
# 4、最多3次
# 5、要校验输入是否为空,为空也算一次错误,全是空格也算空
# 2、登录
# 1、输入账号和密码
# 2、要校验账号是否存在(从字典里面判断),不存在的话,不能登录
# 3、账号和密码一致就可以登录
# 4、最多3次
# 5、要校验输入是否为空,为空也算一次错误,全是空格也算空
# info = {}
# usernames = ['xiaohei','xiaobai','xiaoming']
# passwords = ['123456','11111','1']
# for i in range(len(usernames)):
# info[usernames[i]] = passwords[i]
# #注册:
# # for i in range(3):
# # username = input("请输入账号:").strip()
# # while username in info:
# # print("账号已存在,请重新输入")
# # username = input("请输入账号:").strip()
# # if username =="":
# # print("账号不能为空")
# # else:
# # password = input("请输入密码:").strip()
# # repassword = input("请再次输入密码:").strip()
# # if password == "" or repassword =="" :
# # print("密码不能为空")
# # elif password == repassword:
# # print("注册成功")
# # break
# # else:
# # print("两次输入密码不正确")
# # else:
# # print("错误次数过多")
#
# # 登入
# for i in range(3):
# username = input('username:').strip()
# while username not in info:
# if username == "":
# print("账号不能为空")
# username = input("请输入账号:").strip()
# else:
# print("账号不存在,请重新输入")
# username = input("请输入账号:").strip()
# else:
# password = input("请输入密码:").strip()
# if password == "":
# print("密码不能为空")
# else:
# if password == info.get(username):
# print("登入成功")
# break
# else:
# print("密码错误,请重新输入")
# else:
# print("错误次数过多")
六、文件操作+排序
#info = {}
# f = open("数据.txt",encoding="utf-8")
# for line in f:
# if line.strip():
# name = line.split()[1]
# km = line.split()[2]
# km = int(km) if km.isdigit() else float(km) #简写
# info[name] = km
# l = list(info.items()) #二维数组
# for i in range(len(l)-1):
# for j in range(len(l)-1-i):
# if l[j][1] < l[j+1][1]: #二维数组取数值部分
# l[j],l[j+1] = l[j+1],l[j]
# f1 = open("排名.txt","w",encoding="utf-8")
# count = 1
# for key in l:
# name1 = key[0]
# km1 = key[1]
# msg = "%s,%s,%s \n"%(count,name1,km1)
# f1.write(msg)
# count += 1
# f.close()
# f1.close()
七、文件操作之数据库数据读取及写入
#1、第一步读文件,获取到文件里面的账号和密码
#2、把文件里面的账号和密码转成一个字典 {user:password}
#3、注册逻辑,注册成功存到字典里面,写文件里面
# users = {}
# f = open('users.txt',encoding='utf-8')
# for line in f:
# line = line.strip()
# if line:
# user = line.split(',')[0]
# password= line.split(',')[1]
# users[user] = password
#
# for i in range(3):
# username = input('username:').strip()
# if username=='':
# print('账号已存在')
#
# elif username in users:
# print('输入不能为空')
# else:
# password = input('password:').strip()
# cpassword = input('cpassword:').strip()
# if password=='' or cpassword=='':
# print('密码不为空')
# elif password != cpassword:
# print('两次输入密码不一致')
# else:
# users[username] = password
# print('注册成功')
# f = open('users.txt','a',encoding='utf-8') #追加
# f.write('%s,%s\n'%(username,password))
# f.close()
# break
# else:
# print('错误次数过多')