要求:

1、三个页面:主页面(home)、书店(book)、金融页面(finance)
2、有两种登陆方式:主页面和书店页面使用京东账户登陆,金融页面使用微信账户登录
2、输入:1 ,进入主页面,以此类推;输入:2 ,进入书店页面;输入:3 ,进入金融页面
3、进入页面时检测有没有登陆,如果没有调用登陆接口,使用账号密码登陆,在任何界面,只需登陆一次即可
4、账户信息保存在文件里
5、在任意界面,输入:Q   ,退出程序

源代码:

login_status = False  # 登录状态

with open('账户信息', 'r') as f_read_self:
jingdong = f_read_self.readline().strip()
jingdong = eval(jingdong) # 内置函数eval()的作用是把一个字符串转换为字典
for n, m in jingdong.items():
JD_name = n
JD_pwd = m with open('账户信息(微信)', 'r') as f_read_wechat:
wechat = f_read_wechat.readline().strip()
wechat = eval(wechat)
for n, m in wechat.items():
wechat_name = n
wechat_pwd = m def login(auth_type="jingdong"): # 判断页面类型,默认进去是京东登录页面 def page(dis_play):
global login_status # 声明全局变量 def login_type():
global login_status # 声明全局变量
if not login_status: # 如果是未登陆状态
if auth_type == "jingdong":
username = input("Username:")
passwd = input("Passwd:")
if JD_name == username and JD_pwd == passwd:
print("welcome ....")
dis_play() # 登陆成功执行页面函数,显示内容
login_status = True # 改登陆状态为 True
else:
print("账户或密码错误,请重新输入")
elif auth_type == "wechat":
username = input("Username:")
passwd = input("Passwd:")
if wechat_name == username and wechat_pwd == passwd:
print("welcome ....")
dis_play() # 登陆成功执行页面函数,显示内容
login_status = True # 改登陆状态为 True
else:
print("账户或密码错误")
else:
print("已登陆")
return login_type # 返回login_type 的内存地址,用于指向函数对象
return page @login()
def home(): # 主页面
print("welcome to home page") @login()
def book(): # 书店
print("welcome to home page") @login(auth_type="wechat")
def finance(): # 金融
print("welcome to home page") while True:
user_input = input('请输入:\n1: [主页] \n2: [书店] \n3: [金融] \nQ:退出')
if user_input == '1':
home()
elif user_input == '2':
book()
elif user_input == '3':
finance()
elif user_input == 'Q':
break

注:文件里的账户信息格式如下,以字典的形式保存

账户信息: {'Tom':'qwe123',}

账户信息(微信): {'Toms':'qwe123',}

最新文章

  1. RegQueryValueEx正确使用方法
  2. 火狐浏览器如何js关闭窗口的几种解决方法
  3. Life of a triangle - NVIDIA's logical pipeline
  4. UICollectionViewCell选中高亮状态和UIButton的高亮状态和选中状态
  5. WPF控件
  6. winform让子窗体始终居于父窗体的中间
  7. apt系统中sources.list文件的解析
  8. <%# Convert.ToDecimal(Eval("IMLognum")).ToString("F0") %>
  9. leetcode 134. Gas Station ----- java
  10. (转) 技术揭秘:海康威视PASCAL VOC2012目标检测权威评测夺冠之道
  11. bzoj1053: [HAOI2007]反素数ant
  12. Android中的pix,sp,dp相关概念
  13. AutoAudit研究学习
  14. jquery 点击事件切换样式
  15. Java的两大数据类型
  16. SpringMVC之使用ResponseEntity,java接口返回HttpStatus
  17. BZOJ4864[BeiJing 2017 Wc]神秘物质——非旋转treap
  18. python 在列表,元组,字典变量前加*号
  19. hdu 1.3.2 Moving Tables
  20. numpy中的reshape中参数为-1

热门文章

  1. Unity插值函数Lerp()与增量时间Time.deltatime
  2. 回文树1960. Palindromes and Super Abilities
  3. UVA - 1349 D - Optimal Bus Route Design
  4. Vue不兼容IE8原因以及Object.defineProperty详解
  5. vue+typescript入门学习
  6. 谷歌编码风格内容,新建一个xml文件,复制进去就可以在eclipse里面用了,命名--eclipse-java-google-style.xml
  7. 转--oracle查看允许的最大连接数和当前连接数等信息
  8. BZOJ1132: [POI2008]Tro(叉积 排序)
  9. Android性能分析工具Profile GPU rendering详细介绍
  10. Android利用融云做异地登录提醒