2017-09-08 94 views
1

我已經獲得了一小部分非常基本的帳戶登錄系統的代碼。問題是我有三個部分到一個帳戶:uname,upass然後bal。一直運行良好,直到我推出了balPython - 在字典中打印多個內容時的問題

我很愛業餘與Python,並不知道如何解決它。我的意圖是對我添加的每個帳戶都有3個部分,用戶名,密碼和賬戶餘額,但截至目前爲止,我已經儘可能合理地將代碼編寫成了我的知識,但它看起來並不像打印或功能非常好的天平/ bal

代碼:

class Login: 
    def __init__(self): 
     self.users = {} 

    def addUser(self, uname, upass, bal): 
     self.users[uname] = upass, bal; 

    def login(self): 
     userNameInput = input("Username: ") 
     userPassInput = input("Password: ") 
     if userNameInput in self.users: 
      if userPassInput in self.users[userNameInput]: 
       print("Access Granted!") 
       self.access(userNameInput) 

     else: 
      print("Access Denied!") 
      return self.login() 

    def access(self, uname, bal): 
     print("Welcome, "+uname+"!"+bal) 

def main(): 

    mylogin = Login() 
    mylogin.addUser("u123", "p123", 123) 
    mylogin.login() 

main() 

錯誤:

Traceback (most recent call last): 
    File "C:\Users\Tom\Desktop\test.py", line 29, in <module> 
    main() 
    File "C:\Users\Tom\Desktop\test.py", line 27, in main 
    mylogin.login() 
    File "C:\Users\Tom\Desktop\test.py", line 14, in login 
    self.access(userNameInput) 
TypeError: access() missing 1 required positional argument: 'bal' 

額外的次要問題: 對於部分 「DEF訪問」 的uname出於某些原因,部分可以任意命名,但仍然打印登錄時帳戶的實際名稱。對於我來說,爲什麼該部分完美地使用完全不同的名稱是沒有意義的。

+1

我想你忘了在接入函數中傳遞bal參數 –

+0

@KalyanReddy對不起,應該說我試過了。它只是然後給我一個新的錯誤:TypeError:訪問()缺少1需要的位置參數:'bal' –

+0

如果你添加一個參數bal,那麼你應該在函數調用中發送它 –

回答

1

問題是access方法需要bal作爲參數,但是當您撥打self.access(userNameInput)時,您不通過bal。您可以在access方法中獲取bal並刪除bal參數。

此外,您不能連接字符串和整數:print("Welcome, "+uname+"!"+bal)。改爲使用str.format

class Login: 

    def __init__(self): 
     self.users = {} 

    def addUser(self, uname, upass, bal): 
     self.users[uname] = upass, bal 

    def login(self): 
     userNameInput = input("Username: ") 
     userPassInput = input("Password: ") 
     if userNameInput in self.users: 
      if userPassInput in self.users[userNameInput]: 
       print("Access Granted!") 
       self.access(userNameInput) 
     else: 
      print("Access Denied!") 
      # You shouldn't recurse here and use a loop instead. 
      # Python has a recursion limit. 
      return self.login() 

    # Remove the `bal` parameter. 
    def access(self, uname): 
     # Get the bal out of the self.users dict. 
     bal = self.users[uname][1] 
     print("Welcome, {}!{}".format(uname, bal)) 

def main(): 
    mylogin = Login() 
    mylogin.addUser("u123", "p123", 123) 
    mylogin.login() 

main() 
0

bal從未被保存在該名下。改爲使用str(self.users[uname][1])

回答第二個問題時,只需打印參數的值而不做任何檢查。你爲什麼期望它失敗?但是,當您實施此答案的第一部分中提出的更改時,它會失敗。