Python实现99瓶啤酒歌词打印程序输出异常如何修复?
问题定位
- 逻辑结构错误:你当前
printLyrics函数前两行是无判断全局执行的代码,会先输出未处理单复数的通用歌词,后续的if beer ==2/elif beer ==1分支又重复输出了对应数值的歌词,导致内容重复。 - else分支绑定错误:你补充的else分支和
if beer ==2判断平级,只要传入的beer值不是2或1(也就是3到99的所有值),都会触发else分支执行,所以每次调用都会打印最后那段买酒的歌词。 - 边界逻辑缺失:
main函数的遍历范围是range(99,0,-1),只会传入99到1的beer值,不会触发beer=0的逻辑,最后一段收尾歌词没有正确的执行时机。 - 单复数适配缺失:通用打印逻辑没有处理beer=1时的单数形式,也没有处理beer-1=0时的文本替换,输出内容不符合歌词规范。
修复方案
调整逻辑分支结构,统一处理单复数文本适配,单独补充收尾逻辑,修复后完整代码如下:
def printLyrics(beer): # 适配当前啤酒数量的显示文本 if beer == 0: current_text = "No more bottles" elif beer == 1: current_text = "1 bottle" else: current_text = f"{beer} bottles" # 适配剩余数量的显示文本 next_beer = beer - 1 if next_beer == 0: next_text = "no more bottles" elif next_beer == 1: next_text = "1 bottle" elif next_beer < 0: next_text = "99 bottles" else: next_text = f"{next_beer} bottles" # 输出对应段落歌词 print(f"{current_text} of beer on the wall, {current_text.lower()} of beer.") if beer > 0: print(f"Take one down and pass it around, {next_text} of beer on the wall.") else: print(f"Go to the store and buy some more, {next_text} of beer on the wall.") print() def main(): # 遍历打印99到1瓶的歌词 for beer in range(99, 0, -1): printLyrics(beer) # 单独打印0瓶的收尾歌词 printLyrics(0) main()
内容的提问来源于stack exchange,提问作者user16865156
相关产品推荐
相关产品推荐

