第二天Python
这两天的感悟:没有输出和纠正的学习效果确实有差距,这两天主要学了:
- 各种数据类型(int、str、list、dict、set)及相关操作;
- 字符编码(主要记住一句话:Unicode作为中转,剩下的就是不断的进行decode和encode);
- 函数和文件的操作;
下面通过一些例子进行会议总结:
1、作业题目: 编写登陆认证程序:
基础需求: 让用户输入用户名密码 认证成功后显示欢迎信息 输错三次后退出程序 升级需求: 可以支持多个用户登录 (提示,通过列表存多个账户信息) 用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 # 创建两个空列表,分别用于储存登陆账号和已经锁定账号 5 user_list = [] 6 lock_user_list = [] 7 8 with open("file1","r") as f1: 9 for line in f1: 10 user_list.append(line.strip()) 11 12 with open("lock_user","r") as f2: 13 for item in f2: 14 lock_user_list.append(item.strip()) 15 16 # 判断用户输入是否为空: 17 def check_input(args): 18 while True: 19 temp_str = input("Please input your %s: "% (args) ) 20 if len(temp_str) == 0: 21 print("%s can not be none:"% (args) ) 22 continue 23 else: 24 return temp_str 25 26 # 三次机会 27 for i in range(3): 28 input_name = check_input("username") 29 30 if input_name in lock_user_list: 31 print("Your accout is locked...") 32 exit() 33 34 input_pwd = check_input("passwd") 35 36 str= input_name + ":" + input_pwd 37 38 if str in user_list: 39 print("Welcome:",input_name) 40 exit() 41 else: 42 print("Your account or passwd is wrong...Try again...") 43 44 # 超过三次的将被锁定 45 else: 46 with open("lock_user", "a+") as lockuser: 47 lockuser.write(input_name) 48 lockuser.write("\n") 49 print("You have try 3th times,your accout have been locked...")
2、文件查找替换:
1 import os 2 3 with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f: 4 for line in read_f: 5 line=line.replace('alex','SB') 6 write_f.write(line) 7 8 os.remove('a.txt') 9 os.rename('.a.txt.swap','a.txt')
3、今天三级菜单:
程序: 三级菜单
要求:
- 打印省、市、县三级菜单
- 可返回上一级
- 可随时退出程序
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 menu = { 5 '北京': { 6 '海淀': { 7 '五道口': { 8 'soho': {}, 9 '网易': {}, 10 'google': {} 11 }, 12 '中关村': { 13 '爱奇艺': {}, 14 '汽车之家': {}, 15 'youku': {}, 16 }, 17 '上地': { 18 '百度': {}, 19 }, 20 }, 21 '昌平': { 22 '沙河': { 23 '老男孩': {}, 24 '北航': {}, 25 }, 26 '天通苑': {}, 27 '回龙观': {}, 28 }, 29 '朝阳': {}, 30 '东城': {}, 31 }, 32 '上海': { 33 '闵行': { 34 "人民广场": { 35 '炸鸡店': {} 36 } 37 }, 38 '闸北':{ 39 '火车战': { 40 '携程': {} 41 } 42 }, 43 '浦东': {}, 44 }, 45 '山东': {}, 46 } 47 48 # 整个字典放入列表 49 layers = [menu, ] 50 51 while True: 52 # 判断当前列表长度,如果等于零,退出;以及下面如果选择q,也是退出程序 53 if len(layers) == 0: 54 break 55 56 current_layer=layers[-1] 57 58 for key in current_layer: 59 print(key) 60 61 choice=input('>>>: ').strip() 62 63 # 如果选择b,后退一层(其实就是删除最后那层字典) 64 if choice == 'b': 65 layers.pop(-1) 66 continue 67 68 if choice == 'q': 69 break 70 71 if choice not in current_layer: 72 continue 73 74 # 将当前层字典加入列表 75 layers.append(current_layer[choice])