Python密码检查程序-与.pop()值的比较不起作用

时间:2018-09-09 15:00:11

标签: python list

我已开始为部分作业创建密码检查程序。它从用户处获取初始输入,将其存储在外部文件中,然后获取另一个输入,并检查两个输入是否匹配。如果它们匹配,它将返回打印的消息。但是,即使它们匹配,它也不会返回任何东西。

#storing passwords in an external file
file = open("passwordlearn.csv", "a+")
password = input("Please enter a password: ")
file.write(password + "\n")
file.close()

#opening a connection to password.csv
temp = open("passwordlearn.csv", "r")
password = temp.read()
temp.close()

#splitting the string up
eachPassword = password.split ("\n")

#creating a list
newlistthree=[]
for eachItem in eachPassword:
    record = eachItem.split(",")
    newlistthree.append(record)
print(newlistthree)

#creating a list with the blank deleted
newlistfour=[]
for eachItem in eachPassword:
    record = eachItem.split(",")
    newlistfour.append(record)
del newlistfour[-1]
print(newlistfour)
firstpassword = newlistfour.pop()
print(firstpassword)

#authentication
passwordcheck = input("Please type your password again: ")
if passwordcheck == firstpassword:
    print("Passwords Match. Please login.")

2 个答案:

答案 0 :(得分:1)

您的问题是此行record = eachItem.split(","),当您对字符串进行拆分时,返回的对象是列表而不是字符串。最后,您要比较的是带有不同列表的字符串。

尽管我不清楚您为什么尝试拆分密码,但可以跳过以下拆分或仅将密码字符串添加到“ newlistthree”中,这样​​才能使代码正常工作:

newlistthree.append(record[0])

答案 1 :(得分:0)

我测试了您的代码,发现firstpassword是一个包含一个元素的列表,而passwordcheck只是一个字符串。

因此,在if passwordcheck == firstpassword:中,它最终将比较'example_password'['example_password'],因此它将始终为假。

您可能想重新考虑如何清理和存储密码,以使newlistfour不是一个元素列表的列表,但是对于您的代码,如果将其更改为if passwordcheck == firstpassword[0]:,则它应该可以工作