我正在尝试在Python中运行此代码。 (我省略了'listAccounts'函数的主体,因为我没有问题)
import os
customers = []
numAccounts = 0
option = 0
def listAccounts(customers):
(...)
def createAccount(customers, numAccounts):
name = input('Enter a name: ')
lastname = input('Enter a lastname: ')
account = {'name':name, 'lastname':lastname, 'account':{'balance':0, 'accountNumber':numAccounts}}
customers.append(account)
numAccounts += 1
print("Account created")
input("Press Intro to continue...")
return customers, numAccounts
while ('3' != option):
option = input('''Please select an option:
1.- List Accounts
2.- Create Account
3.- Exit
''')
if option == '1':
listAccounts(customers)
elif opcion == '2':
createAccount(customers, numAccounts)
os.system("CLS")
print("End of the program")
问题在于我使用'createAccount'功能创建新帐户。当我输入值并保存它时,一切正常。我显示帐户,第一个帐号是0.一切顺利,但当我再次创建一个新帐户并列出它们时,我意识到这两个帐户的数字都是0,即使我创建了第三个帐户,它具有该值0.就像'numAccounts'变量没有增加一样。
我对我的程序进行了调试,并且我注意到'numAccounts'的值确实增加到1,但是当进入'return'行时,它会再次将值设置为0。我评论'返回'行,更改值等。但没有任何作用。有谁知道我的代码出了什么问题?
答案 0 :(得分:0)
因为您没有存储createAccount
返回的内容。
虽然您已在全局级别创建了所有变量,但您正在接收具有相同名称的变量,因此函数将生成该变量的本地副本,并且不会更改全局变量的值。
你的while循环应该如下
while ('3' != option):
option = input('''Please select an option:
1.- List Accounts
2.- Create Account
3.- Exit
''')
if option == '1':
listAccounts(customers)
elif opcion == '2':
customers,numAccounts = createAccount(customers, numAccounts)
os.system("CLS")
print("End of the program")
答案 1 :(得分:0)
问题是numAccounts变量的范围,您将函数定义为createAccount(customers,numAccounts),这意味着您增加1的numAccounts变量仅在函数内部存活。当您将numAccounts变量定义为global时,您可以定义您的函数,如createAccount(customers,currentnumAccounts),当您调用numAccounts + = numAccounts时,您将增加全局变量。