我正在尝试创建一个脚本,允许我在按下按钮时从列表中使用mpg123播放随机的圣诞节广播电台。我遇到的问题是,很多时候,同一广播电台会播放。我在弄乱列表,但是无法正常使用。我还没有连接好按钮,所以我暂停了脚本并再次播放。这是到目前为止的车站。
station1 = "http://185.33.21.112:80/christmas_128"
station2 = "http://71.127.174.26:8020/hollyfm2"
station3 = "http://76.115.146.246:8128"
station4 = "http://85.25.217.22:8050/christmas"
station_list = [station1, station2, station3, station4]
任何帮助将不胜感激!
答案 0 :(得分:3)
只需对列表进行随机排序,然后依次访问各个电台:
import random
random.shuffle(station_list)
for station in station_list:
...
答案 1 :(得分:2)
对于单行解决方案:
chosen = station_list.pop(random.randrange(len(station_list)))
这将从列表的长度中选择一个随机索引,pop
将其删除(将其从列表中删除)并将其分配给chosen
变量。
另外,如果只想将它们放在列表中,则定义字符串变量是多余的,我会做
station_list = ['http://185.33.21.112:80/christmas_128', 'http://71.127.174.26:8020/hollyfm2', 'http://76.115.146.246:8128', 'http://85.25.217.22:8050/christmas']
答案 2 :(得分:1)
如果您想找到一种解决方案,即每按一次按钮将切换到一个不播放的随机电台,您可以使用以下方法:
import random
def non_repeating(src):
seq = src[:]
random.shuffle(seq)
while True:
item = seq[0]
yield item
seq = seq[1:]
random.shuffle(seq)
seq.append(item)
station_list = ['http://185.33.21.112:80/christmas_128', 'http://71.127.174.26:8020/hollyfm2', 'http://76.115.146.246:8128', 'http://85.25.217.22:8050/christmas']
g = non_repeating(station_list)
# The example here is to play 20 stations
for _ in range(20):
print(next(g))
答案 3 :(得分:0)
从列表中选择某项后,使用del将其从列表中删除。 或保留一个选定列表,然后在先前选定的列表中重新运行。
import random
station1 = "http://185.33.21.112:80/christmas_128"
station2 = "http://71.127.174.26:8020/hollyfm2"
station3 = "http://76.115.146.246:8128"
station4 = "http://85.25.217.22:8050/christmas"
station_list = [station1, station2, station3, station4]
while len(station_list):
i_sel = random.randint(0, len(station_list)-1)
sel = station_list[i_sel]
del station_list[i_sel]
print(sel)