今日内容

'''
用代码模拟博客园系统。 项目分析:
一、首先程序启动,页面显示下面内容供用户选择: 1.请登录
2.请注册
3.进入文章页面
4.进入评论页面
5.进入日记页面
6.进入收藏页面
7.注销账号
8.退出整个程序 二、必须实现的功能: 1.注册功能要求:
a.用户名、密码要记录在文件中
b.用户名要求:只能含有字母或者数字,不能含有特殊字符并且确保用户名唯一。
c.密码要求:长度要在6~16个字符之间。
d.超过三次登录还未成功,则退出整个程序。
2.登录功能要求:
a.用户输入用户名,密码进行登录验证。
b.登录成功后,才可以访问3~7选项,如果没有登录或登陆不成功时访问3~7选项,不允许访问,让其先登录(装饰器)。
3.进入文章页面要求:
a.提示欢迎xx进入文章页面。
b.此时用户可以选择:直接写入内容,还是导入md文件。
1.如果选择直接写内容:直接写文件名/文件内容....然后创建一个文章。
2.如果选择导入md文件:让用户输入已经准备好的md文件的文件路径(相对路径即可,比如函数的进阶.md),然后将md文件全部内容写入文章。
4.进入评论页面要求:
提示欢迎xx进入评论页面。
5.进入日记页面要求:
提示欢迎xx进入日记页面。
6.进入收藏页面要求:
提示欢迎xx进入收藏页面。
7.注销账号要求:
不要退出整个程序,而是将已登录的状态变成未登录的状态(访问3~7选项需要重新登录)。
8.退出整个程序要求:
结束整个程序。
'''
status_dict={
'username':None,
'status':False,
} def get_user_pwd():
user_dict={}
with open('register',encoding='utf-8')as f:
for line in f:
line_list=line.strip().split('|')
user_dict[line_list[0].strip()]=line_list[1].strip()
return user_dict def login():#登录认证
u_dict=get_user_pwd()
count=1
while count<4:
username=input('请输入用户名:').strip()
password = input('请输入密码').strip()
if username in u_dict and password == u_dict[username]:
print('登录成功')
status_dict['username'] = username
status_dict['status'] = True
return True
else:
print('用户名或密码错误,重新登录')
count += 1 def register():
pass def auth(f):
'''
你的装饰器完成,访问被装饰函数之前,写一个三次登录认证的函数
登录成功,让其访问被装饰的函数。登录没有成功,不让访问。
:param f:
:return:
'''
def inner(*args,**kwargs):
'''访问函数之前的操作,功能'''
if status_dict['status']:
ret=f(*args,**kwargs)
'''访问函数之后的操作,功能'''
return ret
else:
if login():
ret=f(*args,**kwargs)
return ret
return inner() #@auth #下面四个函数访问前,登录成功可以,没成功不能看。
def artical():
print('欢迎访问文章页面')
#@auth
def comment():
print('欢迎访问评论页面')
#@auth
def dairy():
print('欢迎访问日记页面')
#@auth
def collections():
print('欢迎访问收藏页面')
def login_out():
pass
def quit():
pass
# 这样可以,但是不好
# while 1:
# print('''
# 1.请登录
# 2.请注册
# 3.进入文章页面
# 4.进入评论页面
# 5.进入日记页面
# 6.进入收藏页面
# 7.注销账号
# 8.退出整个程序
# ''')
# num=input('请输入序号:').strip()
# if num=='1':
# login()
# elif num=='2'…… dic={
1:login,
2:register,
3:artical,
4:comment,
5:dairy,
6:collections,
7:login_out,
8:quit
}
while 1:
print('''
1.请登录
2.请注册
3.进入文章页面
4.进入评论页面
5.进入日记页面
6.进入收藏页面
7.注销账号
8.退出整个程序
''')
num=input('请输入选项:').strip()
num=int(num)
dic[num]() # artical() #inner()
# comment() #inner()
# dairy() #inner()
# collections() #inner()
  • 软件开发规范

    • 为什么要有软件开发规范?

      app、软件不可能都写在一个文件中,效率太低且不规范

代码总行数2085+203=2288行

python18day的更多相关文章

随机推荐

  1. 【LeetCode】123. Best Time to Buy and Sell Stock III 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  2. 【LeetCode】730. Count Different Palindromic Subsequences 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 记忆化搜索 动态规划 日期 题目地址:https:/ ...

  3. 【LeetCode】167. Two Sum II - Input array is sorted 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 题目地址:ht ...

  4. 【LeetCode】477. Total Hamming Distance 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 位运算 日期 题目地址:https://leetco ...

  5. 【LeetCode】116. 填充每个节点的下一个右侧节点指针 Populating Next Right Pointers in Each Node 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 日期 题目地址:https://leetcode ...

  6. NetCore实现全局模型绑定异常信息统一处理

    本文主要讲解NetCore如何使用中间件捕获模型绑定的异常信息 场景 在.NET Core 中请求中,如果参数的类型错误,我们在控制器的定义的方法是不会执行的,当我们需要捕获模型绑定的异常信息时,可以 ...

  7. SpringCloud创建Eureka模块

    1.说明 本文详细介绍Spring Cloud创建Eureka模块的方法, 基于已经创建好的Spring Cloud父工程, 请参考SpringCloud创建项目父工程, 在里面创建Eureka模块, ...

  8. Springboot+Javamail实现邮件发送

    Springboot+Javamail实现邮件发送 使用的是spring-context-support-5.2.6.RELEASE.jar里的javamail javamail 官方文档:javam ...

  9. Pytest_跳过用例的执行(7)

    pytest跳过用例执行的用法与unittest跳过用例大致相同. pytest跳过用例的方法如下: pytest.mark.skip(reason):无条件用例.reason是跳过原因,下同. py ...

  10. git branch --set-upstream-to 本地关联远程分支

    最近使用git pull的时候多次碰见下面的情况: There is no tracking information for the current branch. Please specify wh ...