以下是代码
values = { (0,0) : "_", (0,1) : "_", (0,2) : "_",
(1,0) : "_", (1,1) : "_", (1,2) : "_",
(2,0) : "_", (2,1) : "_", (2,2) : "_" }
def draw_matrix():
matrix = "\t ___ ___ ___\n\t|_{(0,0)}_|_{(0,1)}_|_{(0,2)}_|\n\t|_{(1,0)}_|_{(1,1)}_|_{(1,2)}_|\n\t|_{(2,0)}_|_{(2,1)}_|_{(2,2)}_|"
print(matrix.format(**values))
print("\nUse numpad keys to enter your mark")
draw_matrix()
当我单独访问密钥值时,它可以正常工作。但是,由于某种原因,我无法使用.format()解压缩这个字典。
KeyError: '(0,0)'
如果我使用数字,它也是一样的。这将是一个井字游戏,所以我之前使用过小键盘。我不能将元组用作字符串,因为我需要使用它们来检查获胜条件。但这完全有效。
答案 0 :(得分:3)
解决问题的最简单方法是在矩阵字符串中的元组元素之间添加空格,以便(0,0)
=> (0, 0)
然后将元组转换为字符串表示形式:
matrix = "\t ___ ___ ___\n\t|_{(0, 0)}_|_{(0, 1)}_|_{(0, 2)}_|\n\t|_{(1, 0)}_|_{(1, 1)}_|_{(1, 2)}_|\n\t|_{(2, 0)}_|_{(2, 1)}_|_{(2, 2)}_|"
print(matrix.format(**{str(k): v for k,v in values.items()}))
___ ___ ___
|___|___|___|
|___|___|___|
|___|___|___|
虽然这种方法偶尔可以正常工作,但在未来的python版本中可能会破坏此代码(注意user2357112)。所以你应该在format
函数中使用有效的关键字参数。例如:
matrix = "\t ___ ___ ___\n\t|_{c0_0}_|_{c0_1}_|_{c0_2}_|\n\t|_{c1_0}_|_{c1_1}_|_{c1_2}_|\n\t|_{c2_0}_|_{c2_1}_|_{c2_2}_|"
print(matrix.format(**{"c%d_%d"%k: v for k,v in values.items()}))
答案 1 :(得分:0)
ipoteka提供的解决方案有效,谢谢。我还想弄清楚元组不能用作关键值的原因。它们似乎单独工作(值[(0,0)]),但在解压缩字典时却没有。
元组可以用作键,因为它们具有唯一的哈希值,但它们不能用于需要标识符的位置,例如format()