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

Python反向猜数游戏首次运行重复打印数值问题求助

反向猜数字游戏代码重复打印问题解决

问题说明

我编写了一段反向猜数字游戏的Python代码,规则为:输入d表示猜对,b表示需要更大的数,k表示需要更小的数。但代码首次运行时会重复打印随机数,例如输出会出现两次67,我尝试删除第3、7、11行的print(c)语句,但问题仍未解决。原代码及当前输出示例如下:

原代码:

import random
c = random.randint(1,99)
print(c)
a = str(input())
while a != "d":
    if a == "b":
        print(c)
        c = random.randint(c,99)
        a = str(input())
    elif a == "k":        
        print(c)
        c = random.randint(1,c)
        a = str(input())
    elif a == "d":
     break

当前输出示例:

67
b
67

问题原因

当前代码逻辑是:先打印初始随机数,输入b/k后又打印一次旧的随机数,才生成新的随机数,这就导致了重复打印。单纯删除某几行的print(c)会要么丢失初始数字,要么看不到后续生成的新数字,核心是打印时机不对。

修正后的代码

import random
# 生成初始数字并仅打印一次
c = random.randint(1, 99)
print(c)
a = input().strip()  # input本身就是字符串,无需强制转换,strip处理输入空格

while a != "d":
    if a == "b":
        # 先生成更大的新数字,再打印新数字
        c = random.randint(c, 99)
        print(c)
    elif a == "k":
        # 先生成更小的新数字,再打印新数字
        c = random.randint(1, c)
        print(c)
    # 统一在循环末尾获取下一次输入,避免重复代码
    a = input().strip()

逻辑说明

  1. 初始仅打印一次随机数,避免首次重复
  2. 收到b/k指令后,先生成符合要求的新数字,再打印这个新数字,彻底避免旧数字重复输出
  3. 将输入获取统一放到循环末尾,简化代码逻辑,减少冗余
  4. 用strip()处理输入,避免误输入空格导致判断失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:42:52