2

今日は、銀行口座クラスを作成する必要がある課題があります。出力が期待される出力と一致するようにするためのすべてが揃っています。

私の出力:

Alin,Smith (SSN:111-11-1111) account number: 5040470401, balance: $20000
Alin,Smith (SSN:111-11-1111) account number: 5040470401, balance: $15000
Alin,Smith (SSN:111-11-1111) account number: 5040470401, balance: $15100.0
Mary,Lee (SSN:222-22-2222) account number: 5040470401, balance: $10000
Mary,Lee (SSN:222-22-2222) Insufficient Funds to withdraw: $15000
Mary,Lee (SSN:222-22-2222) account number: 5040470401, balance: $10000
Mary,Lee (SSN:222-22-2222) account number: 5040470401, balance: $10500.0

ただし、ご覧のとおり、Mary と Alin は異なる顧客ですが、生成されるアカウント番号は同じです。

今日の私の質問は、銀行口座クラスで作成された顧客オブジェクトごとに異なるランダムな 10 桁の口座番号を与えるにはどうすればよいかということです。

今、私は Customer クラスを持っています

class Customer:
    def __init__(self,firstName, lastName, social):
        self.firstName = firstName 
        self.lastName = lastName 
        self.social = social 

    def setfirstName(self,firstName):
        self.firstName = firstName

    def setlastName(self,lastName):
        self.lastName = lastName

    def __str__(self):
        self.name = "{},{} (SSN:{})".format(self.firstName, self.lastName,self.social)
        return self.name 

次に、私の BankAccount クラス (乱数部分のみを含む):

class BankAccount(Customer):
    from random import randint
    n = 10
    range_start = 10**(n-1)
    range_end = (10**n)-1
    accountNumber = randint(range_start, range_end)

    def __init__(self,customer,balance = 0):
        self.customer = customer
        self.balance = balance 

    def setCustomer(self,customer,accountNumber):
        self.customer = customer
        self.accountNumber = accountNumber 

    def getCustomer(self,customer,accountNumber):
        return self.customer, self.accountNumber

     def __str__(self):
        customer = "{} account number: {}, balance: ${}".format(self.customer,self.accountNumber,self.balance)
        return customer 

私が作成したすべてのアカウント オブジェクトに対して、新しい乱数が生成されると考えましたが、そうではないようです。

何か案は?

4

3 に答える 3

1

これは、変数を静的に設定しているためです。あなたの回線accountNumber = randint(range_start, range_end)は一度だけ呼び出されます。__init__の呼び出しに移動すると、BankAccount別の口座番号を取得する必要があります。

于 2016-07-27T15:07:30.287 に答える
1

をクラス変数として定義したaccountNumberため、クラスが作成さaccountNumberれると、クラスのすべてのインスタンスに同じものが割り当てられます。

代わりに、クラス変数としてではなく、インスタンスで口座番号を作成する必要があります。

def __init__(self,customer,balance = 0):
    self.customer = customer
    self.balance = balance 
    self.accountNumber = randint(self.range_start, self.range_end)

さらに、ほとんどの場合、モジュールを使用することが保証されているため、そのステートメントをモジュールの先頭にrandom移動することを検討してください。import

別の注意として、より信頼性の高いロジックを使用して一意の口座番号を生成することを検討する必要があります。randintある時点でアカウント番号が重複して作成される可能性がありますが、これは望ましくない動作です。uuidモジュールを見ることができます。

于 2016-07-27T15:07:13.423 に答える
0

accountNumber を作成すると、一度静的に作成されます。これを再利用すると、毎回同じになります。

次のような出力を比較します。

import random

account_number = random.randint(1,10)

for i in range(10):
    print account_number

と:

for i in range(10):
    account_number = random.randint(1,10)
    print account_number

クラス内に移動すればOKです。

于 2016-07-27T15:11:10.177 に答える