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

质数合数判断游戏BUG排查:输入对错均输出‘correct answer’

质数/合数识别游戏的Bug修复方案

我来帮你梳理下代码里的核心问题,一步步解决这个不管输入对错都输出“correct answer”的bug:


1. 质数/合数的判定逻辑错误

你这段代码的判定部分有两个明显问题:

  • 赋值符号误用:num == a 是比较运算符,用来判断两边是否相等,而不是赋值。你需要用单等号 = 来给变量赋值,而且不要直接修改随机生成的num(这会破坏原始数值),建议新建一个变量比如actual_result来存储判定结果。
  • 循环判定逻辑有漏洞:质数的定义是“大于1的自然数,除了1和自身外没有其他因数”,所以正确的判定逻辑应该是:先默认它是质数,只要找到一个能整除它的数,就立即标记为合数并跳出循环(不用再继续判断);如果循环结束都没找到因数,那它就是质数。你原来的循环里每一次判断都会覆盖结果,逻辑不严谨。

2. 结果判断的分支逻辑完全错误

你的if-elif分支顺序和条件写反了:

if guess == a:
    print("correct answer")
elif guess == b:
    print("correct answer")
elif guess != b:
    print("wrong answer")
elif guess != a:
    print("wrong answer")

不管用户输入的是composite number还是prime number,前两个分支都会直接输出“correct answer”,后面的错误分支永远不会被执行!正确的逻辑应该是:先判断用户猜测和实际结果是否一致,一致就输出正确,否则输出错误。


修复后的完整代码

import random

# 定义常量字符串,语义化命名更易读
COMPOSITE = "composite number"
PRIME = "prime number"

# 生成2-10之间的随机数
random_num = random.randint(2, 10)
print(random_num)

# 判定当前数是质数还是合数
actual_result = PRIME  # 初始默认是质数
for i in range(2, random_num):
    if random_num % i == 0:
        actual_result = COMPOSITE
        break  # 找到因数,确定是合数,提前终止循环

# 获取用户输入,strip()处理避免空格干扰
user_guess = input("tell if it is composite number or prime number: ").strip()

# 对比结果并输出
if user_guess == actual_result:
    print("correct answer")
else:
    print("wrong answer")

额外小优化

  • 用大写字母命名常量字符串,符合Python的编码规范,让代码更清晰。
  • 增加strip()处理用户输入,避免用户不小心输入前后空格导致判断出错。
  • 如果后续要扩大随机数范围,可以把循环范围优化到int(random_num**0.5) + 1,减少循环次数,提升效率(不过对于2-10的数来说,当前写法已经足够)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:36:09