Python项目输入函数失效及专辑名称小写转换问题求助
Hey 👋!咱们逐个解决你的问题:
1. 如何将输入转换为全小写形式
这个很简单,直接给input()的结果调用lower()方法就行,修改后的代码如下:
album = input("Which album would you like to see the songs rated?").lower()
lower()方法会把输入里所有的大写字母转换成小写,非字母字符不会受影响。这么做的好处是后续匹配专辑名称时,不用纠结用户输入的大小写(比如用户输"Nevermind"和"nevermind"都会被统一成小写,和你存储的专辑名保持一致)。
2. 程序无反应直接终止的原因及修复方案
程序没输出就终止,大概率是找不到你输入的专辑对应的数据,或者后续处理歌曲评分的逻辑有问题,常见的情况和解决办法如下:
常见原因1:专辑名称匹配失败
比如你存储专辑数据的字典(假设是favorite_albums)里的键是小写的"nevermind",但用户输入的是"Nevermind"或者"NEVERMIND",没转小写的话就匹配不到对应的专辑,程序的条件判断(比如if album in favorite_albums:)不成立,又没有处理“专辑不存在”的分支,就直接结束了,看起来像“无反应”。
常见原因2:访问歌曲数据时出现未捕获的异常
比如你的专辑数据里某个专辑没有songs这个键,或者你用了错误的方式访问歌曲列表(比如用索引访问字典),导致程序抛出KeyError或者IndexError,但因为没有异常捕获,程序直接崩溃终止(如果是这种情况,你运行程序时应该能看到报错信息,只是可能没注意到)。
修复方案
这里给你一个完整的示例代码,结合了输入转小写、存在性检查和异常处理:
# 假设这是你存储的专辑数据 favorite_albums = { "nevermind": { "overall_rating": 9.5, "songs": { "smells like teen spirit": 10, "in bloom": 9, "come as you are": 9.5 } }, "dark side of the moon": { "overall_rating": 10, "songs": { "speak to me": 8, "breathe": 9.5, "time": 10 } } } # 获取并转换输入为小写 album = input("Which album would you like to see the songs rated?").lower() # 检查专辑是否存在 if album in favorite_albums: # 尝试获取歌曲评分 try: print(f"\nSong ratings for {album.title()}:") for song_name, rating in favorite_albums[album]["songs"].items(): print(f"- {song_name.title()}: {rating}/10") except KeyError: print(f"Sorry, {album.title()} doesn't have any song ratings stored yet.") else: print(f"Oops, I don't have any ratings for the album '{album}'.")
这个代码做了这些事情:
- 统一输入为小写,避免大小写匹配问题
- 先检查输入的专辑是否在你的数据里,不存在就给用户提示
- 用
try-except捕获可能的键错误,防止程序直接崩溃,同时给用户友好提示
如果你的数据结构和示例不一样,只需要调整favorite_albums的结构和访问歌曲的代码就行,但核心思路是:验证输入有效性 + 处理异常情况 + 给用户明确反馈,这样程序就不会莫名其妙终止了。
内容的提问来源于stack exchange,提问作者BaconOfWar66

