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

Python列表项可否同时存储字符串和整型?简易海战游戏坐标替换问题

问题分析
  • 你使用"A3" or 88的方式无法实现单列表项存两个值的需求。Python中or是逻辑运算符,会返回第一个布尔值为真的对象,非空字符串布尔值为真,因此你定义的battleship_placement列表中实际只存储了坐标字符串,索引值被完全忽略。
  • X出现在最前面的原因是代码逻辑错误:命中目标后你已经调用remove()将坐标从列表移除,player_guess in battleship_placement的返回值为False,Python中False等价于整数0,因此你永远在修改列表索引0的位置,X自然出现在开头。
解决方案

推荐用字典存储坐标和对应列表索引的映射,同时可通过通用转换逻辑避免手动计算索引出错,修改后可正常运行的代码如下:

import time

ocean_table = ("  A B C D E F\n" +
               "1 # # # # # #\n" +
               "2 # # # # # #\n" +
               "3 # # # # # #\n" +
               "4 # # # # # #\n" +
               "5 # # # # # #\n" +
               "6 # # # # # #\n")
print(ocean_table)

# 坐标转棋盘列表索引的转换函数
def coord_to_index(coord):
    col_char = coord[0]
    row_num = int(coord[1:])
    col = ord(col_char) - ord('A')
    # 单行长13字符,表头占1行,行号对应起始索引为 13 * 行号
    start_idx = 13 * row_num
    # 列偏移:行号(1位)+空格(1位)=2,每列占2位(#加空格)
    offset = 2 + col * 2
    return start_idx + offset

# 战舰坐标列表
battleship_placement = ["A3", "A4", "A5", "C2", "D3", "E4", "F5"]
# 预生成坐标与索引的映射关系
ship_index_map = {coord: coord_to_index(coord) for coord in battleship_placement}

player_guess = input("Enter your coordinates: ").upper()

if player_guess in battleship_placement:
    battleship_placement.remove(player_guess)
    ocean_list = list(ocean_table)
    # 取对应坐标的索引修改为X
    ocean_list[ship_index_map[player_guess]] = "X"
    ocean_table = "".join(ocean_list)
    print("You got a hit!")
else:
    print("\nYou missed the target")

time.sleep(1.4)
print(ocean_table)

运行后输入正确的战舰坐标,对应位置的#就会被替换为X,不会再出现X跑到开头的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:39:00