You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:15:06