2010-04-09 94 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库有关。尝试将程序分解为包含不连续逻辑位的函数,并命名它们以反映它们的功能。

相关问题