想知道解决此问题的最佳方法是什么:从给定歌曲列表中随机播放一首歌曲,在播放完所有歌曲之前不会重复播放歌曲。
我的算法基本上调用 get_random 和减少的音乐集来找出下一首要播放的歌曲。 get_random 使用 2 的幂来划分列表,然后进一步分割。
这是我能做的最好的算法还是我能想出的任何其他更好的算法?我只需要这个想法。
import random
import math
def get_random(number):
if number == 0:
return number
if number == 1:
return number
#make the number power of 2
orig_no = number
number = 1 << (math.floor(math.log(number))+1)
left = 0
right = number
# check if toss falls in this current half and then change the half for next recursion.
# we change half from 1, 2, 4, 8, 16, 36, 64, 128
while left < right:
#f1 can be replaced by this rd.randint(0, 1)
toss_value = f1()
if toss_value:
right = math.floor((left + right)/2)
else:
left = math.floor((left + right)/2) + 1
if left >= orig_no:
return get_random(orig_no)
else:
return left
songs = ["i am here", "your are beautiful", "soorry", "i am happy", "where am i", "what did i do", "nothing wrong with you"]
for i in range(0, len(songs)-1):
value = get_random(len(songs))
print(songs[value])
songs.pop(value)
最佳答案
打乱歌曲数组,播放所有歌曲,再打乱....
您可以使用 Fisher–Yates shuffle打乱数组。由于您使用的是 Python,因此已经有 random.shuffle
给你。
关于algorithm - 播放随机歌曲算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36543254/