2017-06-30 14 views
-1

私はPythonでこのコードを実行しようとしています。私は「createAccount」関数を使用して新しいアカウントを作成するときに問題があるPythonは単純変数の値を保存しません

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") 

(私はそれで問題がないので、私は「listAccounts」関数の本体を省略しました)。値を入力して保存すると、すべて正常に動作します。私はアカウントを表示し、最初のアカウント番号は0です。すべてうまくいっていますが、新しいアカウントを作成してリストすると、3つ目のアカウントを作成しても両方のアカウントに番号0が付いていることがわかります「numAccounts」変数が増加していない場合と同様です。

私は自分のプログラムをデバッグし、 'numAccounts'の値が実際には1に増加することに気がつきましたが、 'return'行にステップすると再び値が0になります。私は '返信'行にコメントし、値などを変更しますが、何も動作しません。誰かが私のコードに何が間違っているか知っていますか?

答えて

0

の下に問題が変数NUMACCOUNTSの範囲であるとして、あなたのwhileループがあるべき、あなたはNUMACCOUNTS変数は、あなたが増加していることを意味し、(顧客、NUMACCOUNTS)createAccountとしてあなたの関数を定義しました1つは関数内で生きているだけです。 numAccounts変数をグローバル変数として定義したので、createAccount(customers、currentnumAccounts)のような関数を定義し、numAccounts + = numAccountsを呼び出すと、グローバル変数を増やすことになります。

+0

ありがとう、Genaro。私は関数の変数の振る舞いについてもっと詳しく知りました。そして、「createAccount」関数の中に「global」キーワードを追加して解決しました。このようにして、このようにして、値が大きくなると値を保存できます。あなたの時間のために人々にありがとう。 –

0

createAccountによって返されるものを保存していないためです。

すべての変数をグローバルレベルで作成しても、同じ名前の変数を受け取るため、関数はその変数のローカルコピーを作成し、グローバル変数の値は変更しません。

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") 
関連する問題