1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 为了Python掉头发的一天

为了Python掉头发的一天

时间:2022-10-12 04:05:45

相关推荐

为了Python掉头发的一天

谢谢你的点击,接下来你将看到一个Python的初学者掉头发的过程。

题目来自于B站:Python资源库 视频BV号:BV1Vf4y1v78U

我们观察题目,发现注册的账号要能在下一次程序运行的时候使用(废话),所以账号的数据不能放在内存里,我们需要一个存放账号数据的文件。其次账号输错三次会被锁定,所以我们需要一个被锁定账号的文件(也可以放在账号文件里面,但是我代码都写完了,我是真的不想改了)。

🆗,题目看完了就要开始掉头发了,首先我们先浏览一下我的头发

import sys users_count: int = -1 #记录锁定账号 add_or_login = input("注册(0)或者登录(1)") #选择功能 f = open('D:/Pyhthon test/Project/admin.txt', 'a+') #以修改的方式打开账号文件 f2 = open('D:/Pyhthon test/Project/admin.txt', 'r') #以只读的方式打开账号文件 loc=open('D:/Pyhthon test/Project/locken.txt', 'a+') #以修改的方式打开锁定文件loc2 =open('D:/Pyhthon test/Project/locken.txt', 'r') #以只读的方式打开锁定文件users = ['' for x in range(0, 1000)] #用于记录密码错误的账号words = [0 for x in range(0, 1000)] #用于记录密码错误账号的次数if add_or_login == str(0):username = input("请输入你的用户名")Password = input("请输入你的密码")f.write(username + ',' + Password + '\n') else:for i in range(3):loc2.seek(0)f2.seek(0)dec = 0username = input("请输入你的用户名")Password = input("请输入你的密码")for line in loc2:str=line.strip()if username == str[:str.index('.')]:print('你号没了心里没点数?')sys.exit()for line2 in f2:str = line2.strip()str2 = ','user_name = str[:str.index(str2)]pass_word = str[str.index(str2)+1:]if user_name == username and Password == pass_word:dec = 1breakif dec == 1:print('登录成功')breakelse:print("蠢货,连自己的密码都能忘")for j in range(len(users)):if users[j] != username:users_count += 1users[users_count] = usernamewords[users_count] += 1else:words[j] += 1if words[j] == 3:loc.write(username + '.'+'\n')print('你号没了')break

首先我们的程序有注册和登录两块,所以应该先让用户选择

add_or_login = input("注册(0)或者登录(1)")

用户选择注册,那就太好了,太轻松了!

f = open('D:/Pyhthon test/Project/admin.txt', 'a+') #以修改的方式打开账号文件……#中间代码省略if add_or_login == str(0):username = input("请输入你的用户名")Password = input("请输入你的密码")f.write(username + ',' + Password + '\n')……#这也是

这里用到了一个 open() 函数。他的作用就是打开一个文件(只读/只写/读写/…)

具体使用方法查看超链接

当用户选择登录时,就要让用户输入账号密码了

else:for i in range(3):……username = input("请输入你的用户名")Password = input("请输入你的密码")

这里为什么要循环三次?因为当他们账号密码输入错误的时候让他们重新输入

输入完之后别忘了,账号有可能被锁定的哦所以我们要判断账号是否被锁定

import sys……for line in loc2:str=line.strip()if username == str[:str.index('.')]:print('你号没了心里没点数?')sys.exit()

如果账号被锁定了,程序就会发出温馨的提醒,然后结束程序。

这里循环的格式为 for line in loc2:

那么 loc2 是什么呢?

根据前面的定义我们知道 loc2 是打开文件所使用的变量

这句话的意思便是将 loc2 打开的文件里面的内容赋给 line

这样我们便可以对文件的数据进行操作,注意这里文件打开的方式需要是 ‘w’ ,这也是我为什么一个文件打开了两次的原因,如果按照我所给的链接里面的内容解释,按道理来讲 ‘a+’ 也应该是可以的,但是我在测试的过程中发现并不可以,Pycharm和运行结果皆未报错,但是循环一次也没进行。在没办法的情况下我选择了这种办法(鬼知道我测出这个问题掉了多少头发,循环体不运行的时候我人都是懵的)。如果有大佬看这篇博文麻烦帮我解答一下啦,小弟先谢过了。

这里面还有一个函数 strip() ,他的具体作用是去掉字符串两边的空格,这个空格也包含一些特殊符号,如:\n (其他的没记住😥😥😥)

提一嘴,如果要在txt里面修改信息,按我的代码需要保持这样的格式

还有for循环读取数据是以一行的方式读取的,所以两个账号就用两行来存放

如果没有被锁定,那我们就要开始账号密码的匹配了

for line2 in f2:str = line2.strip()str2 = ','user_name = str[:str.index(str2)]pass_word = str[str.index(str2)+1:]if user_name == username and Password == pass_word:dec = 1breakif dec == 1:print('登录成功')breakelse:print("蠢货,连自己的密码都能忘")

匹配成功就提示登录成功,匹配失败也会提醒

但这时候我们发现了一个问题,存储的账号密码都是在一个变量里,怎么分来来各自匹配呢? 这时候就要用到 [:] 了,这个符号就是用来切片的

什么是切片?

Look me

好,我们数据也匹配好了,接下来就是做锁定账号的部分了

话不多说,看代码

users_count: int = -1 #记录错误账号个数……loc =open('D:/Pyhthon test/Project/locken.txt', 'a+')loc2 =open('D:/Pyhthon test/Project/locken.txt', 'r')users = ['' for x in range(0, 1000)]#定义数组,并赋予初值''words = [0 for x in range(0, 1000)]#定义数组,并赋予初值0……else:for i in range(3):loc2.seek(0)f2.seek(0)…………………………………………for j in range(len(users)):if users[j] != username:users_count += 1users[users_count] = usernamewords[users_count] += 1else:words[j] += 1if words[j] == 3:loc.write(username + '.'+'\n')break

用数组记录每个账号的错误次数,错误三次我们便把它写到我们的小本本上,放进小黑屋。

seek() 必须要写哦 不然你密码第一次输错后面就都对不了啦

大功告成,任务完成。。。应该每一条代码都讲了吧。。代码还有很多不完善的地方,我也想到了但是我是真的不想改了

最后感谢以上提及的链接以及许多没放出来的博主分享的知识,有你们的帮助我才能完成这一个题目,谢谢。

接下来就是我诉苦的环节啦,没事的可以走了。

开始写串代码的时候,我Python什么都不会。我是在自学。B站视频我也只看到 for 语句 if 语句,这段代码中所有的函数都是我百度一点点学来的,什么 open() 静态数组赋初值 seek() for循环读文件 strip() [m:n] 甚至刚开始连 for if 语句体怎么结束都不知道(上课开小差🙃🙃) 这也是为什么我写了一天的原因

我说这个是因为这个题目真的让我成长了很多。我的心里话很想说出来,也别笑话我,我也知道自己菜。写完这个程序我才发现我是真的喜欢编程,哪怕挠破头。我喜欢编程和思考的过程,喜欢写完程序后的成就感。这种真的是游戏那些没法比的。这些话就当是讲给我自己听的吧。

愿自己不在颓废,奋斗!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。