Python字符串不相等

时间:2013-09-01 16:12:24

标签: python

很抱歉,如果这个问题的答案可能很明显,但我对Python很陌生(刚开始阅读一篇关于C语言不同结构和其他内容的小文档)。在练习的时候,我决定自己做一台ATM。但是,在验证过程中发生了一些奇怪的事情,它将输入password与表示用户数据库的.txt文件中的密码进行比较。尽管两个字符串完全相同(是的,我检查了类型,两者都是class str),我的脚本完全无法正确比较两者!我在寻找,我确信我错过了一些明显的东西,但我找不到它。

以下是相关位:

class MockUserInterface:
    def __init__(self):
        ccn = input('Enter your Credit Card Number --> ')
        password = input('Enter the corresponding password --> ')
        self.db = MockDatabase()
        self.processUser(ccn, password)

processUser(self, ccn, password)将ccn和密码传递给VerifyUser以获取False|dictionary值...

class MockDatabase:
    def __init__(self):
        self.initdata = open('D:/users.txt', 'r')
        self.data = {}
        line = 0
        for user in self.initdata:
            line += 1
            splitted_line = user.split(',')
            self.data[splitted_line[0]] = {'Name' : splitted_line[1], 'Password' : splitted_line[2], 'Balance' : splitted_line[3], 'id' : line}
        self.initdata.close()

    def verifyUser(self, ccn, password):
        if ccn in self.data:
            if ccn == self.data[ccn]['Password']:
                return self.data[ccn]
            else:
                print(password, self.data[ccn]['Password'])
        else:
            print(self.data)

users.txt如下所示:

13376669999,Jack Farenheight,sh11gl3myd1ggl3d4ggl3,90001
10419949001,Sardin Morkin,5h1s1s2w31rd,90102
12345678900,Johnathan Paul,w3ll0fh1sm4j3sty,91235
85423472912,Jacob Shlomi,s3ndm35h3b11m8,-431
59283247532,Anon Tony,r34lp0l1t1k,-9999

运行脚本后,输出为:

C:\Python33\python.exe D:/PythonProjects/ATM(caspomat).py
Enter your Credit Card Number --> 13376669999
Enter the corresponding password --> sh11gl3myd1ggl3d4ggl3
sh11gl3myd1ggl3d4ggl3 sh11gl3myd1ggl3d4ggl3

Process finished with exit code 0

再次,抱歉,如果答案很明显,或者我没有给出足够的信息!

1 个答案:

答案 0 :(得分:9)

您正在将ccn与密码进行比较,而不是将password arg与用户存储的密码进行比较...

if ccn == self.data[ccn]['Password']:

应该是

if password == self.data[ccn]['Password']: