这是我的代码 -
#Using pickle
#using pickle with dictionaries
import pickle
checkDeets = True
passWrong = "You have entered incorrect details, please try again"
x = input("want to enter data? - ")
if x == "yes":
file = open("data.pickle" , "wb")
signUpU = input("enter user - ") #Later used as sign in details
signUpP = input("enter pass - ") # as above
ID_in = {signUpU : signUpP} #Is meant to store the two user details
pickle.dump(ID_in, file)
file.close()
y = input("want to log in? ")
if y == "yes":
file = open("data.pickle" , "rb")
ID_out = pickle.load(file)
while checkDeets == True:
signInU = input("enter username - ")
signInP = input("enter pass - ")
if signInU in ID_out:
if signInP == ID_out[signInU][0]:
print("Login accepted")
checkDeets = False
else:
print("1")
print(passWrong)
else:
print("2")
print(passWrong)
这是我的输入 -
want to enter data? - yes
enter user - user123
enter pass - pass123
want to log in? no
>>> x = open("data.pickle" , "rb")
>>> x
<_io.BufferedReader name='data.pickle'>
这最后一部分让我感到困惑,因为我的字典数据似乎没有被保存。这导致我的代码中的部分代码中出现其他错误,其中无法识别用户详细信息。
新的酸洗,对不起,如果有任何明显的错误。使用python 3
答案 0 :(得分:2)
open()
返回一个文件对象,您的repl输出是预期的。如果你想看看它里面的数据包含什么,请将它传递给pickle.load()
,如下所示:
want to enter data? - yes
enter user - foo
enter pass - bar
want to log in? no
>>> import pickle
>>> pickle.load(open("data.pickle" , "rb"))
{'foo': 'bar'}
>>>
您可以看到您的数据正在保存和加载而没有问题。由于这个原因,代码的第二部分不起作用:
if signInP == ID_out[signInU][0]:
ID_out[signInU]
是一个字符串,即密码,因此ID_out[signInU][0]
是该密码的第一个字符。如果密码为“bar”,则该行将“bar”(我们检查的字符串与存储的密码)比较为“b”(存储密码的第一个字母),显然这些字符串不同。只需删除[0]
,此代码应该是您想要的。