Python - 在字典中打印多个内容时出现问题

时间:2017-09-08 05:59:52

标签: python dictionary

我已经获得了一些基本帐户登录系统的代码。问题是我有一个帐户有三个部分:unameupass,然后是bal。在我介绍 bal 之前,一切正常。

我非常喜欢Python,无法弄清楚如何修复它。我的目的是为我添加的每个帐户分配3个部分,用户名,密码和帐户余额,但截至目前我已尽可能合理地编写代码,但我知道它可以正常工作,但它只是没有&#39 ; t似乎很好地打印或运行余额/ 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'

额外的小问题: 对于部分&#34; Def访问&#34;,由于某种原因,uname的部分可以命名为ANYTHING,但在登录时仍然会打印帐户的实际名称。对我来说这部分没有意义完美地使用完全不同的名字。

2 个答案:

答案 0 :(得分:1)

问题在于access方法以bal为参数,但在您致电bal时,您无法通过self.access(userNameInput)。您可以在bal方法中获取access并删除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()

答案 1 :(得分:0)

bal从未以该名称保存。请改用str(self.users[uname][1])

回答第二个问题,您只需打印参数的值而不进行任何检查。你为什么期望它失败?但是,当您实施本答案第一部分中建议的更改时,它将失败。