我是python(和编码)的新手,我只想根据玩家的愿望创建一个棋盘(用于控制台游戏).
基本上就是这个......
import array
print("What size do you want the board?")
Boardsize = input()
Tablero = array('b' [Boardsize, Boardsize])
for w in Boardsize:
for h in Boardsize:
Boardsize(w)(h).append('.')
print (Tablero)
Run Code Online (Sandbox Code Playgroud)
至少这是我的想法,但编译器说:
Tablero = array('b'[Boardsize, Boardsize])
TypeError: string indices must be integers
Run Code Online (Sandbox Code Playgroud)
nin*_*cko 20
这是怎么回事
input()返回一个字符串(你键入的字符,例如"123"),但是你得到的是TypeError因为你正在将字符串传递给需要数字的字符串(例如123,没有引号).
解
修复程序通过将字符串传递给int(...)构造函数将字符串转换为数字,例如int(input())(就像int("12")会给你一样12).
如果你不是编程的新手,我想道歉,这是一个愚蠢的错误,但如果你是新的,这是我的思考过程,帮助我调试问题.我希望你不要觉得它居高临下; 我正在分享我的思考过程,所以在类似情况下的其他人可以修复类似的错误.
如何诊断这些问题
您可以通过一次回溯一步来调试如下:
首先进行测试,以确保您了解如何array正确使用.我会尝试制作一个大小为3x3的数组,以确保我理解API.
>>> array(..., [3,3])
<array object at 0x...>
Run Code Online (Sandbox Code Playgroud)
好的,那很有效!array如果我输入数字,我们似乎能够正确地制作array(..., [3,3]).现在让我们来试试吧input().
>>> boardsize = input()
>>> array(..., [boardsize, boardsize])
TypeError: string indices must be integers
Run Code Online (Sandbox Code Playgroud)
这很奇怪.我刚刚制作了一个3x3阵列array(..., [3,3]),为什么不起作用array(..., [boardsize, boardsize])?让我们看一下boardsize真正的价值:
>>> boardsize
'3'
Run Code Online (Sandbox Code Playgroud)
有多奇怪,价值似乎是3,对吧?让我仔细检查以确保.
>>> boardsize == 3
False
Run Code Online (Sandbox Code Playgroud)
等等,'3'!= 3 ??? '3'与3不一样怎么样?
>>> type(boardsize)
<class 'str'>
Run Code Online (Sandbox Code Playgroud)
啊哈!在'我看到的意思是它是一个字符串.必须是input返回字符串的情况.这是有道理的,因为例如我可以输入"cat"和make boardsize == 'cat',我不应该期望python能够判断任意字符串是否是数字.
>>> '3'
'3'
>>> 3
3
>>> boardsize
'3'
Run Code Online (Sandbox Code Playgroud)
修复将是google for python convert string to number:second hit:"使用内置int(...)函数
tl; dr:向后走向错误,在每一步都要自我检查.当您开始制作大型程序时,您可以使用自动调用的健全性检查功能和"单元测试"来简化调试.
(旁注:如果你很好奇如何打印对象,它来自__repr__所有类定义的特殊方法.调用repr(something)将非常明确地显示什么类型的对象something; repr在您输入的交互式解释器的输出上自动调用. )