2016-09-28 80 views
1

我创建了一个程序,给定佣金的百分比并给出发票,它将查找给定的发票,查找该发票的值并计算基于百分比输入的佣金。当我们输入"calculate"时,它将总计所有佣金并给我佣金总额。Python,列表的搜索列表并给出下一个值

我在尝试识别列表中的输入时遇到了问题。一旦我这样做了,我必须做些什么来赋予发票的价值?

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)) 
+0

你面临什么问题?从列表中获取数据? – Sarvesh

+0

你应该试试这个代码。检查名称和缩进 total = 0 invoice =“calculate” while invoice!='calculate' for data_base: total = total + item [1] * comission_percentage/100 invoice = input(“Enter invoice:”) – Sarvesh

回答

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

而且,小心变量名称。你的拼写必须是精确的!不过,对于一个显而易见的新手来说,这不是一个不好的努

+0

好的。我明白了。如果我搜索不在数据库内的值,则会出现错误。如果不包括,它应该问我另一个输入。 – smera

+0

,如果我在def函数中声明,当不在数据bese重新问,但我不能结束程序计算 – smera

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 
+0

好的。这个程序的目的是能够从数据库导入。如果我这样做。这些信息如何在python中看起来像? – smera

+0

我真的不知道会是什么样子。在python中有很多与数据库接口的方法,其中许多方式的作用是不同的。 – alexbclay

0

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

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