<p>有两个不同的函数,<code>login</code>和<code>signup</code>,每个函数都有自己的局部变量。局部变量的关键是它们只能在函数中访问。你知道吗</p>
<p>您要么需要传递值,要么共享变量。你知道吗</p>
<p>您可以使用参数(和<code>return</code>语句)传递值,但本例中不需要这些参数。在<code>main</code>函数中创建<code>accounts</code>,然后将其传递给其他两个函数;这样,它们将拥有相同的字典。你知道吗</p>
<p>但是您也有另一个问题需要解决:您不应该在<code>login</code>和<code>signup</code>的末尾调用<code>main()</code>;只要让它们<code>return</code>,并在<code>main</code>中放入一个<em>循环</em>。否则,每次都会重新开始;任何更改的局部变量都会返回到其原始值。你知道吗</p>
<p>所以:</p>
<pre><code>def main():
accounts = {"user123": ["pass123"],
"123user": ["123pass"], }
while True:
option = input("Login or sign up? L/S ")
if option == "L":
login(accounts)
if option == "S":
signup(accounts)
else:
print("Error - restart programm")
return
def login(accounts):
print(accounts)
loginUser = input("Enter username: ")
loginPass = input("Enter password: ")
# etc.
if correct1 and correct2 == 1:
print("")
print("Welcome to System")
print("")
def signup(accounts):
signUser = input("Enter custom username: ")
signPass = input("Enter custom password: ")
accounts.update({signUser: [signPass]})
main()
</code></pre>
<hr/>
<p>我在上面提到,您需要“传递值,或者共享变量”。第二个呢?你知道吗</p>
<p>可以通过创建全局变量来实现这一点。(或者通过创建一个类,并使用实例变量。或者在闭包中使用非局部变量。)如果在所有三个函数的开头编写<code>global accounts</code>,它们都将引用相同的<code>accounts</code>变量。但您仍然必须确保不要不断地将其重新指定给起始值。你知道吗</p>