为了Python掉头发的一天

本文记录了一位Python新手在实现账号注册、登录及锁定功能过程中遇到的问题,涉及文件操作、数据验证、错误处理和切片等技巧。作者通过实际代码展示了如何使用open()函数、文件读写、条件判断和列表操作来管理用户数据。
摘要由CSDN通过智能技术生成

谢谢你的点击,接下来你将看到一个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 = 0
        username = 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 = 1
                break
        if dec == 1:
            print('登录成功')
            break
        else:
            print("蠢货,连自己的密码都能忘")
            for j in range(len(users)):
                if users[j] != username:
                    users_count += 1
                    users[users_count] = username
                    words[users_count] += 1
                else:
                    words[j] += 1
                    if 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 = 1
                break
        if dec == 1:
            print('登录成功')
            break
        else:
            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 += 1
                    users[users_count] = username
                    words[users_count] += 1
                else:
                    words[j] += 1
                    if words[j] == 3:
                        loc.write(username + '.'+'\n')
                    break
                    

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

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

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

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


接下来就是我诉苦的环节啦,没事的可以走了。
开始写串代码的时候,我Python什么都不会。我是在自学。B站视频我也只看到 for 语句 if 语句,这段代码中所有的函数都是我百度一点点学来的,什么 open() 静态数组赋初值 seek() for循环读文件 strip() [m:n] 甚至刚开始连 for if 语句体怎么结束都不知道(上课开小差🙃🙃) 这也是为什么我写了一天的原因
我说这个是因为这个题目真的让我成长了很多。我的心里话很想说出来,也别笑话我,我也知道自己菜。写完这个程序我才发现我是真的喜欢编程,哪怕挠破头。我喜欢编程和思考的过程,喜欢写完程序后的成就感。这种真的是游戏那些没法比的。这些话就当是讲给我自己听的吧。
愿自己不在颓废,奋斗!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值