百万年薪python之路 -- 第二周 --模拟博客园系统

项目分析:
一.首先程序启动,显示下面内容供用户选择:

1.请登录
2.请注册
3.进入文章页面
4.进入评论页面
5.进入日记页面
6.进入收藏页面
7.注销账号
8.退出整个程序

二.必须实现的功能:
1.注册功能要求:
a.用户名、密码要记录在文件中。
b.用户名要求:只能含有字母或者数字不能含有特殊字符并且确保用户名唯一。
c.密码要求:长度要在6~14个字符之间。

2.登录功能要求:
a.用户输入用户名、密码进行登录验证。
b.登录成功之后,才可以访问3 - 7选项,如果没有登录或者登录不成功时访问3 - 7选项,不允许访问,跳转到登录。(修改全局变量)

c.超过三次登录还未成功,则退出整个程序。

3.进入文章页面要求:
提示欢迎xx进入文章页面。(xx是当前登录的用户名)

4.进入评论页面要求:
提示欢迎xx进入评论页面。

5.进入日记页面要求:
提示欢迎xx进入日记页面。

6.进入收藏页面要求:
提示欢迎xx进入收藏页面。

7.注销账号要求:
不是退出整个程序,而是将已经登录的状态变成未登录状态(访问3~7选项时需要重新登录)。

8.退出整个程序要求:
就是结束整个程序。

第一版

s = """
1.请注册
2.请登录
3.进入文章页面
4.进入评论页面
5.进入日记页面
6.进入收藏页面
7.注销账号
8.退出整个程序
"""

print(s)
flag = False
def login():
    """
    登录功能
    :return:如果是登录三次未成功,返回3,如果在三次之内成功,则返回登录的用户名
    """
    count = 0
    while count < 3:
        with open("userinfo_blogs.txt", "r", encoding="UTF-8") as f3:
            flage = False
            login_user = input("请输入登录用户名:").replace(" ", "")
            login_pwd = input("请输入登录密码:").replace(" ", "")
            for i in f3:
                if login_user.strip() == i.strip().split(":")[0] and login_pwd.strip() == i.strip().split(":")[1]:
                    # print(a,b)
                    flage = True
                    break
                # print(login_user,login_pwd)
                # print(i.split(":")[0],i.split(":")[1])
            if flage == False:
                # print(login_user)
                # print(login_pwd)
                print("登录失败!")
                count += 1
            else:
                print("登陆成功!")
                global flag
                flag = True
                return login_user
    return count

def register():
    """
    注册功能
    :return:注册用户名和密码
    """
    while 1:
        error_flag = True
        user = input("请输入注册用户名:")
        for i in user:
            if not (48 <= ord(i) <= 57 or 65 <= ord(i) <= 90 or 97 <= ord(i) <= 122):
                print("请输入正确的用户名!")
                error_flag = False
                break
        if error_flag:
            pwd = input("请输入注册密码:")
            if not(6 <= len(pwd) <= 14):
                print("密码要在6~14个字符之间")
            else:
                break
    return user,pwd
def article(ret_login):
    """
    文章页面
    :param ret_login: 登陆的用户名
    :return:
    """
    print(f"欢迎{ret_login}进入文章页面!")
def comment(ret_login):
    """
    评论页面
    :param ret_login: 登陆的用户名
    :return:
    """
    print(f"欢迎{ret_login}进入评论页面!")
def diary(ret_login):
    """
    日记页面
    :param ret_login: 登陆的用户名
    :return:
    """
    print(f"欢迎{ret_login}进入日记页面!")
def collection(ret_login):
    """
    收藏页面
    :param ret_login: 登陆的用户名
    :return:
    """
    print(f"欢迎{ret_login}进入收藏页面!")
def log_off():
    """
    注销登录功能,从登录状态变成未登录状态
    :return:
    """
    print("注销成功!")
    global flag
    flag = False
def exit():
    print("退出成功!")
    return "break"
while 1:
    num = input("请输入序号:")
    if num.isdecimal() and 1 <= int(num) <= 7:
        num = int(num)
        if num == 1:
            reg_user,reg_pwd = register()
            # print(a,b)
            with open("userinfo_blogs.txt", "r", encoding="UTF-8") as f:
                reg_flag = True
                for i in f:
                    i = i.split(":")
                    if reg_user == i[0]:
                        print("用户名已存在!")
                        reg_flag = False
                if reg_flag == True:
                    with open("userinfo_blogs.txt", "a", encoding="UTF-8") as f1:
                        f1.write(f"{reg_user}:{reg_pwd}\n")
                        print("注册成功!")
        elif num == 2:
            ret_login = login()
            if str(ret_login) == "3":
                print("您已经超过三次登录还未成功!")
                print("已退出程序!")
                break

        elif num == 3:
            if not flag:
                print("请先登录!")
                ret_login = login()
                if str(ret_login) == "3":
                    print("您已经超过三次登录还未成功!")
                    print("已退出程序!")
                    break
                article(ret_login)
            else:
                article(ret_login)
        elif num == 4:
            if not flag:
                print("请先登录!")
                ret_login = login()
                if str(ret_login) == "3":
                    print("您已经超过三次登录还未成功!")
                    print("已退出程序!")
                    break
                comment(ret_login)
            else:
                comment(ret_login)
        elif num == 5:
            if not flag:
                print("请先登录!")
                ret_login = login()
                if str(ret_login) == "3":
                    print("您已经超过三次登录还未成功!")
                    print("已退出程序!")
                    break
                diary(ret_login)
            else:
                diary(ret_login)
        elif num == 6:
            if not flag:
                print("请先登录!")
                ret_login = login()
                if str(ret_login) == "3":
                    print("您已经超过三次登录还未成功!")
                    print("已退出程序!")
                    break
                collection(ret_login)
            else:
                collection(ret_login)
        elif num == 7:
            if not flag:
                print("请先登录!")
                ret_login = login()
                if str(ret_login) == "3":
                    print("您已经超过三次登录还未成功!")
                    print("已退出程序!")
                    break
                log_off()
            else:
                log_off()
    elif num == '8':
        br_k = exit()
        try:
            eval(br_k)
        except SyntaxError:
            break
    else:
        print("请输入正确的序号!")

原文地址:https://www.cnblogs.com/zhangchaoyin/p/11221188.html

时间: 2024-07-29 14:29:26

百万年薪python之路 -- 第二周 --模拟博客园系统的相关文章

python简单模拟博客园系统

# 用代码模拟博客园系统## 项目分析:# 1.首先程序启动,显示下面内容供用户选择:## 1.请登录# 2.请注册# 3.进入文章页面# 4.进入评论页面# 5.进入日记页面# 6.进入收藏页面# 7.注销账号# 8.退出整个程序# 2.必须实现的功能:## 1.注册功能要求:# a.用户名.密码要记录在文件中.# b.用户名要求:不能有特殊字符并且确保用户名唯一.# c.密码要求:长度要在6~14个字符之间.## 2.登录功能要求:# a.用户输入用户名.密码进行登录验证.# b.登录成功之

模拟博客园系统

1. 启动程序, 显?菜单列表      菜单:      1. 登录      2. 注册      3. ?章      4. ?记      5. 退出 2. ?户输入选项, ?章和?记必须在登录后才可以进?操作.(装饰器) 3. ?户注册, 将?户名和密码写入到register?件中. 同时?成"article_?户名"?件?于 存储?户?章. 同时?成"diary_?户名" 来存储?户的?记内容. 4. ?户登录成功后, ?户名和密码从register?件

使用python selenium-webdriver模拟博客园登录

初学python,最近在抱着虫师的python+selenium自动化的书看,也尝试写个登录功能的验证2333 code:########################## #使用python selenium-webdriver #模拟博客园的登录流程 #首页--登录页面--跳转回首页--检查--退出登录恢复环境 ########################### from selenium import webdriver import time import sys url_cnbl

Python 使用selenium实现自动登录博客园

需要做的准备: 本文章是使用Chrome,所以需要Chormedriver.exe,具体的下载过程可以百度查到 Selenium是一种自动化测试工具,能模拟浏览器的行为,所以今天我就模拟一下浏览器登陆博客园的行为. 首先,分析问题,登陆博客园需要做些什么: 1.打开浏览器 2.输入博客园主页的网址 3.点击登陆按钮,等待页面跳转 4.输入账号密码,点击登陆 知道了步骤,接下来我们用代码来实现它:from selenium import webdriverimport time#创建登陆类 fro

前端练习 模拟博客园页面搭建

完成效果 blog.css /*这是一个博客园首页的样式表*/ /*通用样式*/ body{ margin: 0; background-color: #eeeeee; } a{ text-decoration: none; /*取消下划线*/ } ul{ list-style-type:none; padding-left: 0; } .clearfix:after{ /*防止父标签塌陷*/ content:''; display: block; clear:both; } .blog-lef

python网络爬虫(14)博客园用户信息爬取

说明 这里只放代码,方案技术没有更变 代码说明 需要cookies绕过登录,使用selenium在Firefox下模拟.需要安装geck...?插件,另外,数据存储在sqlite,需要安装. Spider.py import HtmlDownloader import HtmlParser import DataOutput import UrlManager import re from selenium import webdriver class Spider(object): def _

百万年薪python之路 -- 模块二

1. 序列化模块 什么是序列化呢? 序列化的本质就是将一种数据结构(如字典.列表)等转换成一个特殊的序列(字符串或者bytes)的过程就叫做序列化. 为什么要有序列化模块? 如果你写入文件中的字符串是一个序列化后的特殊的字符串,那么当你从文件中读取出来,是可以转化回原数据结构的. 作用及用途 序列化模块就是将一个常见的数据结构转化成一个特殊的序列,并且这个特殊的序列还可以反解回去.它的主要用途:文件读写数据,网络传输数据. 1.1 json序列化(很重要) 不同语言都遵循json数据转化格式,即

百万年薪python之路 -- 模块

1.自定义模块 1.1.1 模块是什么? 模块就是文件,存放一堆常用的函数和变量的程序文件(.py)文件 1.1.2 为什么要使用模块? 1.避免写重复代码,从文件级别组织程序,更方便管理 2.可以多次利用,我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用 3.拿来主义,提升开发效率 同样的原理,我们也可以下载别人写好的模块然后导入到自己的项目中使用,这种拿来主义,可以极大地提升我们的开发效率,避免重复造轮子. 1.1.3 模块的分类 Pyt

百万年薪python之路 -- 装饰器

装饰器 1.1 开放封闭原则 开放封闭原则具体定义是这样: 1.对扩展是开放的 我们说,任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代码扩展.添加新功能. 2.对修改是封闭的 因为我们写的一个函数,很有可能已经交付给其他人使用了,如果这个时候我们对函数内部进行修改,或者修改了函数的调用方式,很有可能影响其他已经在使用该函数的用户. 定义:在不改变原被装饰的函数的源代码以及调用方式下,为其添加额外的功能. 实现真正的开放封闭原则:装饰器. 运用闭