#coding = utf-8

importdatetime

today=datetime.date.today() #读取当前日期

password = {} #创建字典

passwd = open('user_file.txt','r') #以只读的模式打开,确保文件存在,否则报错

for f in passwd.readlines(): #读取文件的全部内容

u = f.split('\n')[0] #以回车为分割取出用户名

p = f.split('\n')[0] #以回车为分割取出密码

m = p.split('\n')[0] #以回车为分割符,取出密码的完整内容

password[p] =m#print (password)

passwd.close()

lock={}

user={}

lock_info= open('lock_file.txt','r') #以只读的模式打开

user_info = open('user_file.txt','r') #以只读的模式打开

for i inlock_info.readlines():

k1= i.split('\n')[0]

lock[k1]=k1for u inuser_info.readlines():

n=u.split('\n')[0]

user[n]=n#print (lock)#print (user)

count =0

lock_info.close()

user_info.close()

username= input("请输入您的用户名:")if username inlock.keys():print ("该用户已被锁定,无法正常登录!")elif username inuser.keys():

pwd= input("请输入您的密码:")if pwd ==password[username]:

welcome="""-----------Welcome info----------

登录成功!

欢迎您:%s,今天是:%s.

---------------End--------------"""%(username,today)print(welcome)else:while count < 2:

pwd= input("密码错误,请重新输入:")if pwd ==password[username]:

welcome="""-----------Welcome info----------

登录成功!

欢迎您:%s,今天是:%s.

---------------End--------------"""%(username,today)print(welcome)breakcount+=1

else:

lock_user= open("lock_file.txt",'a') #将被锁定的用户名追加写入lock_file.txt文件中

lock_user.write(username+'\n')

lock_user.close()print ("您的密码输入错误超过三次,用户被锁定!")else:print("无效的用户名,系统退出!")

exit()

导师批注:

1、写代码一定要多注意代码的书写规范,多参阅pep8规范文档;

2、对用户输入的数据,应对首尾空格进行处理;

3、文件操作时,应指定字符编码格式(不同的操作系统,会出现字符编码错误);

在做这份作业时,也是刚学的python编程,看老师提供的视频教程,python编程从入门到实践这本书,在遇到老师所讲的或者自己在书上看到的不太明白的知识点时,就自己到网上诸如博客园之类的去寻找帮助,看看别人对于一个方法是怎么去使用,或者为了实现一个功能是用哪个方法比较好,诸如该如何去实现文件的读写操作,这是在视频教程里还没讲到的内容,但作业里需要用到,那这就要求我必须提前去学习文件的读写操作是如何实现的。

在做这份作业时我的重点也全都是放在了该如何去做出作业所要求实现的功能,对于其它如导师所提到的pep8编码规范则是从未听说也从未看到过,在看到导师批注后去认真的把这个pep8编码规范看了一遍,原来并不是说我们写完代码后不报错、能正常运行、可以实现所需要的功能就OK了,原来代码编写的背后还有这么个规范去要求我们,诸如:

空格的使用

总体原则,避免不必要的空格。

1 各种右括号前不要加空格。

2 逗号、冒号、分号前不要加空格。

3 函数的左括号前不要加空格。如Func(1)。

4 序列的左括号前不要加空格。如list[2]。

5 操作符左右各加一个空格,不要为了对齐增加空格。

6 函数默认参数使用的赋值符左右省略空格。

7 不要将多句语句写在同一行,尽管使用‘;’允许。

8 if/for/while语句中,即使执行语句只有一句,也必须另起一行。

注释

总体原则,错误的注释不如没有注释。所以当一段代码发生变化时,第一件事就是要修改注释!

注释必须使用英文,最好是完整的句子,首字母大写,句后要有结束符,结束符后跟两个空格,开始下一句。如果是短语,可以省略结束符。

1 块注释,在一段代码前增加的注释。在‘#’后加一空格。

关于文件的读写操作:

使用python来读写文件是非常简单的操作,我们使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以对文件进行各种各样的操作了,根据打开方式的不同,能够执行的操作也会有相应的差异。

打开文件的方式有:r , w , a , r+ , w+ , a+ , rb , wb , ab , r+b , w+b , a+b等,默认使用的是r(只读)模式。

1、只读操作(r、rb)

pd = open('user_file.txt', mode='r', encoding='utf-8')     #  以只读的模式打开,确保文件存在,否则报错

for f in pd.readlines():       # 读取文件的全部内容

u = f.split('\n')[0]        # 以回车为分割取出用户名

p = f.split('\n')[0]        # 以回车为分割取出密码

m = p.split('\n')[0]     # 以回车为分割符,取出密码的完整内容

password[p] = m

pd.close()

需要注意的是:文件操作时,应指定字符编码格式(不同的操作系统,会出现字符编码错误),encoding表示编码集,根据文件的实际保存编码进行获取数据,对于我们而言,更多的是utf-8。

rb读取出来的数据是bytes类型,在rb模式下,不能选择encoding字符集。rb更多的是使用在读取非文本文件的时候,诸如读取MP3、图像‘视频等信息的时候就需要用到rb,因为这种数据是没有办法直接显示出来的,在实现文件的上传下载时也会用到rb。

f.readline() 是一行一行的读取数据,但是在读取出来的数据结尾处会有一个\n,这时就需要我们调用strip()方法将其去掉。

循环读取数据这种方式是很好的,每次只读取出一行内容,从而就避免了产生内存溢出的问题。

注意:读取完的文件句柄一定要关掉,使用pd.close()。

2、写模式(w、wb、a)

写的时候要注意,如果没有文件,则会自动创建文件,如果文件已经存在,则会将原文件中的内容全部删除后再将新内容写入到文件中:

lock_user = open("lock_file.txt", mode='a', encoding='utf-8')   #  将被锁定的用户名追加写入lock_file.txt文件中

lock_user.write(username+'\n')

lock_user.close()

print("您的密码输入错误超过三次,用户被锁定!")

wb模式下,可以不指定打开文件的编码集,但是在写文件的时候必须将字符串转化成utf-8的bytes数据。

a 追加模式下, 写入的内容会加在结尾。

修改完后代码如下:

1 #coding = utf-8

2 importdatetime3 importos4 today = datetime.date.today() #读取当前日期

5 password = {} #创建字典

6 pd = open('user_file.txt', mode='r', encoding='utf-8') #以只读的模式打开,确保文件存在,否则报错

7 for f in pd.readlines(): #读取文件的全部内容

8 u = f.split('\n')[0] #以回车为分割取出用户名

9 p = f.split('\n')[0] #以回车为分割取出密码

10 m = p.split('\n')[0] #以回车为分割符,取出密码的完整内容

11 password[p] =m12 pd.close()13 lock ={}14 user ={}15 lock_info = open('lock_file.txt', mode='r', encoding='utf-8') #以只读的模式打开

16 user_info = open('user_file.txt', mode='r', encoding='utf-8') #以只读的模式打开

17 for i inlock_info.readlines():18 k1 = i.split('\n')[0]19 lock[k1] =k120 for u inuser_info.readlines():21 n = u.split('\n')[0]22 user[n] =n23 count =024 lock_info.close()25 user_info.close()26 username = input("请输入您的用户名:").strip()27 if username inlock.keys():28 print("该用户已被锁定,无法正常登录!")29 elif username inuser.keys():30 pwd = input("请输入您的密码:").strip()31 if pwd ==password[username]:32 welcome = """

33 -----------Welcome info----------34 登录成功!35 欢迎您:%s,今天是:%s.36 ---------------End--------------37 """ %(username, today)38 print(welcome)39 else:40 while count < 2:41 pwd = input("密码错误,请重新输入:").strip()42 if pwd ==password[username]:43 welcome = """

44 -----------Welcome info----------45 登录成功!46 欢迎您:%s,今天是:%s.47 ---------------End--------------48 """ %(username, today)49 print(welcome)50 break

51 count += 1

52 else:53 lock_user = open("lock_file.txt", mode='a', encoding='utf-8') #将被锁定的用户名追加写入lock_file.txt文件中

54 lock_user.write(username+'\n')55 lock_user.close()56 print("您的密码输入错误超过三次,用户被锁定!")57 else:58 print("无效的用户名,系统退出!")59 exit()

路飞学城python电子书闲鱼_路飞学城-python开发集训-第一章之用户登录作业相关推荐

  1. 路飞学城python电子书闲鱼_路飞学城Python-Day21(practise)

    '''有bug未及时调整 登出函数有问题''' importjsonimporttimedefinit_info(): user_if={"egon":{"passwor ...

  2. 路飞学城python电子书_路飞学城-Python开发集训-第一章

    路飞学城-Python开发集训-第一章 1.本章学习心得.体会 我: 间接性勤奋. 我: 学习方法论:输入--输出---纠正 我: 对对对 走出舒适区, 换圈子, 转思路,投资自我加筹码. 我: 圈子 ...

  3. python绘制路飞_路飞学城-Python开发集训-第一章

    一.学习体会 学习本章的最大体会是终于搞明白,高级语言中编译型与解释型的区别和含义,因为之前看过一些视频,对基础知识还是比较熟悉,所以学起来不费什么力,不过金角大王说越往下内容越多,一定要加油学完8章 ...

  4. 开店必看!带你用Python分析闲鱼的爆款商品

    开店必看!带你用Python分析闲鱼的爆款商品 分享 Python 自动化及爬虫.数据分析实战干货,欢迎关注. 1 目 标 场 景 经常看到有朋友在闲鱼卖些小东西又或是自己擅长的一些技能,都能为他们带 ...

  5. 不完全性定理 元数学和自然数_开读哥德尔原著第一章——哥德尔读后之十

    不完全性定理 元数学和自然数_开读哥德尔原著第一章--哥德尔读后之十 把R.B.B的导论弄完,终于轮到读哥德尔原著的英译文本了,今天开读原著的第一章.R.B.B的导言给了人很多哥德尔定理的背景知识,但 ...

  6. python写闲鱼脚本_自动化篇 | 你想要的闲鱼日常操作,Python 给你实现了

    1 目 标 场 景 前篇文章讲了如何在 iOS 端使用 Airtest 实现自动化的操作,本篇将继续带大家做 iOS 端的自动化项目. 如果你经常用闲鱼,应该每天都要进行下面操作,App 签到.鱼塘签 ...

  7. python写闲鱼脚本_你想要的闲鱼日常操作,Python 给你实现了

    1 目 标 场 景 前篇文章讲了如何在 iOS 端使用 Airtest 实现自动化的操作,本篇将继续带大家做 iOS 端的自动化项目. 如果你经常用闲鱼,应该每天都要进行下面操作,App 签到.鱼塘签 ...

  8. python写闲鱼脚本_自动化篇 - 躺着收钱!闲鱼自动发货机器人来啦~

    1 目 标 场 景 闲鱼上,很多卖家选择在平台上卖虚拟商品,大部分虚拟商品的交易方式都是通过网盘链接来完成交易. 在很多时候,商品被买家拍下并付款后,都需要一段时间的等待,一直到卖家看到消息后才能完成 ...

  9. 路飞学城-Python爬虫集训-第一章

    自学Python的时候看了不少老男孩的视频,一直欠老男孩一个会员,现在99元爬虫集训果断参与. 非常喜欢Alex和武Sir的课,技术能力超强,当然讲着讲着就开起车来也说明他俩开车的技术也超级强! 以上 ...

  10. python 使用socks 爬虫_小白学 Python 爬虫(17):Requests 基础使用

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

最新文章

  1. 解决FileUpload控件上传大文件被拒问题时
  2. python提取txt中指定内容_提取视频中的音频,Python三行程序搞定!
  3. 蚂蚁区块链正式升级为蚂蚁链:首次公布“日活”超1亿
  4. 一些基本的数学概念,LDA的表述
  5. java 485通讯_JAVA开发工程师 | 广州市三地信息技术有限公司
  6. 如何免费获取基于公网 IP 的 SSL 证书 (无需域名)
  7. win11使用win10右键菜单的四种办法
  8. c++调用Python [boost::python]
  9. Android下红包雨的实现
  10. WPS文件批量加解密
  11. 点击链接自动跳出微信在手机自带的浏览器中下载APK文件
  12. 潦草手写体也能轻松识别,快速提取文字不用愁
  13. AGM AG16K FPGA介绍
  14. 计量经济学:异方差性
  15. 云米、品钛、趣店等中概股领跌,多家公司股价创历史新低
  16. 快鲸智慧社区平台:快速提升“智慧社区”服务水平
  17. 《南朝凶猛》 轩辕鸿鸣
  18. C++ 如何将一个大的整数 拆分0到9单个数字
  19. LoRa PHY CSS解调
  20. 内网穿透工具天联使用介绍

热门文章

  1. 关于gite代码提交不显示绿格子的处理心得git
  2. 《深入理解Java虚拟机》笔记04之垃圾收集算法
  3. 知识树 = 系统思维 + 外接大脑
  4. SEO精髓:四处一词
  5. 计算机无法识别机械硬盘,机械硬盘无法识别【面对办法】
  6. linux下一个能显示IP来源的小工具-nali
  7. Python爬虫爬取豆瓣TOP250
  8. autocad ios 虚线_autocad中画箭头、虚线绘制方法介绍
  9. 忘记Mac开机密码处理方法
  10. MacBook Pro 开机密码忘记的解决办法