2014-01-07 30 views
0

我有問題。我的代碼如下:爲什麼它不起作用? Python,訂單,騎車

algorythm--- solved 

我的文件 'masiny.txt'

m1 dns mail 
m2 none dhcp 
m3 none firewall 
m4 firewall ftp 
m5 mail voice 

第一列是 'ID',第二個 '依賴' 和第三 '提供'。它關於虛擬機器,哪一個提供這樣的服務,或者依賴於它。

我的問題,嗯,當我運行這個我的腳本,它通過啓動機器'm7'被凍結。爲什麼?我認爲邏輯是好的,但meybe錯誤是在這兩行代碼:

for j in running: # get running services 
    if j==dep[i] and i in notstarted: # if important service is running and machnie is unopened 

但爲什麼這個循環運行三次,然後凍結?
我使用Python 3.3.3 請幫忙,我這個整天坐在

謝謝:)

錯誤以下enter image description here

+1

請給我們一個[SSCCE](http://sscce.org) - 特別是實際運行的代碼(其中不包含IndentationError,我們必須猜測你的意思和猜測可能是錯誤的)並演示你描述的同樣的問題。當我猜測你的縮進並運行它時,它會打印出「開始m3」,「開始m2」,「下一個階段」,「開始m4」,「開始m9」。很難告訴你爲什麼它在「啓動機器'm7'」時凍結,當我看不到這樣的東西時... – abarnert

+0

編輯過圖片:) – Joffo

+1

實際上你試圖實現的是簡單的**拓撲排序**,這是更多有效的方式這樣做,哪些會告訴你的問題(因爲拓撲排序會檢測循環,並通知你) – lejlot

回答

4

這裏的問題是,你不能真正開始根據規則的所有機器。最初的幾個可以啓動:

none > dhcp, firewall 
firewall > ftp 
ftp > http 
http > tele 

在這一點上,你不能做任何更多的,但以下仍處於notstarted所以代碼迴路無限期:

m1 (mail, needs dns) 
m5 (voice, needs mail) 
m6 (chat, needs voice) 
m7 (dns, needs chat) 

這些機器是在一個循環dns > chat > voice > mail > dns,所以永遠無法啓動。

+0

非常感謝..我試圖找出algorithmus錯誤,現在它的工作,謝謝你的幫助:) – Joffo

相關問題