我已经获得了一些基本帐户登录系统的代码。问题是我有一个帐户有三个部分:uname
,upass
,然后是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,但在登录时仍然会打印帐户的实际名称。对我来说这部分没有意义完美地使用完全不同的名字。
答案 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])
。
回答第二个问题,您只需打印参数的值而不进行任何检查。你为什么期望它失败?但是,当您实施本答案第一部分中建议的更改时,它将失败。