zoukankan      html  css  js  c++  java
  • python博客园(模拟)

    模拟博客园登录:

    要求:

    1),启动程序,首页面应该显示成如下格式:
    欢迎来到博客园首页
    1:请登录
    2:请注册
    3:文章页面
    4:日记页面
    5:评论页面
    6:收藏页面
    7:注销
    8:退出程序
    2),用户输入选项,3~6选项必须在用户登录成功之后,才能访问成功。
    3),用户选择登录,用户名密码从register文件中读取验证,三次机会,没成功则结束整个程序运行,成功之后,
    可以选择访问3~6项,访问页面之前,必须要在log文件中打印日志,日志格式为-->用户:xx 在xx年xx月xx日
    执行了 %s函数,访问页面时,页面内容为:欢迎xx用户访问评论(文章,日记,收藏)页面
    4),如果用户没有注册,则可以选择注册,注册成功之后,可以自动完成登录,然后进入首页选择。
    5),注销用户是指注销用户的登录状态,使其在访问任何页面时,必须重新登录。
    6),退出程序为结束整个程序运行。
    import os
    import time
    
    login_status = {
        'name': None,
        'status': False
    }
    file_None = os.path.exists('test.txt')   # 判断用户文件是否存在
    if file_None:
        pass
    else:
        with open('test.txt', encoding='utf-8', mode='w') as file_Create:
            pass
    
    with open('test.txt', encoding='utf-8', mode='r+') as test:
        data = test.read()
        if len(data) == 0:  # 判断文件是否为空
            test.write('用户名 密码')
    
    
    def login(f):  # 登录加日志
        def inner(*args, **kwargs):
            num = 0
            while num < 3:
                if login_status['status']:  # 如果status=True则无需验证
                    with open('log.file', encoding='utf-8', mode='a') as log_file:
                        ret = f(*args, **kwargs)
                        log_file.write('
    {}:{},执行了{}函数'.format(login_status['name'], time.strftime("%Y-%m-%d"), f))
                        return ret  # 用来返回一个值退出
                else:
                    print('清先登录')
                    username = input('请输入用户名')
                    password = input('请输入密码')
                    with open('test.txt', encoding='utf-8') as f1:
                        for i in f1:
                            new_list = i.strip().split()  # 重文件中取出值以逗号分割 转换成list
                            if username == new_list[0] and password == new_list[1]:  # 判断用户以及密码
                                login_status['name'] = username
                                login_status['status'] = True  # 为True时由上调用函数
                                break
                        else:
                            num += 1
                            print('输入用户名或密码错误还有{}次机会'.format(3 - num))
                            continue
            else:
                print('输入次数太多了请先注册。。。')
    
        return inner
    
    
    def register():  # 注册
        flag = True
        while flag:
            register_name = input('输入你注册的用户名')
            register_pass = input('输入你注册的密码')
            with open('test.txt', encoding='utf-8', mode='r') as file1:
                for i in file1:
                    new_list2 = i.strip().split()
                    if register_name == new_list2[0]:  # 判断注册的用户是否存在
                        print('用户已存在')
                        break  # 如果存在退出
                else:
                    with open('test.txt', encoding='utf-8', mode='a') as file2:
                        file2.write('
    ' + register_name + ' ')  # 不存在则添加
                        file2.write(register_pass)
                        file2.close()
                        print('注册成功')
                        break
    
    
    @login
    def login_success():
        print('欢迎来到登录界面')
    
    
    @login
    def article():
        print('欢迎来到文章界面')
    
    
    @login
    def diary():
        print('欢迎来到日记界面')
    
    
    @login
    def comment():
        print('欢迎来到评论界面')
    
    
    @login
    def Collection():
        print('欢迎来到收藏界面')
    
    
    def Cancellation():
        print('成功注销')
        login_status['name'] = None
        login_status['status'] = False
    
    
    def byebye():
        print('成功退出')
        return exit()
    
    
    dic = {1: login_success,
           2: register,
           3: article,
           4: diary,
           5: comment,
           6: Collection,
           7: Cancellation,
           8: byebye}  # 把函数名定义成字典方便后面调用
    
    while True:
        str = '''##########欢迎来到博客园首页###########
             1: {}
             2: {}
             3: {}
             4: {}
             5: {}
             6: {}
             7: {}
             8: {}
                 '''.format('请登录', '请注册', '文章页面', '日记页面', '评论页面', '收藏页面', '注销', '退出程序')
        print(str)
        Choice = input('输入你的选择')
        if Choice == '1':
            pass
        if Choice.isdigit():
            if '0' < Choice < '9':
                dic[int(Choice)]()
            else:
                print('输入超出范围,重新输入')
        else:
            print('输入为非法字符')

    '''不断进取'''

    努力到无能为力,拼搏到感动自己。
  • 相关阅读:
    链表--判断一个链表是否为回文结构
    矩阵--“之”字形打印矩阵
    二叉树——平衡二叉树,二叉搜索树,完全二叉树
    链表--反转单向和双向链表
    codeforces 490C. Hacking Cypher 解题报告
    codeforces 490B.Queue 解题报告
    BestCoder19 1001.Alexandra and Prime Numbers(hdu 5108) 解题报告
    codeforces 488A. Giga Tower 解题报告
    codeforces 489C.Given Length and Sum of Digits... 解题报告
    codeforces 489B. BerSU Ball 解题报告
  • 原文地址:https://www.cnblogs.com/jin-yuana/p/9921673.html
Copyright © 2011-2022 走看看