Python,列表搜索列表并给出下一个值

时间:2016-09-28 12:57:17

标签: python list element

我创建一个给出佣金百分比并给出发票的程序,它会查找给定的发票,查找该发票的价值并根据百分比输入计算佣金。当我们输入"calculate"时,它将汇总所有佣金并给我佣金总额。

我在尝试识别列表中的输入时遇到问题。一旦我这样做,我该怎样做才能获得该发票的价值?

data base = [Invoice, Invoice amount, invoice margin]

这是我到目前为止所拥有的。

data_base = [["f1",2000,.24],["f2",150000,.32],["f3",345000,.32]]
comission_percentage = int(input("Comision Percentage: "))
invoice = input("Enter an invoice: ")
total_comision = 0


while invoice != "calculate" :
    while invoice in data_base:
        invoice_ = data_base.index(invoice)+1 #Gives me the position of invoice
        invoice_amount = data_base[p_factura] #Give me the value os the invoice
        comission = ((margen_comisionar/100)* monto_factura) #calculatecomission
        total_comision = comission + total_comission         
        invoice = input("Enter an invoice: ")
print("The amount to comission is: " + str(total_comission))

3 个答案:

答案 0 :(得分:0)

您最好分开从计算中找到正确发票的任务。

目前您的代码根本不会运行,因为您使用的是您尚未定义其值的变量。由于您根本不需要更改发票,只需返回您想要的值即可。这是一个例子,它返回一个"空"如果发票没有找到您要求的发票,则开具发票:

def find_invoice(s):
    for i_num, amount, rate in data_base:
        if i_num == s:
            return i_num, amount, rate
    return(None, 0.0, 0,0)

然后逻辑的主要部分可以读取:

total_commission = 0.0
while invoice != "calculate":
    i, amt, rate = find_invoice(invoice)
    if i:
        total_commission += amt*comission_percentage/100.0
        invoice = input("Enter an invoice: ")

另外,请注意变量名称。你的拼写必须是完全的!不过,对于一个明显的初学者来说,这并不是一件坏事。

答案 1 :(得分:0)

您的“数据库”似乎是列表清单。我假设用户的输入应该与列表的第一部分匹配。

所以给出:

data_base = [["f1",2000,.24],["f2",150000,.32],["f3",345000,.32]]

如果用户输入f1,您希望它与["f1",2000,.24]匹配。

由于while不在"f1"

,因此您的内部[["f1",2000,.24],["f2",150000,.32],["f3",345000,.32]]循环不起作用

您需要检查列表中每个元素的第一个元素是否与您的输入相匹配。

for invoice_info in database:
    if invoice in invoice_info:
       # found it!
       <do your invoice commission calculations here>

更好的方法是将数据库转换为字典:

data_base = {'f1': {'invoice_amount': 2000, 'invoice_margin': .24},
             'f2': {'invoice_amount': 15000, 'invoice_margin': .32},
             'f3': {'invoice_amount': 345000, 'invoice_margin': .32}
             }

然后你可以做

if invoice in data_base:
    found_invoice = data_base[invoice]
    total_commission += found_invoice['invoice_amount'] * commission_percentage / 100

答案 2 :(得分:0)

你应该试试这段代码。检查名称和缩进

        total = 0
        invoice  = "calculate"
        while invoice!='calculate'
            for item in data_base:
                  total = total + item[1]*comission_percentage/100
                  invoice = input("Enter invoice: ")