如何在Python中进行输入

如何在Python中进行输入,python,list,Python,List,我必须用Python打开文件,如下所示: Rapla;Tartu;157 Tallinn;Narva;211 Valga;Haapsalu;249 Viljandi;Paide;71 Tartu;Rakvere;123 Rapla;Narva;259 Paide;Narva;196 Paide;Tallinn;92 我想通过一个例子让程序像这样工作: Please enter starting point: Rapla Now please enter ending point: Tartu

我必须用Python打开文件,如下所示:

Rapla;Tartu;157
Tallinn;Narva;211
Valga;Haapsalu;249
Viljandi;Paide;71
Tartu;Rakvere;123
Rapla;Narva;259
Paide;Narva;196
Paide;Tallinn;92
我想通过一个例子让程序像这样工作:

Please enter starting point: Rapla
Now please enter ending point: Tartu
Distance between Rapla and Tartu is 157 km.
我设法用python制作了一个列表,但我对python相当陌生,我不知道如何进行输入,所以我可以得到一个可访问的输出

到目前为止,我成功做到了:

town1 = []
town2 = []
distance = []

f = open('town.csv')
for list in f:
    x = list.split(';')
    town1.append(x[0])
    town2.append(x[1])
    distance.append(x[2])

f.close()

n = len(town1)
for i in range(n):
    print('Starting point is: ' + town1[i])
    print('Ending point is:  ' + town2[i])
    print('Distance between', town1[i], 'and', town2[i], 'is', distance[i], 'km.')
这个程序只打印每个城镇的起点和终点以及距离,但我想制作一个程序来询问起点和终点

# assumes Python 2.x
from collections import defaultdict
import csv

def load_distances(fname):
    distance = defaultdict(dict)
    with open(fname, "rb") as inf:
        incsv = csv.reader(inf, delimiter=";")
        for town_a, town_b, dist in incsv:
            distance[town_a][town_b] = int(dist)
    return distance

def main():
    distance = load_distances("town.csv")

    town_a = raw_input("Please enter starting point: ")
    town_b = raw_input("Now please enter ending point: ")
    if town_a not in distance or town_b not in distance[town_a]:
        print("I don't know how to get from {} to {}".format(town_a, town_b))
    else:
        print("Distance between {} and {} is {} km.".format(town_a, town_b, distance[town_a][town_b]))

if __name__=="__main__":
    main()
如果您使用的是Python 3,则需要将
raw_input()
替换为
input()
,将
open(fname,“rb”)
替换为
open(fname,newline=”“)


defaultdict
是一种特殊类型的
dict
;如果您向它请求一个它没有的对象,它将返回一个新的默认对象,而不会导致错误。

要读取用户输入,请使用该函数。根据
print()
调用周围的括号,我猜您正在使用Python 3。当心工作方式不同input()大致相当于Python 2中的
raw\u input()


要读取数据文件,请使用带
分隔符=';'的模块

下面是一种使用过滤器为Python2.x实现此功能的方法

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def loadTowns():
    with open('town.csv') as f:
        return [row.split(';') for row in f.read().splitlines()]

towns = loadData()

start = raw_input("Enter your start: ")
towns = filter(lambda r: r[0] == start, towns)

dest = raw_input("Enter your destination: ")
towns = filter(lambda r: r[1] == dest, towns)

print towns[0][2] if towns else "Not a valid selection"