Python实现Mastermind游戏时while循环无限运行问题求助
问题根因与修复方案
代码死循环由3个核心逻辑错误共同导致,修复点如下:
- 全局
guess列表没有在每次猜测完成后清空,第一次猜完后列表长度永远为4,后续调用make_guess时不会再接收用户输入、也不会更新amountOfGuesses,循环判断条件永远满足 - 猜对成功后没有加
break退出外层while循环,就算触发了获胜逻辑也会一直重复执行 amountOfGuesses计数逻辑错误,原代码是每输入1个有效数字就加1,实际应该是每完成1次4位完整猜测加1- 额外优化:循环上限
<=7会允许猜8次,和提示的7次规则不符,调整为<7,同时补充7次没猜对的失败提示
import random def generate_code(): """生成4位随机密码,每位取值0-5""" code = [] for i in range(0,4): num = random.randint(0,5) code.append(num) return code def make_guess(): """接收用户的一次4位猜测""" guess = [] while len(guess) < 4: element = input("请逐位输入你的猜测数字:" ) if element.isnumeric(): element = int(element) if 0 <= element <=5: guess.append(element) else: print("数字必须在0到5之间") else: print("请输入0到5之间的有效数字") return guess def right_position(guess, code): """计算位置和数值都正确的位数""" count = 0 for i in range(4): if guess[i] == code[i]: count +=1 return count def wrong_position(guess, code): """计算数值正确但位置错误的位数""" count = 0 temp_code = code[:] for num in guess: if num in temp_code: temp_code.remove(num) count +=1 # 减去位置正确的部分,剩下的就是位置错误的有效计数 count = count - right_position(guess, code) return count # 变量初始化 code = generate_code() amount_of_guesses = 0 print("欢迎来到珠玑妙算(Mastermind)游戏。\n你共有7次机会猜测4位密码,每位密码取值为0到5之间的整数。") while amount_of_guesses < 7: guess = make_guess() amount_of_guesses +=1 right = right_position(guess, code) wrong = wrong_position(guess, code) print(f"你有{right}位数字数值和位置都正确") print(f"你有{wrong}位数字数值正确但位置错误") if guess == code: print(f"恭喜你猜对了!你一共用了{amount_of_guesses}次机会。") break else: # 循环正常结束说明7次都没猜对 print(f"很遗憾,你用完了7次猜测机会,正确密码是{code}")
内容的提问来源于stack exchange,提问作者780_APM
相关产品推荐
相关产品推荐

