Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python字典列表中的项_Python_List_Dictionary_Conditional Statements - Fatal编程技术网

Python字典列表中的项

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” 出于某种原因,代码

我正在创建一个战舰游戏,我有一个查找字典,其中舰船和坐标是它们的值,它们都保存在一个主类中的self.\u dict dictionary对象中

{'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,已经修复了,但与主要的:D
self相比,这仍然是一个小问题。u dict.values()
是字符串列表的一部分。它只能包含字符串列表,不能包含字符串。我以前使用过它,但没有.values(),但它仍然不匹配。
values()
不是问题。巡洋舰是否被分成两部分?它怎么可能在E1、F1和G3?它应该在对角线上,中间在F2处吗?我承认我玩战舰已经快50年了,但我想我仍然记得基本的东西。G3是一个错误,它应该是G1,已经修复了,但与主版本相比,这仍然是一个小问题:我尝试过,没有为我工作:这个标记“*”被设置为未命中,因此,当我尝试一个现有的职位时,它给出了这个标志,我认为它不起作用。现在我只是翻转了一下标志,它就如预期的那样工作了。谢谢!哦,对不起,我得到了backardi尝试的条件,不工作对我来说仍然有效:这个标记“*”被设置为未命中,因此当我尝试一个现有的职位时,它给出了那个标志,我认为它不工作。现在我只是翻转了一下标志,它就如预期的那样工作了。谢谢!哦,对不起,我把条件倒过来了