2013-09-01 159 views
2

對不起,如果這個問題的答案可能很明顯,但我對Python非常陌生(剛開始閱讀關於不同結構和來自C的其他事情的小文檔)。在練習時,我決定製作一臺自動取款機。然而,在驗證過程中發生了一些奇怪的事情,它將輸入password與表示用戶數據庫的.txt文件中的密碼進行比較。儘管兩個字符串完全相同(是的,我已經檢查過這兩種字符,都是class str),但我的腳本完全無法正確比較這兩個字符串!我在看,我確信我錯過了一些明顯的東西,但我無法找到它。Python字符串不等於

這裏的相關位:

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 

再次,抱歉,如果答案很明顯,或者我沒有提供足夠的信息!

+0

什麼是'ProcessUser'方法看起來像你的'MockDatabase'類。這是錯誤發生的地方 – smac89

+0

@mou,實際上OP刪除了他自己的帖子,因爲它看起來像一個意外的行動,所以我把它回滾了。 – lejlot

回答

9

你是比較ccn的密碼 - 而不是password ARG與用戶的存儲的密碼......

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

應該

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

我知道這種感覺 – leon