0

私は、ユーザーが現金の引き出し/入金、口座の作成、為替レートの取得などを行うことができる複数の銀行口座を持つ銀行をシミュレートするプログラムを構築している初心者プログラマーです。現在、インスタンスのグループにアクセスしようとしています私のアカウントクラスのすべてのオブジェクトである私のクラス。Account Manager クラスは、これらのアカウント オブジェクトを管理し、ユーザー入力が必要な場合にそれらを編成するのに役立ちます。現在、ユーザーが選択したアカウントに関する情報を取得するメニューの 3 番目のオプションをシミュレートしようとしています (情報を取得したり、現金を引き出し/入金したりするために、アカウントの ID を手動で入力する必要があります)。 .)。これらのクラス インスタンスをすべてリストに格納することはできましたが、get_account メソッドを使用してこれらを取得して使用することはできないようです。以下にすべてのコードを掲載します。他に不適切な点がありましたら、お気軽にお知らせください。コード:

# Virtual Bank
# 3/21/13

# Account Manager Class
class AccountManager(object):
    """Manages and handles accounts for user access"""
    # Initial
    def __init__(self):
        self.accounts = []

    # create account
    def create_account(self, ID, bal = 0):
        # Check for uniqueness? Possible method/exception??? <- Fix this
        account = Account(ID, bal)
        self.accounts.append(account)

    def get_account(self, ID):
        for account in self.accounts:
            if account.ID == ID:
                return account
            else:
                return "That is not a valid account. Sending you back to Menu()"
                Menu()

class Account(object):
    """An interactive bank account."""
    wallet = 0
    # Initial
    def __init__(self, ID, bal):
        print("A new account has been created!")
        self.id = ID
        self.bal = bal

    def __str__(self):
        return "|Account Info| \nAccount ID: " + self.id + "\nAccount balance: $" + self.bal


# Main        
AccManager = AccountManager()
def Menu():
    print(
        """
0 - Leave the Virtual Bank
1 - Open a new account
2 - Get info on an account
3 - Withdraw money
4 - Deposit money
5 - Transfer money from one account to another
6 - Get exchange rates(Euro, Franc, Pounds, Yuan, Yen)
"""
        ) # Add more if necessary
    choice = input("What would you like to do?: ")
    while choice != "0":
        if choice == "1":
            id_choice = input("What would you like your account to be named?: ")
            bal_choice = float(input("How much money would you like to deposit?(USD): "))
            AccManager.create_account(ID = id_choice,bal = bal_choice)
            Menu()
        elif choice == "2":
            acc_choice = input("What account would you like to access?(ID only, please): ")
            AccManager.get_account(acc_choice)
            print(acc_choice)

Menu()
4

2 に答える 2

3

オブジェクトには実際には属性Accountがないようです。ID代わりに、id属性があります。Python では大文字と小文字が区別されます。に変更if account.ID == IDしてみてくださいif account.id == ID

編集:

また、最初の不一致の後に戻ってきます。else最初にループ全体を通過できるように、ブロックから 1 レベルのインデントを削除する必要がelseありelseますif。指定された ID に一致するアカウントがない場合にのみ、メソッドは失敗します。

編集2:

また、実際には戻り値get_account()を何にも割り当てていないため、失われます。あなたがそこで何を期待しているのか正確にはわかりません。

于 2013-03-26T00:40:24.237 に答える
0

エラーは 31 行目と 35 行目にあります。「ID」ではなく「id」と書きました。次のように、これら 2 つのことを完全に大文字にします。

class Account(object):
    """An interactive bank account."""
    wallet = 0
    # Initial
    def __init__(self, ID, bal):
        print("A new account has been created!")
        self.ID = ID
        self.bal = bal

    def __str__(self):
        return "|Account Info| \nAccount ID: " + self.ID + "\nAccount balance: $" + self.bal

その後、コードが機能するかどうかをお知らせください。

于 2013-03-26T02:06:25.077 に答える