Python不保存简单变量的值

时间:2017-06-30 03:31:58

标签: python python-3.x variables

我正在尝试在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。我评论'返回'行,更改值等。但没有任何作用。有谁知道我的代码出了什么问题?

2 个答案:

答案 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时,您将增加全局变量。