战舰猜格Python程序重复输入检测问题及运行异常求助
修正你的战舰猜格程序问题
我看了你的代码,问题主要出在输入逻辑顺序错误和重复输入检测的实现逻辑完全不对这两点上。咱们一步步来解决:
现有代码的核心问题
- 初始的
user_input = input()没有提示,而且循环里先覆盖输入再处理逻辑,导致第一次输入直接被跳过 - 你用
if input == "user_input"来检测重复,这完全是逻辑错误:input是Python的内置函数,"user_input"是字符串,两者永远不可能相等,而且你也没有存储之前猜过的位置 - 循环终止条件的逻辑顺序不对,应该先获取输入,再判断是否为空
修正后的代码
# 用一个列表存储已经猜过的位置,用来做重复检测 guessed_squares = [] while True: user_input = input("Guess: ") # 输入空行时直接终止循环 if user_input == "": break # 检查当前输入是否已经被猜过 if user_input in guessed_squares: print("You've chosen that square already") else: print(f"Hit {user_input}") # 把新猜的位置加入已猜列表,方便后续检测重复 guessed_squares.append(user_input)
关键修改点解释
- 新增
guessed_squares列表来记录所有已猜位置,这是实现重复检测的核心 - 调整循环逻辑:先获取带提示的输入,再判断是否为空行,为空就停止程序
- 重复检测改为
user_input in guessed_squares,这才是判断输入是否重复的正确方式 - 只有当输入是全新位置时,才打印"Hit"并将该位置加入已猜列表
这样运行就完全符合你预期的逻辑了:
Guess: C4 → Hit C4
Guess: C4 → You've chosen that square already
Guess: B2 → Hit B2
Guess: (空行)→ 程序停止
内容的提问来源于stack exchange,提问作者dumb_guy
相关产品推荐
相关产品推荐

