pthon入门之strip()和split()函数简单区分

Posted on 2018-04-13 16:51  豆豆2018  阅读(361)  评论(0编辑  收藏  举报

小白,分享记录学习新感悟

路飞的第一次作业写一个登录的程序,作业的升级需求中有个锁文件的需求,大致上如果用户数错了密码三次将用户写到黑名单上,下次登录锁定:

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+'\n')
                    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()

人生苦短,及时行乐!