我尝试添加一个函数,将新的用户名和密码带到我的字典中,但它无法识别新信息



我刚刚开始学习Python,我试图写一个代码,要求您的用户名和密码,这部分工作得很好。此外,我试图添加一个函数(function2)),它将新的用户名和密码保存到我的字典(users)),但不幸的是,它无法识别新用户。我如何更正我的代码?

users = {"admin": "123456"}
def function2():
for x, y in users.items():
username = input('Enter a new username: ')
if x == username:
print('Username: "' + username + '" is in use.')
return function2()
password = input('Choose a password: ')
users[username] = password
print('You may now login.')
return function4()

在python中开始这样的代码时,可能不需要函数和for循环。使用"in"我会在这里工作。注意:.keys()类似于你使用的。items()。

一旦运行,你的代码变得更复杂,可以添加函数和循环。

users = {"admin": "123456"}
username = input('Enter a new username: ')
if username in users.keys():
print('Username: "' + username + '" is in use.')
else:
password = input('Choose a password: ')
users[username] = password
print('You may now login.')
# Print command to check the results
print(users)
You may now login.
{'admin': '123456', 'Frog': '456'}

对于字典更新,我在下面添加了一些代码作为function2()的简化示例。我已经去掉了输入,并放入占位符变量来简化它们。一旦功能正常工作,复杂性就可以重新加入。

# Modified function2()
def function2():
username = 'sample str 2'
if username in users:
print('Username: "' + username + '" is in use.')
else:
password = 543
users[username] = password
print('You may now login.')
#return function4()
# Example dictionary
users = {'sample str': 212, 'sample str 1': 421}
print(users)

{'sample str': 212, 'sample str 1': 421}

# Run function
function2()

您现在可以登录了。

# Results - dictionary is updated
print(users)

{'sample str': 212, 'sample str 1': 421, 'sample str 2': 543}

当您开始一起运行所有函数时,我建议使用循环(for, while,…)来调用函数,而不是循环函数调用和返回。希望对你有帮助。

欢迎来到Stackoverflow!开始学习Python编程的冒险之旅的嘉奖。

也就是说,你的代码有几个糟糕的设计决策,使得很难看到实际的问题:

  • 您的函数名称非常通用。这使得程序难以阅读,并且随着程序的增长会变得更糟。选择有意义的全名,如loginadd_user等,可以减轻心理负担,有助于集中精力解决手头的问题。
  • 你的代码通过调用它们作为return值在函数之间跳转。这(a)使执行路径难以理解,(b)缓慢地填满调用堆栈,不必要地消耗内存并最终导致堆栈溢出(没有双关的意思)。

关于您的登录问题:在users列表中输入一个新用户可以正常工作。但是,请考虑在检查function1中的用户列表时会发生什么:

  • 假设您添加了另一个用户,所以users = {"admin": "123456", "user2":"pass2"}.
  • 您想以user2登录,因此username="user2"password="pass2"
  • 检查users的第一个条目,设置x="admin"y="123456"
  • 显然,username==x是错误的,所以两个if分支将被跳过。
  • 你降落在else分支。

相反,去掉for循环并像这样检查:

if username in users:
if users[username] == password:
print("Login successful")
return True
else:
print("Wrong password")
return False
else:
print("User does not exist")
users = {"admin": "123456"}

def function1():
print('Enter your information please')
username = input('Username: ')
password = input('Password: ')
for x, y in users.items():
if username == x and password == y:
print('Login successful')
elif username == x:
print('Password is wrong')
return function4()
else:
print('Username doesn't exist')
return function4()

def function2():
username = input('Enter a new username: ')
if username in users.keys():
print('Username: "' + username + '" is in use.')
else:
password = input('Choose a password: ')
users[username] = password
print('You may now login.')
return function4()

def function3():
print('Invalid entry')
return function4()

def function4():
x = input('Login, Join or Exit?')
if x == 'Login':
function1()
elif x == 'Join':
function2()
elif x == 'Exit':
return 0
else:
function3()

function4()

最新更新