Python字典列表中的项
我正在创建一个战舰游戏,我有一个查找字典,其中舰船和坐标是它们的值,它们都保存在一个主类中的self.\u dict dictionary对象中Python字典列表中的项,python,list,dictionary,conditional-statements,Python,List,Dictionary,Conditional Statements,我正在创建一个战舰游戏,我有一个查找字典,其中舰船和坐标是它们的值,它们都保存在一个主类中的self.\u dict dictionary对象中 {'battleship': ['A1', 'A2', 'A3', 'A4'], 'cruiser': ['E1', 'F1', 'G3'], 'destroyer': ['D5', 'D6'], 'submarine': ['I9']} 当条目不在船舶坐标中时,我的代码应放在板上“*”,当条目在坐标中时,我的代码应放在板上“X” 出于某种原因,代码
{'battleship': ['A1', 'A2', 'A3', 'A4'], 'cruiser': ['E1', 'F1', 'G3'], 'destroyer': ['D5', 'D6'], 'submarine': ['I9']}
当条目不在船舶坐标中时,我的代码应放在板上“*”,当条目在坐标中时,我的代码应放在板上“X”
出于某种原因,代码没有读取值中的快照,而是打印未命中的“*”快照
changin_line
变量,是插入到游戏板中的新行,包括标记
x_index
变量,是拾取的坐标,参考标记应放置的位置
shot = "A3"
if shot not in self.__dict.values():
changin_line.insert(x_index, "*")
else:
changin_line.insert(x_index, "X")
self.\u dict.values()
是一个列表列表,而不是一个位置列表。因此,您将字符串与列表进行比较,这永远不会是真的
您需要向下钻取另一个级别:
if not any(shot in ship_pos for ship_pos in self.__dict.values()):
changin_line.insert(x_index, "*")
else:
changin_line.insert(x_index, "X")
最好是反转数据结构。使用坐标作为关键点,而不是使用船舶类型作为关键点:
{'A1': 'battleship', 'A2': 'battleship', 'A3': 'battleship', 'A4': 'battleship',
'E1': 'cruiser', 'F1': 'cruiser', 'G1': 'cruiser',
...
}
然后您可以测试是否在self中拍摄。\u dict:
。如果你想知道哪艘飞船被击中,你只需要知道赛尔夫
顺便说一句,\u dict
对于这个变量来说似乎不是一个好名字。将其称为类似于ship\u positions
self.\u dict.values()
是一个列表,而不是一个位置列表。因此,您将字符串与列表进行比较,这永远不会是真的
您需要向下钻取另一个级别:
if not any(shot in ship_pos for ship_pos in self.__dict.values()):
changin_line.insert(x_index, "*")
else:
changin_line.insert(x_index, "X")
最好是反转数据结构。使用坐标作为关键点,而不是使用船舶类型作为关键点:
{'A1': 'battleship', 'A2': 'battleship', 'A3': 'battleship', 'A4': 'battleship',
'E1': 'cruiser', 'F1': 'cruiser', 'G1': 'cruiser',
...
}
然后您可以测试是否在self中拍摄。\u dict:
。如果你想知道哪艘飞船被击中,你只需要知道赛尔夫
顺便说一句,
\u dict
对于这个变量来说似乎不是一个好名字。将其称为类似于ship\u positions
self的名称。\u dict.values()
是字符串列表的一个可数形式。它只能包含字符串列表,不能包含字符串。我以前使用过它,但没有.values(),但它仍然不匹配。values()
不是问题。巡洋舰是否被分成两部分?它怎么可能在E1、F1和G3?它应该在对角线上,中间在F2处吗?我承认我玩《战舰》已经快50年了,但我想我仍然记得一些基本的东西。G3是一个错误,它应该是G1,已经修复了,但与主要的:Dself相比,这仍然是一个小问题。u dict.values()
是字符串列表的一部分。它只能包含字符串列表,不能包含字符串。我以前使用过它,但没有.values(),但它仍然不匹配。values()
不是问题。巡洋舰是否被分成两部分?它怎么可能在E1、F1和G3?它应该在对角线上,中间在F2处吗?我承认我玩战舰已经快50年了,但我想我仍然记得基本的东西。G3是一个错误,它应该是G1,已经修复了,但与主版本相比,这仍然是一个小问题:我尝试过,没有为我工作:这个标记“*”被设置为未命中,因此,当我尝试一个现有的职位时,它给出了这个标志,我认为它不起作用。现在我只是翻转了一下标志,它就如预期的那样工作了。谢谢!哦,对不起,我得到了backardi尝试的条件,不工作对我来说仍然有效:这个标记“*”被设置为未命中,因此当我尝试一个现有的职位时,它给出了那个标志,我认为它不工作。现在我只是翻转了一下标志,它就如预期的那样工作了。谢谢!哦,对不起,我把条件倒过来了