Python音乐选曲程序输出3-5条非预期结果的bug修复方案
问题根因
- 判断逻辑完全失效:你写的
if music == 'phonk' or 'Phonk'属于Python基础语法错误,or后面直接跟非空字符串时,这个表达式的布尔值永远为True,所以不管用户输入什么内容,四个流派的分支都会全部执行,这就是每次运行会打印多条随机流派结果的直接原因。 - 歌单列表存在语法错误:
phonk列表中两处把两个独立链接写在了同一个字符串内,链接之间漏了分隔用的逗号和引号rap列表中t=1180和t=1275两个链接之间漏了逗号,Python会自动拼接相邻的两个字符串,导致选中这条时会出现两个粘在一起的无效链接
- 文件操作逻辑错误:四个分支反复用
w+模式打开results.txt,每次打开都会清空文件之前写入的内容,最终文件只会保留最后一个执行分支的写入结果;同时打开文件后没有执行关闭操作,可能出现写入内容丢失的问题。 - 冗余代码问题:hiphop、trap分支中存在无意义的
pass语句,重复的文件操作、分支判断代码完全可以合并简化。 - 细节错误:存在变量名、提示文案的拼写错误,链接里的HTML转义字符
&没有替换为正常的&,会导致链接失效;导入了未使用的os模块。
修复后代码
import random import time # 修复歌单列表的逗号缺失、字符串粘连、转义字符问题 phonk = [ 'https://youtu.be/URhQ9iJHIsU?t=0', 'https://youtu.be/URhQ9iJHIsU?t=136', 'https://youtu.be/URhQ9iJHIsU?t=212', 'https://youtu.be/URhQ9iJHIsU?t=344', 'https://youtu.be/URhQ9iJHIsU?t=465', 'https://youtu.be/URhQ9iJHIsU?t=581', 'https://youtu.be/URhQ9iJHIsU?t=752', 'https://youtu.be/URhQ9iJHIsU?t=888', 'https://youtu.be/URhQ9iJHIsU?t=1663', 'https://youtu.be/URhQ9iJHIsU?t=1015', 'https://youtu.be/URhQ9iJHIsU?t=1119', 'https://youtu.be/URhQ9iJHIsU?t=1749' ] rap = [ 'https://youtu.be/bOA_WhT6ff8?t=0', 'https://youtu.be/bOA_WhT6ff8?t=160', 'https://youtu.be/bOA_WhT6ff8?t=380', 'https://youtu.be/bOA_WhT6ff8?t=535', 'https://youtu.be/bOA_WhT6ff8?t=690', 'https://youtu.be/bOA_WhT6ff8?t=840', 'https://youtu.be/bOA_WhT6ff8?t=1030', 'https://youtu.be/bOA_WhT6ff8?t=1180', 'https://youtu.be/bOA_WhT6ff8?t=1275', 'https://youtu.be/bOA_WhT6ff8?t=1480' ] hiphop = [ 'https://www.youtube.com/watch?v=tfSS1e3kYeo&ab_channel=TravisScottVEVO', 'https://www.youtube.com/watch?v=ecw1sMKq5ME&ab_channel=MGKVEVO', 'https://www.youtube.com/watch?v=YS8fUmyu320&ab_channel=MurdaBeatzVEVO', 'https://www.youtube.com/watch?v=YS8fUmyu320&ab_channel=MurdaBeatzVEVO', 'https://www.youtube.com/watch?v=oak7VyEHvro&ab_channel=BigSeanVEVO', 'https://www.youtube.com/watch?v=ELpB_ULQC-E&ab_channel=Smokepurpp-Topic', 'https://www.youtube.com/watch?v=bXcSLI58-h8&ab_channel=LilNasXVEVO', 'https://www.youtube.com/watch?v=leJNDpm_G10&ab_channel=YoungThug', 'https://www.youtube.com/watch?v=R4ITBv0h-kc&ab_channel=DaBabyVEVO', 'https://www.youtube.com/watch?v=yzh6uX9fY0A&ab_channel=JuiceWRLD-Topic' ] trap = [ 'https://www.youtube.com/watch?v=Pw-0pbY9JeU&ab_channel=twentyonepilots', 'https://www.youtube.com/watch?v=f5i7yvgzPUU&ab_channel=TheChainsmokers-Topic', 'https://www.youtube.com/watch?v=OdFldPPptiY&ab_channel=BigBeatRecords', 'https://www.youtube.com/watch?v=UprcpdwuwCg&ab_channel=FueledByRamen', 'https://www.youtube.com/watch?v=7-PP4YpBbmA&ab_channel=AlanWalkerVEVO', 'https://www.youtube.com/watch?v=VzuNsNwKfZc&ab_channel=TribalTrap', 'https://www.youtube.com/watch?v=Mjbol87vRzs&ab_channel=Jinco-Topic', 'https://www.youtube.com/watch?v=zNvYPVwKuH4&ab_channel=SanHolo-Topic', 'https://www.youtube.com/watch?v=pXRviuL6vMY&ab_channel=FueledByRamen', 'https://www.youtube.com/watch?v=svpmv65Ii60&ab_channel=TrapNation' ] # 用字典统一管理流派和对应歌单,简化判断逻辑 music_map = { 'phonk': phonk, 'rap': rap, 'hiphop': hiphop, 'trap': trap } print('Welcome to music picker 1.0 :) ') time.sleep(2) print('DISCLAIMER! RIGHT NOW WE ONLY HAVE 4 TYPES OF MUSIC. THAT IS RAP,HIPHOP,TRAP AND PHONK(drift phonk) ') time.sleep(3) music = input('let us know your type of music: ').strip().lower() if music not in music_map: print(f"Unsupported music type, currently only support: {', '.join(music_map.keys())}") else: # 只对用户选中的流派随机选歌 selected_link = random.choice(music_map[music]) print(selected_link) # 用上下文管理器操作文件,自动完成打开、写入、关闭流程,不会出现内容丢失 with open('results.txt', 'w', encoding='utf-8') as f: f.write(f'please do not type in here ! {selected_link}') print('please delete the results file so that you can copy more links :]') time.sleep(2) print('press enter to exit') input()
修复说明
- 把用户输入统一转为小写后做匹配,不用再单独判断首字母大写的情况,逻辑更简洁
- 用字典统一映射流派和对应歌单,去掉了四个重复的if分支,从根源上避免分支全部执行的问题
- 修复了所有歌单列表里的逗号缺失、字符串粘连、转义字符错误问题
- 用
with open()上下文管理器处理文件写入,自动关闭文件,不会出现内容丢失,也不会反复清空重写 - 修正了所有拼写错误,增加了非法输入的提示
- 去掉了无意义的
pass语句、冗余导入和重复代码
内容的提问来源于stack exchange,提问作者Alexios
相关产品推荐
相关产品推荐

