Python while循环运行异常 player_strikes_left返回错误值问题排查
问题根源
- while循环的终止条件仅会在每轮循环启动前校验,你在嵌套的for循环中扣减
player_strikes_left时,即使数值已经小于0,也必须等完整遍历完possible_answers后才会触发while的条件判断,这是player_strikes_left出现负数的核心原因 - 用户输入逻辑写在while循环外部,玩家全程只会输入一次答案,不会每轮循环重新获取新的输入
- 正确判断逻辑与遍历逻辑冲突:你遍历了整个
possible_answers列表,只要某一个item不匹配就扣一次strike,假设possible_answers有8个元素,答错一次就会连续扣8次strike,自然会出现-5、-4这类不符合预期的数值 - 代码中判断正确的条件
player_answer in answer里的answer变量未定义,属于逻辑编写错误
修复后代码
player_strikes_left = 3 player_score = 0 # 此处为示例possible_answers,可替换为你的实际业务数据 possible_answers = [("A", 10), ("B", 20), ("C", 15)] # 提前提取答案映射,避免循环内重复遍历 correct_answer_set = {item[0] for item in possible_answers} answer_point_map = {item[0]: item[1] for item in possible_answers} while player_strikes_left > 0: # 输入逻辑移到循环内部,每轮重新获取用户答案 player_answer = input("player answer: ").upper() if player_answer in correct_answer_set: print("true") player_score += answer_point_map[player_answer] else: # 答错仅扣一次strike,符合业务逻辑 player_strikes_left -= 1 print(f"答错,剩余可尝试次数:{player_strikes_left}") print(f'player score: {player_score}, player strikes left: {player_strikes_left}')
内容的提问来源于stack exchange,提问作者Nevzat
相关产品推荐
相关产品推荐

