2016-09-28 68 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: ")