我已开始为部分作业创建密码检查程序。它从用户处获取初始输入,将其存储在外部文件中,然后获取另一个输入,并检查两个输入是否匹配。如果它们匹配,它将返回打印的消息。但是,即使它们匹配,它也不会返回任何东西。
#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.")
答案 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]:
,则它应该可以工作