2016-09-28 14 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

このコードを試してください。名前とインデントを確認してください 合計= 0 請求書= "計算する" 請求書中に!= '計算'data_base内のアイテム: 合計=合計+アイテム[1] * comission_percentage/100 請求書=入力( "請求書入力:") – 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) 

:ここでは、それはあなたが求めて1見つからない場合には「空」の請求書を返します。たとえば、だ

また
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

と、私がデフ機能を述べているのであれば、データベーズではないときに再質問しますが、その後でプログラムを終了することはできません。 – smera

0

あなたの「データベース」はリストのリストのようです。私は、ユーザーからの入力がリストの最初の部分と一致すると仮定しています。

だから、与えられた:

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

ユーザ入力f1場合、あなたはそれが["f1",2000,.24]を一致させたいです。 "f1"ので、この場合には動作しません

あなたの内側のwhileループはあなたのリストのすべての要素の最初の要素は、あなたの入力と一致するかどうかを確認する必要があり[["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

Ok。このプログラムの目的は、データベースからインポートできるようにすることです。もし私がそれをするならば。どのように情報は、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: ") 
関連する問題