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

基于Python的无重复数字三位数比对功能优化方案咨询

实现无重复数字三位数的猜数比对功能

需求说明

  • 用random模块生成各位数字不重复的三位数
  • 用户输入一个同样满足「各位数字不重复」的三位数
  • 比对规则:
    1. 若某一数字在两个数中的位置完全相同,输出一个+
    2. 若某一数字在两个数中都存在但位置不同,输出一个-
  • 示例:随机数为579,输入为591 → 输出+-(数字5位置相同,数字9存在但位置不同)

原代码存在的问题

  1. 随机数生成逻辑混乱:一开始生成的a、b、c仅做了一次重复校验,进入循环后又重新随机生成x、y、z,这部分与用户输入的逻辑完全冲突,x、y、z应该是对用户输入的数字拆分,而非随机生成
  2. 用户输入处理错误:用input()的结果直接覆盖了之前的estimate变量,没有对输入的三位数进行拆分和合法性校验(比如是否是三位数、数字是否重复)
  3. 比对逻辑漏洞多:用零散的if/elif判断无法完整统计所有符合条件的+和-,存在重复判断、遗漏场景的问题

优化实现方案

实现思路

  1. 生成合法随机数:通过打乱0-9的数字列表,确保百位不为0,取前三位即可得到无重复数字的三位数
  2. 校验用户输入:检查输入是否为三位数、是否全为数字、是否存在重复数字
  3. 高效比对逻辑:
    • 先逐个位置对比,统计位置相同的数字数量(即+的数量)
    • 用集合求两个数字的交集,得到共同数字的总数,减去位置相同的数量就是-的数量
    • 最后按数量拼接+和-输出结果

完整代码

import random

def generate_unique_three_digit():
    # 生成无重复数字的三位数
    digits = list(range(10))
    random.shuffle(digits)
    # 确保百位不为0
    if digits[0] == 0:
        # 交换第一个非0数字到百位
        for i in range(1, 10):
            if digits[i] != 0:
                digits[0], digits[i] = digits[i], digits[0]
                break
    return digits[:3]

def validate_input(user_input):
    # 校验输入是否是各位不重复的三位数
    if len(user_input) != 3 or not user_input.isdigit():
        return False
    return len(set(user_input)) == 3

# 生成目标三位数
target = generate_unique_three_digit()
print("已生成一个无重复数字的三位数,请开始猜测!")

while True:
    guess_str = input("请输入一个无重复数字的三位数:")
    if not validate_input(guess_str):
        print("输入无效,请输入各位数字不重复的三位数!")
        continue
    
    guess = [int(c) for c in guess_str]
    # 统计位置相同的+数量
    plus_count = sum(1 for t, g in zip(target, guess) if t == g)
    # 统计数字存在但位置不同的-数量
    common_digits = set(target) & set(guess)
    minus_count = len(common_digits) - plus_count
    
    # 输出结果
    result = "+" * plus_count + "-" * minus_count
    print(f"结果:{result}")
    
    # 猜对则结束游戏
    if plus_count == 3:
        print("恭喜你猜对了!")
        break

代码说明

  • generate_unique_three_digit():通过随机打乱数字列表的方式,高效生成无重复的三位数,同时保证百位不为0
  • validate_input():简洁校验输入的合法性,避免无效输入干扰游戏流程
  • 比对逻辑:用zip逐个位置对比统计+,用集合交集快速获取共同数字,再计算-的数量,逻辑清晰且无遗漏

内容的提问来源于stack exchange,提问作者Betül

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:03:28