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