2015-05-24 48 views
1

我已经TXT文件像这样(市只是一个例子):的Python 3:在Python 3从列表中获取信息的列表

Tokyo 0 267 308 211 156 152 216 27 60 70 75 
London 267 0 155 314 111 203 101 258 254 199 310 
Paris 308 155 0 429 152 315 216 330 295 249 351 
Vienna 211 314 429 0 299 116 212 184 271 265 252 
Tallinn 156 111 152 299 0 183 129 178 143 97 199 
Helsinki 152 203 313 116 183 0 99 126 212 151 193 
Stockholm 216 101 216 212 129 99 0 189 252 161 257 
Moscow 27 258 330 184 178 126 189 0 87 73 68 
Riga 60 254 295 271 143 212 252 87 0 91 71 
Melbourne 70 199 249 265 97 151 161 73 91 0 128 
Oslo 75 310 351 252 199 193 257 68 71 128 0 

我想这样的程序工作的一个例子:

Please enter starting point: Paris 
Now please enter ending point: Riga 
Distance between Paris and Riga is 295 km. 

我是相当新的Python,我不知道如何阅读列表中的距离列表。 我设法到目前为止做:

cities = [] 
distances = [] 

file = open("cities.txt") 

for city_info in file: 
city_info = city_info.strip() 
city = city_info.split()   
cities.append(city[0]) 

distances2 = [] 
for dist in city[1:]: 
    distances2.append(int(dist)) 
distances.append(distances2) 

# to check, if lists are good to go 

print(distances) 
print(cities) 

file.close() 

amount = len(cities) 

for x in range(amount): 
    for y in range(amount): 
     startpoint = cities[x] 
     endpoint = cities[y] 
     dist1 = distances[x][y] 

    startpoint = input("Enter start point: ").capitalize() 
    if startpoint not in cities: 
     print("Start point doesn't exist in our database: ", startpoint) 
    else: 
     endpoint = input("Enter end point: ").capitalize() 
     if endpoint not in cities: 
      print("Start point doesn't exist in our database: ", endpoint) 
     else: 
      print("Distance between", startpoint, "and", endpoint, "is", dist1, "kilometers.") 

由于我不是Python语言非常称职的,我不知道我做错了。例如,我想获得城市[1]和城市[4]之间的距离,所以它应该找到距离[1] [4]的距离。

+0

你的缩进不正确... –

+0

出在代码中最引人注目的很多不好的事情是东西嵌套的for循环后传来的压痕,这应该是在同一级别内的。 –

回答

1

试试这个:

# reading from file: 
with open('cities.txt') as f: 
    lines = f.readlines() 

# pre-processing 
indices = {line.split()[0]: i for i, line in enumerate(lines)} 
distances = [line.split()[1:] for line in lines] 

#user input: 
start = input("Please enter starting point: ") 
end = input("Now please enter ending point: ") 

# evaluation: 
distance = distances[indices[start]][indices[end]] 

# output: 
print("Distance between {start} and {end} is {distance} km.".format(**locals())) 
0

另一种方法,从对方的回答也差不太多。

cities = {} 

with open('cities.txt') as f: 
    for i, line in enumerate(f.read().splitlines()): 
     vals = line.split() 
     cities[vals[0]] = {'index': i, 'distances': [int(i) for i in vals[1:]]} 

startpoint = input("Enter start point: ").capitalize() 

if startpoint in cities: 
    endpoint = input("Enter end point: ").capitalize() 
    if endpoint in cities: 
     index = cities[startpoint]['index'] 
     distance = cities[endpoint]['distances'][index] 
     print('The distance from %s to %s is %d' % (startpoint, endpoint, distance)) 
    else: 
     print('city %s does not exist' % endpoint) 
else: 
    print('city %s does not exist' % startpoint)