2013-05-05 66 views
0

我有一個巨大的問題,我真的不知道我寫的代碼有什麼問題,它肯定與我爲輸入文件設置的輸入有關,但我'我在牆上,我真的不知道如何繼續Python類與循環:銀行帳戶

我得到輸入名稱錯誤,但這是本書如何顯示如何設置第一個存款。輸入文件在主程序下面。

我的問題是,有人知道我在主要輸入的輸入有什麼問題嗎?他們似乎是正確的,但我一直得到一個NameError:ABC123沒有爲我試圖推出的每一個變化定義。

class BankAccount: 
    def __init__(self, getbankaccount, inputAmount=0): 
     self.__balance = inputAmount 
     self.__numDeposits = 0 
     self.__numWithdrawals = 0 
     self.__totalDeposits = 0 
     self.__totalWithdrawals = 0 
     self.__getbankaccount=getbankaccount 

    def getBalance(self): 
     return self.__balance 

    def getNumDeposits(self): 
     return self.__numDeposits 

    def getNumWithdrawals(self): 
     return self.__numWithdrawals 

    def getTotalDeposits(self): 
     return self.__totalDeposits 

    def getTotalWithdrawals(self): 
     return self.__totalWithdrawals 

    def getbankaccount(self): 
     return self.__getbankaccount 

    def Deposit(self,amount): 
     self.__balance = self.__balance + amount 
     self.__numDeposits = self.__numDeposits + 1 
     self.__totalDeposits = self.__totalDeposits + amount 
     return self.__balance 

    def Withdrawal(self,amount): 
     if (self.__balance >= amount): 
      self.__balance = self.__balance - amount 
      self.__numWithdrawals = self.__numWithdrawals + 1 
      self.__totalWithdrawals = self.__totalWithdrawals + amount 
      return True 
     else: 
      return False 

def main(): 
    acctlist=[] 
    account=input() 
    amount=eval(input()) 
    type=input() 

    while(type!='#'): 
     if (type=='D'): 
      account=input() 
      amount=eval(input()) 
      for i in range(len(acctlist())): 
       if (account==acctlist[i].getbankaccount()): 
        index=i 
       acctlist[index].Deposit(amount) 
       PrintSuccessfullTrans(account, type, amount, acctlist[index].getBalance()) 
     elif (type=='W'): 
      account=input() 
      amount=eval(input()) 
      for i in range(len(acctlist())): 
       if (account==acctlist[i].getbankaccount()): 
        index=i 
        status=(acctlist[index].Withdrawal(amount)) 
        if (status == True): 
         PrintSuccessfulTrans(account, type, amount, acctlist[index].getbalance()) 
        else: 
         PrintDenied(account, type, amount, "<DENIED>") 
     elif (type == 'B'): 
      type=ConvertType(type) 
      amount=eval(input) 
      print(acctlist[i].getbankaccount(), amount) 
     elif (type == 'T'): 
      account1=input() 
      account2=input() 
      amount=eval(input()) 
      for i in range(len(acctlist())): 
       if (accoun1t==acctlist[i].getbankaccount()): 
        index=i 
        acctlist[index].Deposit(amount) 
        if status == True: 
         print('Test1') 
        else: 
         print('Test2') 
      for g in range(len(acctlist())): 
       if (account2==acctlist[i].getbankaccount()): 
        index=g 
        acctlist[index].Withdrawal(amount) 

     account=input() 
     amount=eval(input()) 
     type=input() 


def PrintSuccessfulTrans(account,type, amount, balance): 
       typeName = ConvertType(type) 
       print("{:8s}{:12}{:8.2f}{:12.2f}".format(account,typeName,amount,balance)) 


def PrintDenied(account,type,amount, balance): 
       typeName = ConvertType(type) 
       print("{:8s}{:12}{:8.2f}{:>12}".format(account,typeName,amount,balance)) 

def ConvertType(type): 
       if (type == 'D'): 
        return "Deposit" 

       elif (type == 'W'): 
        return "Withdrawal" 

       elif (type == 'B'): 
        return "Balance" 
main() 
11 
ABC123 
500 
DEF456 
1000 
XYZ999 
2056 
MNI612 
2012 
CKE909 
1313 
THM115 
5783 
WBS319 
2041 
GFL522 
10238 
JDT121 
876 
JFL216 
9218 
GRP904 
820 
W 
JFL216 
587.24 
D 
MNI612 
420.45 
D 
XYZ999 
214.38 
W 
THM115 
1045.23 
D 
WBS319 
258.30 
W 
JDT121 
924.10 
T 
GFL522 
JDT121 
2000 
B 
GFL522 
0 
B 
XYZ999 
0 
T 
DEF456 
ABC123 
50.50 
# 
# 
+1

你的問題是什麼? – serk 2013-05-05 19:38:44

+0

我的輸入有什麼問題,因爲我不斷收到NameError。編輯中我會更清楚,對不起。 – user2305960 2013-05-05 19:40:00

回答

0

當面對這樣的事情,嘗試交互調用蟒蛇和試驗了一下:

$ python 
Python 2.7.3 (default, Mar 12 2013, 16:26:07) 
[GCC 4.2.1 20070831 patched [FreeBSD]] on freebsd9 
Type "help", "copyright", "credits" or "license" for more information. 
>>> input() 
11 
11 
>>> input() 
ABC123 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<string>", line 1, in <module> 
NameError: name 'ABC123' is not defined 

你去那裏,第一個問題複製。假設你想要類似raw_input()(或python 3.x,這就是input現在所做的)。

在沒有對其他所有內容進行評論的情況下,我只會在此注意到,您的調度循環還檢查類型'D','W','B'和'T',但不是'11','ABC123' , 等等。大概你想先建立帳戶清單,然後才處理字母編碼的交易。

+0

到目前爲止它如何閱讀?如何讓它檢查前22個對象,然後開始檢查類型? – user2305960 2013-05-05 19:55:00

+0

你有很多選擇,但是如果你想有一個單一的輸入流,你可以(例如)通過第一個「#」 - 一行一行地讀取「數據庫」部分,然後通過下一個「#」 - 「一行一行」地閱讀「交易」部分。 – torek 2013-05-05 19:57:14

+0

如果我想要,我可以在哪裏添加這些輸入? – user2305960 2013-05-05 20:02:01