3

这个问题在python中:

battleships = [['0','p','0','s'],
               ['0','p','0','s'],
               ['p','p','0','s'],
               ['0','0','0','0']]
def fun(a,b,bships): 
    c = len(bships)
    return bships[c-b][a-1]

print(fun(1,1,battleships))
print(fun(1,2,battleships))

第一次打印给出 0 第二次打印给出 p

我不知道为什么,如果您能给出解释,将不胜感激。

感谢帮助的人:)

4

4 回答 4

3

索引从 开始0。所以战列舰包含索引为0, 1, 2,的项目3

首先len(bships)获取列表列表的长度battleships,即 4。

bships[c-b][a-1]通过它们的索引值访问列表中的项目。因此,在您第一次调用该函数时:

print(fun(1,1,battleships))

bships[4-1][1-1]bships[3][0]哪个是['0','0','0','0'][0]哪个是0

于 2013-06-23T10:53:44.860 回答
3

您可以通过将计算替换为实际值来轻松解决:

在第一次通话中,您正在索引:

bships[c-b][a-1] == bships[4-1][1-1] == bships[3][0]

从 0 开始计数,这是最后一行,['0','0','0','0']第一个元素,'0'

第二个调用计算为:

bships[c-b][a-1] == bships[4-2][1-1] == bships[2][0]

所以倒数第二行的第一个单元格['p','p','0','s']是 a 'p'

请注意,在 Python 中,您可以使用负索引而不计算第一个索引len()c从你的函数中删除它,它的工作原理都是一样的:

>>> battleships = [['0','p','0','s'],
...                ['0','p','0','s'],
...                ['p','p','0','s'],
...                ['0','0','0','0']]
>>> def fun(a,b,bships): 
...     return bships[-b][a-1]
... 
>>> print(fun(1,1,battleships))
0
>>> print(fun(1,2,battleships))
p

这是因为 Python 将负索引视为从末尾开始计数;在内部,它将使用序列的长度(与序列一起存储)来计算相同的东西,但速度更快。

于 2013-06-23T10:55:46.597 回答
1

当您在理解编程中的任何新事物时遇到问题时,请稍微更改一下程序。

我给你举个例子。我改变了一点。

battleships = [['0','p','0','s','3'],
               ['0','p','0','s','8'],
               ['p','p','0','s','2']]

print "len(battleships) =",len(battleships)
print "battleships[0] =",battleships[0]
print "battleships[1] =",battleships[1]
print "battleships[2] =",battleships[2]
print "len(battleships[0]) =", len(battleships[0])

当我运行它时,输出是

len(battleships) = 3
battleships[0] = ['0', 'p', '0', 's', '3']
battleships[1] = ['0', 'p', '0', 's', '8']
battleships[2] = ['p', 'p', '0', 's', '2']
len(battleships[0]) = 5

将输出语句与打印语句匹配。这会有所帮助。

试试print battleships[0][1]等等。


还有一个建议。在 google 上搜索 Python 并将其安装在您的计算机上。如果我是正确的,这是来自 codecademy。仅使用 codecademy 是不够的。您将需要编写 Python 脚本、运行它们并查看它们的输出。只有在那之后,您才能学习。试试这个。他们在教授编程方面比 codecademy 更好。

于 2013-06-23T11:05:31.303 回答
1
>>> battleships = [['0','p','0','s'],
...                ['0','p','0','s'],
...                ['p','p','0','s'],
...                ['0','0','0','0']]
>>> 
>>> a = 1 
>>> b = 1
>>> c = len(battleships)
>>> c-b,a-1       
(3, 0)

现在battleships[c-b][a-1]可以分为两部分:

battleships[c-b][a-1]

battleships[c-b]Python 首先按原样调用c-b3因此它返回战舰的最后一个列表(第 4 项)。即['0','0','0','0'](索引从 开始0

现在是第二部分:[a-1]

现在[a-1]在返回的列表上调用,即['0','0','0','0']

['0','0','0','0'][a-1]照原样a-10python 返回此列表中的第一项。

所以你得到'0'。

同样适用于 , 的不同值ab

>>> a = 1
>>> b = 2
>>> c-b,a-1
(2, 0)
>>> battleships[c-b]
['p', 'p', '0', 's']
>>> battleships[c-b][a-1]   #calls  ['p', 'p', '0', 's'][0]
'p'
于 2013-06-23T10:58:12.913 回答