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

算法脚本故障:循环中无法正常更新变量内容求助

问题分析与修复方案

核心问题

你的代码遇到重复数值无法继续的原因有两个:

  1. 区间计算逻辑缺陷:当区间缩小到相邻数值(比如a=49、b=50)时,原代码的新猜测值计算会和旧值重复,导致循环卡死。
  2. 冗余的数组操作:mas数组完全没必要,而且里面的mas.remove(0)分支会触发错误(数组里从来不会有0),属于无效代码。

修复后的代码

def func():
    try:
        a = int(input('Введите диапазон с(пример: 0):'))
        b = int(input('Введите диапазон до (пример: 100):'))
        # 初始猜测取区间真正的中点,原逻辑忽略了起始值a
        current_guess = (a + b) // 2
        print(f"Первая попытка: {current_guess}")
        
        while True:
            response = input(f'Ваше число больше {current_guess}? (если это ваше угаданное число то напишите "ты угадал!"):')
            
            if response.lower() == 'да':
                # 左边界+1,避免重复猜测同一个数
                a = current_guess + 1
                # 区间只剩一个数时直接猜它
                if a == b:
                    current_guess = b
                else:
                    current_guess = (a + b) // 2
                print(current_guess)
            
            elif response.lower() == 'нет':
                # 右边界-1,避免重复猜测同一个数
                b = current_guess - 1
                if a == b:
                    current_guess = a
                else:
                    current_guess = (a + b) // 2
                print(current_guess)
            
            elif response.lower() == 'ты угадал':
                print('ООО, отлично! Спасибо большое за игру!!')
                break
            
            else:
                print('Неверный ввод, попробуйте снова!')
                continue
            
            # 检查区间有效性,防止用户输入矛盾回答
            if a > b:
                print('Похоже, вы ввели противоречивые ответы!')
                break
                
    except ValueError:
        print('Пожалуйста, введите корректное целое число для диапазона!')

func()

关键修改说明

  • 移除冗余数组:直接用current_guess变量跟踪当前猜测值,简化逻辑,避免数组操作带来的错误。
  • 修正中点计算:原代码用b//2作为初始猜测,完全忽略了用户输入的起始值a,改成(a + b) // 2才是正确的区间中点。
  • 避免重复猜测:回答“Да”时左边界设为current_guess + 1,回答“Нет”时右边界设为current_guess - 1,确保下次猜测的数值不会重复。
  • 边界情况处理:当区间缩小到只剩一个数时,直接猜测该数,避免无效计算。
  • 输入容错优化:用lower()统一处理输入大小写,同时增加数值输入错误的捕获(比如用户输入非数字时提示)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:31:08