python 脚本windows 能在linux用吗_Python脚本可以在linux上运行,但在windows上不行,我真的很失望...

请帮帮我,我真的很绝望,我不知道该怎么办。在

所以我们在大学里的任务是用python编写dijkstra的算法。在INVALID_NODE = -1 #Define the initial variables to -1 and a very high number.

INFINITY = 1000000

#A = 0, B = 1, C = 2, D = 3, E = 4, F = 5, G = 6

#network[0][1] is the cell that contains edge value for going from A to B

class Node:

previous = INVALID_NODE #With each node created, define it's initial variables to -1 and a very high number.

distFromSource = INFINITY

visited = False #Every node except starting node should be univisited by default.

def populateNetwork(filename):

network = [] #Create an empty array to store the network file.

networkfile = open(filename, "r") #Open the network file.

for line in networkfile: #For every line in network file, remove \n's and split the data on every comma, then add everything to the array.

line = line.replace("\n","")

line = line.split(',')

line = map(int, line)

network.append(line)

return network

def populateNodeTable(network, startNode): #Populate the nodeTable with node objects based on the network file.

nodeTable = []

for node in network:

nodeTable.append(Node())

nodeTable[startNode].distFromSource = 0 #Initialize the startNode distance from source and mark it as visited.

nodeTable[startNode].visited = True

return nodeTable

def findNeighbours(network, nodeTable, currentNode): #Function to find neighbours of the currentNode.

nearestNeighbour = [] #Empty array to store neighbour indexes.

columnIndex = 0

for entry in network[currentNode]: #check each node if it has a link to the currentNode and if it's unvisited, if both are true, add to the array.

if entry != 0 and nodeTable[columnIndex].visited == False:

nearestNeighbour.append(columnIndex)

columnIndex += 1

return nearestNeighbour

def calculateTentative(network, nodeTable, currentNode, nearestNeighbours):

#Calculate the distance from currentNode to each node in neighborous list

#Work out distance from source for each node

#If lower than current entry in nodeTable for that node, update

for neighbour in nearestNeighbours:

tentativeDistance = nodeTable[currentNode].distFromSource + network[currentNode][neighbour]

if nodeTable[neighbour].distFromSource > tentativeDistance:

nodeTable[neighbour].distFromSource = tentativeDistance

nodeTable[neighbour].previous = currentNode

return nodeTable

def findNextNode(nodeTable): #Find the next node from the neighbouring nodes with the lowest distFromSource.

currentDistance = INFINITY

nodeIndex = 0

currentNode = INVALID_NODE

for node in nodeTable: #If it's distFromSource is less than distFromSource of the currentNode, make it the currentNode.

if(node.distFromSource < currentDistance) and (node.visited == False):

currentNode = nodeIndex

currentDistance = node.distFromSource

nodeIndex += 1

return currentNode

####################

#Pseudocode from the internet for reference

#function Dijkstra(network, start):

# for each node v in network:

# distFromSource[v]:=infinity #initial distance from source to vertex v is set to infinite

# previous[v]:=undefined (-1) #previous node in optimal path from source

#

# distFromSource[source]:= 0 #distance from source to source

# Q:= the set of all nodes in Graph #all nodes in the graph are unoptimized - thus are in Q

#

# while Q is not empty: #main loop

# u:=node in Q with smallest dist[]

# remove u from Q

#

# for each neighbour v of u: #where v has not yet been removed from Q

# alt:=dist[u] + dist_between(u,v)

# if alt < dist[v]

# dist[v]:=alt #relax(u,v)

# previous[v]:=u

# return previous[]

#

####################

#Files

network = populateNetwork("network.txt") #Populate the network array with network defined in netwowrk.txt file.

routefile = "route.txt" #Load the route information.

letters = ["A", "B", "C", "D", "E",

"F", "G", "H", "I", "J", "K", "L", #Array of letters for easy conversion between integers and letters.

"M", "N", "O", "P", "Q", "R", "S",

"T", "U", "V", "W", "X", "Y", "Z"]

options = { "A": 0, "B": 1, #Dictionary to convert the initial route file to integers for much easier manipulation

"C": 2, "D": 3, #within the program.

"E": 4, "F": 5,

"G": 6, "H": 7,

"I": 8, "J": 9,

"K": 10, "L": 11,

"M": 12, "N": 13,

"O": 14, "P": 15,

"Q": 16, "R": 17,

"S": 18, "T": 19,

"U": 20, "V": 21,

"W": 22, "X": 23,

"Y": 24, "Z": 25,

}

####################

#Initial data and initialisation

print("Network file:") #Print the entire network.txt file to the screen line by line.

itr = 0 #Iterator for line labeling.

for line in network:

print(letters[itr], ".", line) #Prints letters associated with each node.

itr = itr + 1

with open(routefile, "r") as rfile: #Open route.txt and split it into two variables.

routeData = rfile.read().split(">")

routeData[0] = routeData[0].rstrip("\n") #Strip route data from additional \n's that can occur at the end of the file.

routeData[1] = routeData[1].rstrip("\n")

startNode = options[routeData[0]] #Save both numbers as start and end nodes.

endNode = options[routeData[1]]

print("\nRoute:\n%s to %s\n" %(letters[startNode], letters[endNode])) #Print start and end nodes to the user to make sure that

#the file was loaded correctly.

#Populate node table with the network data and starting node.

currentNode = startNode #Initialize currentNode to the start node.

print("Starting node: %s\nDestination node: %s" %(network[startNode], network[endNode])) #Prints the starting and end nodes.

####################

nodeTable = populateNodeTable(network, currentNode) #Populates nodeTable with node objects from the network.

while currentNode is not endNode: #While loop running as long as the currentNode isn't the destination.

neighbours = findNeighbours(network, nodeTable, currentNode) #Examine neighbours of the currentNode.

nodeTable = calculateTentative(network, nodeTable, currentNode, neighbours) #Calculate tentative distances for the neighbours of the currentNode.

nodeTable[currentNode].visited = True #Mark current node as visited.

currentNode = findNextNode(nodeTable) #Jump to the next neighbour.

#print "\nChecking node: " #Print node the program is currently working on.

#print letters[currentNode]

####################

#New variable for the while loop.

routeList = [] #Array to store final route data.

routeList.append(letters[currentNode]) #Add the final node to the array.

while currentNode is not startNode: #Add all the nodes used in the final travel to the array using the nodetable[i].previous variable.

routeList.append(letters[nodeTable[currentNode].previous])

currentNode = nodeTable[currentNode].previous

print("\nShortest route between start and end nodes: ")

for entry in reversed(routeList): #Print the array backwards for more intuitive output.

print(entry,)

print("\n\nTotal distance traveled:",) #Print the total distance traveled.

print(nodeTable[endNode].distFromSource)

####################

#Utility

print("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~") #separator line for easier debugging

我在我的笔记本电脑上做的(它运行的是debian),它运行得非常好,脚本正在做它应该做的,并给我正确的输出。在

当我运行它时,它说:

^{pr2}$

但问题是:我3小时后就要上传了,我试着在我的台式电脑(Windows10)上运行它,以确保我得到了正确的文件。在

但是它正在运行,它会抛出一个错误,我完全不知道它是什么,因为我只是python的初学者,这是我第一个使用它的学期。。。在

请帮帮我!我想弄清楚为什么它不能在windows上运行,但我不知道。在

它在linux上100%工作正常。。。在

请帮帮我,我真的不想让模块失败,即使我做了所有的工作。。。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值