Python脚本,运行良好,但不完美,调试帮助

时间:2010-04-09 20:04:01

标签: python

它做什么(某种程度)......或者意图是,脚本从包含声音文件信息的csv文件中读取,并创建一个正好60分钟的播放列表。

示例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连续两次播放的时期。

然后,如果使用了每首歌曲的minium实例,并且在60分钟内仍然有时间,那么如何通过选择每个声音并将其包含在60分钟内来告诉它返回并填充时间在填充稀疏的情况下填充min。

继承人的问题!

脚本无法计算播放文件中所有声音所需的实际时间以及播放列表的总时间,事情是它不会一直出错3/5次,即使我在同一个csv文件上运行它也会给我不同的答案。

这是我将在e上运行脚本的文件,以便于查看问题:

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

我会做三次并发布结果:

1     所需的游戏时间(分钟):60     播放所有必需广告的实际时间(分钟):62     总分钟的游戏时间:62.0

2     所需的游戏时间(分钟):60     播放所有必需广告的实际时间(分钟):71     总分钟的游戏时间:71.0

3     所需的游戏时间(分钟):60     播放所有必需广告的实际时间(以分钟为单位):60     以分钟为单位的总播放时间:60.0

相关守则:

pastebin.com/demkBXk6

最后......在上下文中:

http://pastebin.com/demkBXk6

如果你到了这里,感谢留下来和阅读,赞美。

2 个答案:

答案 0 :(得分:1)

我多次运行你的代码,我得到的结果总是如下所示。我不能复制你的问题。

编辑:抱歉,是的,我现在看到了问题。

问题出在第一个while循环中 我会在这个循环中带走所有东西。代码太复杂,因此需要调用bug。它可以更简单,更清晰地完成:

如果你想要的是随机改组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

这显然可以在改组之前或之后完成。在此步骤中,您无法获得与您定义的最小值不同的重复次数。

欢呼声 华金

答案 1 :(得分:0)

我猜这与你在整个脚本中使用random库有关。尝试将程序分解为包含离散逻辑位的函数,并命名它们以反映它们的作用。