Python,搜索list of list并给出下一个值

Python, search list of list and give next value

我正在创建一个给出佣金百分比和发票的程序,它将查找给定的发票,查找该发票的价值并根据输入的百分比计算佣金。当我们输入 "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))

您最好将查找正确发票的任务从计算中拆分出来。

目前您的代码根本不会 运行,因为您使用的变量的值尚未定义。由于您根本不需要更改发票,因此只需 return 您想要的值即可。这是一个示例,return 是一张 "empty" 发票,以防找不到您要的发票:

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: ")

另外,注意变量名。您的拼写必须准确无误!不过,对于一个明显的初学者来说,这是一个不错的努力。

您的 'database' 似乎是一个列表列表。我假设用户的输入应该与列表的第一部分相匹配。

所以给出:

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

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

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