【问题标题】:Python Classes with Loops: Bank Accounts带循环的 Python 类:银行账户
【发布时间】:2013-05-05 19:37:10
【问题描述】:

我遇到了一个大问题,我真的不知道我写的这段代码有什么问题,它肯定与我为输入文件设置的输入有关,但我在墙上,我实在不知道怎么办

我收到输入的名称错误,但这就是本书向我展示如何设置第一个存款的方式。输入文件位于主程序下方。

我的问题是,有人知道我在正文中列出的输入有什么问题吗?它们似乎是正确的,但我不断收到 NameError: ABC123 is not defined for each change I try out.

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
#
#

【问题讨论】:

  • 你的问题是什么?
  • 我的输入有什么问题,因为我不断收到 NameError。我会在编辑中更清楚,抱歉。

标签: python class loops input


【解决方案1】:

当遇到这样的事情时,尝试以交互方式调用 python 并进行一些实验:

$ 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”、等等。大概您想先设置帐户列表,然后再处理字母编码的交易。

【讨论】:

  • 目前阅读情况如何?如何让它检查前 22 个对象,然后让它开始检查类型?
  • 您有很多选择,但是如果您想要一个输入流,您可以(例如)通过第一个 #-on-a- 读取“数据库”部分逐行阅读,然后通过下一个#-on-a-line-by-itself 阅读“交易”部分。
  • 如果我想在哪里添加这些输入?
  • 我看到的是您现有的输入文件由两组“行组”组成。第一组总是一对:account-balance(第一行),account-name(第二行)。您可以假设这种情况一直持续到您到达不同的地方,例如单独一行中的“#”。您甚至不需要“#”:第二组以第一个字母代码开头(D/W/B/T 之一):您可以假设如果它不是其中之一,它必须是一个平衡-and-account-name 对。事实上,你甚至可以让这两个集合混合在一起:11\nABC123\nW\nABC123\n1.50\n500\nDEF456\n...
猜你喜欢
  • 2019-07-22
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多