如何制作一个以字典为输入并输出银行净额的程序?

Posted

技术标签:

【中文标题】如何制作一个以字典为输入并输出银行净额的程序?【英文标题】:How to make a program which takes a dict as input and outputs bank net amount? 【发布时间】:2014-09-10 04:20:52 【问题描述】:

我正在尝试制作一个程序,该程序在输入时接受字典并输出银行帐户中的净金额。

我尝试了以下代码,但输出错误,我无法弄清楚原因:

netAmount = 0
bankDict = 'D':300,'D':300,'W':200,'D':100
operations = bankDict.keys()
amount = bankDict.values()
for i in range(len(operations)):
    if operations[i] == 'D': netAmount += amount[i]
    elif operations[i] == 'W': netAmount -= amount[i]
else: pass
print netAmount
# OUTPUT: -100

输入不一定是字典。

【问题讨论】:

一个字典中不能有多个相同的键。 当然是字典……好尴尬。 【参考方案1】:

这个问题可以用不同的方式解决:

def calculate_net_amount(trans_list):
    net_amount = 0 
    for i in trans_list:
        if(i[0] == 'D'):
            net_amount = net_amount + int(i[2::])
        elif(i[0] == 'W'):
            net_amount = net_amount - int(i[2::])
    return net_amount

trans_list=["D:300","D:200","W:200","D:100"]
print(calculate_net_amount(trans_list))

【讨论】:

【参考方案2】:

你仍然可以传入字典,只需将其更改为

bank_dict = 'D':[300, 300, 100],
             'W':[200]
            

然后,您将使用给定键的每个值列表的总和来调整帐户余额。

【讨论】:

【参考方案3】:

字典不会为一个键存储两个不同的条目。因此,当您使用键 "D" 创建具有多个条目的 bankDict 时,它只存储最后一个:

In [149]: bankDict = 'D':300,'D':300,'W':200,'D':100

In [150]: bankDict
Out[150]: 'D': 100, 'W': 200

您可能希望交易成为一个列表:

In [166]: transactions = ["type": "deposit", amount: 300, "type": "deposit", amount: 300, "type": "withdrawal", amount: 200, "type": "deposit", amount: 100]

In [167]:for transaction in transactions:
            if(transaction["type"] == "deposit"):
                netAmount += transaction["amount"]
            elif(transaction["type"] == "withdrawal"):
                netAmount -+ transaction["amount"]

您甚至可以将事务从字典中提取到一个类中。

【讨论】:

感谢您提供的信息。这解释了为什么我得到错误的输出。所以我需要为这种类型的程序提供不同类型的输入。【参考方案4】:

我只记得我之前问过一个关于机器人位置的类似问题。下面的代码现在可以工作了:

netAmount = 0
operations = ['D','D','W','D']
amount = [300,300,200,100]
i = 0

while i < (len(operations)):
    if operations[i] == 'D': netAmount += amount[i]
    elif operations[i] == 'W': netAmount -= amount[i]
    else: pass
    i += 1

【讨论】:

以上是关于如何制作一个以字典为输入并输出银行净额的程序?的主要内容,如果未能解决你的问题,请参考以下文章

java题目是这样的,输入几个字符,以#结束,比较它们的字典序大小并输出字典序最小的那个字符

具有多个类的java中的银行帐户客户端

制作一个包含(i,i * i)的字典,其中i为1到n

7-32 通过两个列表构建字典 (10 分)

确定银行程序的读/写的问题

Python - 如何在文本文件中制作字典?