小白,分享记录学习新感悟
路飞的第一次作业写一个登录的程序,作业的升级需求中有个锁文件的需求,大致上如果用户数错了密码三次将用户写到黑名单上,下次登录锁定:
ok基本的要求写完,我们上代码
username=['seven','alex'] password=['123','123'] print('------welcome--------') count=0 #读入文件 user_lock=[] f=open('aaa_lock','r+') f.seek(0) #光标移动到开头 for line in f.readlines(): # user_lock.append(line.strip()) #开始写了 line.split x改为 line.strip user_lock=line.split() print(user_lock) _username = input('username:') while count<3: _password = input('password:') print(user_lock) print(_username) if _username in user_lock: print('用户被锁定') break else: if _username in username: if _username=='seven'and _password=='123123': print('-----登录成功-----') break if _username=='alex'and _password=='123123': print('-----登录成功!-----') break else: count += 1 count_remain=3-count print('密码错误请重新输入,剩余机会',str(count_remain),'次') if count==3: print('账号已被锁定') f=open('aaa_lock','a') f.write(_username+' ') f.close() else: print('用户不存在')
代码还不够完善,见谅
第一次调试的时候发现了问题,无论我怎么锁定用户,其用户判断代码总是出错误,
#读入文件 user_lock=[] f=open('aaa_lock','r+') f.seek(0) #光标移动到开头 for line in f.readlines(): user_lock.append(line.strip()) #开始写了 line.split x改为 line.strip print(user_lock) #判断是否锁定的程序 _password = input('password:') if _username in user_lock: print('用户被锁定') break
然后我在判断用户是否被锁定下面打印了两个变量:
_password = input('password:') print(user_lock) print(_username)
结果如下:
[['alex']]
'alex'
这显然是变量user_lock多了一个内列表,怎么回事呢?
我们看上面的文件操作
user_lock=[] f=open('aaa_lock','r+') f.seek(0) for line in f.readlines(): user_lock.append(line.split()) #开始写了 line.split x改为 line.strip print(user_lock)
问题出现在
user_lock.append(line.split())
下面举出一个实例说明 split()和strip()对于字符的处理不同
print('用户不存在') print('用户不存在'.split()) print('用户不存在'.strip())
用户不存在 ['用户不存在'] 用户不存在
我们看到split()是划分了到了一个小列表中去了,strip()是去掉了字符的左右空格,其还是一个字符串哦
之所以我会出现大列表套小列表的情况是因为我用了append(),它也是将一个个元素加入到一个新的当前列表中来,
下面我们改善一下。
#读入文件 user_lock=[] f=open('aaa_lock','r+') f.seek(0) for line in f.readlines(): user_lock=line.split() print(user_lock)
这次我们还用split(),但是把append去掉就可以啦!
也可以把split()替换成strip()--->user_lock=append(line.strip()
人生苦短,及时行乐!