请下面的代码确定两个随机选择的节点之间的最短路径长度,然后打印它们之间的路径长度。我需要在循环中插入一个条件来测试测试两个节点之间的路径长度,并继续直到所有输出都满足这个条件(> = 1.5和< = 2)。我真的很困惑如何在现有的循环中嵌套它。我把三重引号中的内容包括在内。这似乎是一个无限循环,因此没有帮助。请帮忙。谢谢
import networkx as nx
import random as rand
pos = {1001:(-42503,-3748871),1002:(-42267,-3749806),1003:(-40938,-3750235),1004: (-39452,-3750624),1005:(-39985,-3749564),1006:(-38473,-3749615),1007:(-41714,-3747171),1008:(-42279,-3745275),1009:(-41853,-3744185),1010:(-42000,-3746561),1011:(-42651,-3746188),1012:(-42195,-3747788),1013:(-41498,-3748890),1014:(-40366,-3748684),1015:(-43036,-3750284)}
edge = [(1001, 1003,{'length':0.35}),(1001, 1004,{'length':0.46}),(1001, 1009,{'length':0.49}),(1002, 1007,{'length':0.22}),(1002, 9972,{'length':0.54}),(1002, 1013,{'length':0.59}),(1003, 1014,{'length':0.25}),(1004, 1010,{'length':0.29}),(1004, 1013,{'length':0.57}),(1004, 1003,{'length':0.43}),(1004, 1006,{'length':0.37}),(1005, 1002,{'length':0.23}),(1005, 14566,{'length':0.72}),(1006, 1005,{'length':0.6}),(1007, 1003,{'length':0.39}),(1007, 1010,{'length':0.11}),(1009, 1001,{'length':0.51}),(1010, 1005,{'length':0.2}),(1011, 1004,{'length':0.37}),(1012, 1006,{'length':0.17}),(1013, 1005,{'length':0.19}),(1013, 1007,{'length':0.21}),(1014, 1005,{'length':0.35}),(1014, 1009,{'length':0.51})]
X = nx.MultiDiGraph()
X.add_nodes_from(pos.keys())
X.add_edges_from(edge)
num_routes = 5
for i in range(num_routes):
while True:
try:
A = int(rand.choice(pos.keys()))
B = int(rand.choice(pos.keys()))
path = nx.dijkstra_path(X,A,B,weight='length')
pathlength = round(nx.dijkstra_path_length(X,A,B,weight='length'),2)
'''
while pathlength >= 1.5 and pathlength <= 2:
continue
else: pathlength = round(nx.dijkstra_path_length(X,A,B,weight='length'),2)
'''
except:
continue
break
print pathlength
output:
pathlength: 2.2
pathlength: 2.94
pathlength: 1.46
pathlength: 1.37
pathlength: 0.77
答案 0 :(得分:1)
for i in range(num_routes):
while True:
try:
A = int(rand.choice(pos.keys()))
B = int(rand.choice(pos.keys()))
path = nx.dijkstra_path(X,A,B,weight='length')
pathlength = round(nx.dijkstra_path_length(X,A,B,weight='length'),2)
print path,A,B,pathlength ,i
if 1.5 <= pathlength <= 2:
break
else:
pathlength
except:pass
print pathlength,A,B
这应该有效。如果我理解正确的话! 编辑了我的代码,我不必要地做了额外的循环。
答案 1 :(得分:1)
您似乎对循环中break
和continue
的功能感到有些困惑。 break
将告诉python它应该立即完成循环而不再进行任何迭代,而continue
只是告诉它跳过其余的当前迭代并继续下一步(基本上在while True:
的情况下重新启动循环。在while循环结束时你拥有的break
会在第一次运行后立即退出循环!
for i in range(num_routes):
while True:
try:
A = int(rand.choice(pos.keys()))
B = int(rand.choice(pos.keys()))
path = nx.dijkstra_path(X,A,B,weight='length')
pathlength = round(nx.dijkstra_path_length(X,A,B,weight='length'),2)
if pathlength >= 1.5 and pathlength <= 2:
break
except:
continue
print pathlength