我对堆栈溢出的第一个帮助请求。 Python版本3.6.4
我的代码有问题。它旨在根据输入的参数(例如国家/地区,货运重量以及给定国家/地区的城市)返回报价。
表看起来像这样(excel图片)。 截图Image 是否可以缩小使用哪一列。例如,如果搜索参数是爱沙尼亚和3公斤,则可以很好地返回zone1,zone2和zone3的所有三列:
What country? :estonia
weight?: 70
('estonia', '75', '10,83', '12,25', '14,43')
但是我可以根据用户输入来传递参数以缩小用于获取值的区域列吗?
例如,如果一个城市位于zone1中,则根据其他搜索参数仅从zone1列中获取值
我的健壮代码如下:
import sqlite3
import pandas as pd
conn = sqlite3.connect("transportHinnakiri.db")
c = conn.cursor()
df = pd.read_csv("baltikum.csv")
df.to_sql("baltikum", conn, if_exists="append", index=False)
input_country = input("What country? :").lower()
input_weight = int(input("Weight?: "))
def weight_category(input_weight):
if input_weight < 1:
return 1
elif 1 < input_weight <= 3:
return 3
elif 3 < input_weight <= 10:
return 10
elif 10 < input_weight <= 20:
return 20
elif 20 < input_weight <= 31.5:
return 31.5
elif 31.5 < input_weight <= 50:
return 50
elif 50 < input_weight <= 75:
return 75
elif 75 < input_weight <= 100:
return 100
result = weight_category(input_weight)
def get_post():
c.execute("SELECT * FROM baltikum WHERE country=? AND weight=?",(input_country, result))
row = c.fetchone()
return row
result_final = get_post()
print(result_final)`
答案 0 :(得分:0)
我不确定这是否是您要寻找的东西,但是这就是我要怎么做。首先从用户那里获取城市:
city = input("input City: ").lower()
然后,我将创建一些数据结构,例如字典,其中包含所有区域及其城市:
zones = {'zone1': ['boston', 'new york'], 'zone2': ['san fransisco', 'los
angeles']}
然后,您可以使用一个函数来接收城市并返回区域
def get_zone(city):
for zone in zones.keys():
if city in zones[zone]:
return zone
return "Error city not found"
当然,您必须做一些事情来规范用户输入。然后,您可以创建命令字符串并执行命令
def execute_command(zone, weight, country):
cmd = "SELECT {zone} FROM baltikum WHERE country={country} AND weight={weight}".format(zone = zone, country = country, weight = weight)
data = c.execute(cmd)
return data
然后,您只能从选定区域中获取数据。希望这会有所帮助!