2010-04-09 92 views
1

它做了什麼(或有)......或者是說,腳本從包含聲音文件信息的csv文件中讀取並準確創建播放列表60分鐘長。Python腳本運行良好,但並不完美,調試幫助

一個例子CSV,包含:

their title, duration (in seconds), minium total time to be played (in minutes) 

一個例子是:

Soundfoo,120,10 
Soundbar,30,6 
Sounddev,60,20 
Soundrandom,15,8 

該腳本適用齣戲劇的最小的情況下,採取 'Soundfoo' 的例子中,每個樣品的長度是120秒,並且最小播放時間是10分鐘,所以基本數學10 * 60/120給出了歌曲將被播放的實例的數量,在這種情況下爲5.

這意味着要播放最少數量的實例並相互平等分配;所以絕不會有一段時間,例如Soundbar連續播放兩次。

然後,如果每首歌曲的最小實例已被使用,並且在60分鐘內仍有時間,那麼如何通過選擇每個聲音並將其包括在內直到60分鐘時間填滿,而人口稀少。

繼承人問題!

,腳本將無法計算出實際的時間需要在文件和播放列表的總時間發揮所有的聲音,事情是壽它不會搞錯了所有的時間,也許3/5次,即使我運行它在同一個csv文件,它會給我不同的答案。

這裏是我的文件應在E運行腳本以方便起見,看問題:

Sound1,60,10 
Sound2,60,10 
Sound3,60,10 
Sound4,60,10 
Sound5,60,10 
Sound6,60,10 

我會做三次後的結果:

需要播放時間(分鐘):60 在實際分鐘時間打所有需要的廣告:62 以分鐘爲單位的總播放時間:62.0

在幾分鐘 需要播放時間:60 以分鐘爲單位的實際時間來發揮所有需要的廣告:71 以分鐘爲單位的總播放時間:71.0

需要播放時間(分鐘):60 在幾分鐘內發揮的實際時間所有需要的廣告:60 以分鐘爲單位的總播放時間:60.0

相關代碼:

pastebin.com/demkBXk6

最後...上下文:

http://pastebin.com/demkBXk6

如果你做下來到這裏,感謝住和閱讀,榮譽。

回答

1

我跑了你的代碼幾次,我得到的結果總是如下所示。我無法複製你的問題。

編輯:抱歉,是的,現在我看到了問題。

問題出在第一個while循環中 我會拿走這個循環中的所有東西。代碼過於複雜,從而導致錯誤。這是可以做到更簡單,更清晰:

如果你想要的是,隨機混合required_playlist的列表,你只需要做

random.shuffle(required_playlist) 

這將在地方改組列表。 爲了填補actual_plays字典那麼你可以使用一個defaultdict

from collections import defaultdict 
actual_plays = defaultdict(int) 
for song in required_playlist: actual_plays[song] += 1 

這顯然之前或洗牌之後進行。在這一步中,您無法獲得與您定義的最小值不同的重複次數。

歡呼聲 joaquin

0

我猜這跟你在整個腳本中使用random庫有關。嘗試將程序分解爲包含不連續邏輯位的函數,並命名它們以反映它們的功能。

相關問題