算法脚本故障:循环中无法正常更新变量内容求助
问题分析与修复方案
核心问题
你的代码遇到重复数值无法继续的原因有两个:
- 区间计算逻辑缺陷:当区间缩小到相邻数值(比如
a=49、b=50)时,原代码的新猜测值计算会和旧值重复,导致循环卡死。 - 冗余的数组操作:
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
相关产品推荐
相关产品推荐

