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

多玩家FizzBuzz程序问题:1-100数字重复输出错误排查

排查FizzBuzz多玩家重复打印问题

问题核心

你要实现多玩家轮流进行FizzBuzz游戏(1到100依次报数,3的倍数说Fizz,5的倍数说Buzz,同时是3和5的倍数说FizzBuzz),但当前代码选N个玩家时会完整打印N次1-100的序列,而非玩家轮流报数。

常见错误原因

大概率是循环层级搞反了:你把玩家遍历的循环放在了1-100数字循环的外面,导致每个玩家都会完整执行一遍1到100的FizzBuzz逻辑,自然会重复打印N次完整序列。

举个错误代码的典型例子(模拟你的问题场景):

player_count = int(input("请输入玩家数量:"))
# 错误:玩家循环在外层,每个玩家单独跑一遍1-100
for player in range(1, player_count + 1):
    print(f"玩家{player}的回合:")
    for num in range(1, 101):
        if num % 15 == 0:
            print("FizzBuzz")
        elif num % 3 == 0:
            print("Fizz")
        elif num % 5 == 0:
            print("Buzz")
        else:
            print(num)

修正思路与代码

正确的逻辑应该是外层遍历1-100的数字,每个数字对应一次玩家轮流,用数字对玩家数量取模来确定当前轮到的玩家,再输出该玩家对应的FizzBuzz结果。

修正后的示例代码:

player_count = int(input("请输入玩家数量:"))
# 外层遍历数字,每个数字对应一个玩家轮流
for num in range(1, 101):
    # 计算当前轮到的玩家编号(避免从0开始)
    current_player = (num - 1) % player_count + 1
    # 生成FizzBuzz结果
    if num % 15 == 0:
        result = "FizzBuzz"
    elif num % 3 == 0:
        result = "Fizz"
    elif num % 5 == 0:
        result = "Buzz"
    else:
        result = str(num)
    # 输出玩家标识+结果
    print(f"玩家{current_player}:{result}")

关键修正点

  1. 调换循环层级:把数字循环放在外层,确保每个数字只被处理一次
  2. 玩家轮次计算:用(num-1) % player_count +1来得到当前玩家编号,解决从1开始的玩家编号与从0开始的取模结果适配问题
  3. 单次输出对应玩家:每个数字仅输出一次,绑定当前轮到的玩家,避免重复打印完整序列

内容的提问来源于stack exchange,提问作者Count

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:18:38