如何在CSV文件中查找与用户输入最接近的数字?

时间:2019-12-16 21:03:29

标签: python

我还是Python的新手。我想制作一个仅在命令提示符下运行的汽车贷款计算器。计算器需要从用户那里获取输入。 我设法得到用户的输入,并在CSV文件中打印价格列表。我需要在CSV文件中找到最接近我的变量<div class="item"> <span class="one-fourth">1</span> <span class="one-fourth">2</span> <span class="one-fourth">3</span> <span class="one-fourth last">4</span> </div> <div class="item"> <span class="one-fourth">5</span> <span class="one-fourth">6</span> <span class="one-fourth">7</span> <span class="one-fourth last">8</span> </div> <div class="item"> <span class="one-third">9</span> <span class="one-third">10</span> <span class="one-third last">11</span> </div> 的最接近价格。我可以使用任何代码吗?

代码:

vehiclecost

我的输入文件:Carlist.csv

1 个答案:

答案 0 :(得分:0)

代码段

要从数据集中找到最接近价值的车辆:

# get the price list from the csv
price_list = [row[0] for row in car_list]

# get the closest value vehicle
closest_value_vehicle = min(price_list, key=lambda x:abs(int(x)-vehicle_cost))

完整代码

我整理了一下代码并添加了注释。

使用提供的数据集进行了测试。

import csv

with open('carlist.csv', 'r') as csv_file:
    reader = csv.reader(csv_file, delimiter=',')
    # skip header
    next(reader, None)
    # assign car list
    car_list = list(reader)

while True:
    try:
        # vehicle cost
        vehicle_cost = float(input("Please enter the vehicle cost:").strip("! .? % $"))
    except ValueError:
        print("Invalid input. Vehicle cost must be numeric.")
        continue
    else:
        break

while True:
    try:
        # annual interest rate
        annual_interest_rate = float(input("Please enter the annual interest rate:").strip("! .? % $"))
    except ValueError:
        print("Invalid input. Annual interest rate must be numeric.")
        continue
    else:
        break

while True:
    try:
        # loan duration
        loan_duration = int(input("Please enter the loan duration:").strip("! .? % $"))
    except ValueError:
        print("Invalid input. Loan duration must be numeric.")
        continue
    if loan_duration > 10:
        print("Invalid input. Loan duration must be less than 10.")
        continue
    else:
        break

# total loan months
loan_total_months = loan_duration * 12

# vehicle tax
vehicle_tax = vehicle_cost * 0.12 + vehicle_cost

# interest rate
interest_rate = annual_interest_rate / ( 100 * 12 )

# monthly repayment
monthly_repayment = vehicle_tax * ( interest_rate * ( ( interest_rate + 1 ) ** loan_total_months ) ) / ( ( interest_rate + 1 ) ** loan_total_months - 1 )


print("Your loan amount would be: $%s" % str('{:,}'.format(vehicle_tax)) )
print("Your monthly payment would be: {:.2f}".format(monthly_repayment) )

# repayments
for x in range(1, loan_duration + 1):
    for y in range(12):
        monthly_interest = (vehicle_tax * interest_rate) 
        principal = (monthly_repayment - monthly_interest)
        vehicle_tax = float(vehicle_tax - principal)
    print("Years:", x)
    print("Balance remaining: ${:.2f}".format(vehicle_tax))
    month = x * 12
    print("Total payments: ${:.2f}".format(month*monthly_repayment))



# vehicles in price range
vehicles_in_price_range = []

# get the price list from the csv
price_list = [row[0] for row in car_list]

# get the closest value vehicle
closest_value_vehicle = min(price_list, key=lambda x:abs(int(x)-vehicle_cost))

print(closest_value_vehicle)

for row in car_list:
    # price
    price = row[0]
    # check if price in range
    if int(price) == int(closest_value_vehicle):
        vehicles_in_price_range.append(row)

print("Vehicle Recomendations:")

# print list of vehicles in price range
for vehicle in vehicles_in_price_range:

    print('%s %s %s (VIN: %s) (Millage:%s) (Location: %s, %s) - $%s' % 
        ( vehicle[1], 
          vehicle[6], 
          vehicle[7], 
          vehicle[5], 
          vehicle[2], 
          vehicle[3], 
          vehicle[4], 
          str('{:,}'.format(int(vehicle[0]))) ) )