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))

最初の print は 0 を返します 2 番目の print は p を返します

理由がわかりません、もしよろしければ教えていただけると助かります。

助けてくれた人に感謝します:)

4

4 に答える 4

3

インデックス作成は から始まり0ます。したがって、戦艦にはインデックス、、、、の項目が含ま01ます。23

最初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'です。

2 番目の呼び出しは次のように評価されます。

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

したがって、最後から 2 番目の行の最初のセルは['p','p','0','s']です'p'

len()Python では、最初のインデックスを計算せずに負のインデックスを使用できることに注意してください。関数から を削除する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]などをお試しください。


もう1つの提案。Google で Python を検索し、コンピューターにインストールします。私が正しければ、これはコードアカデミーからのものです。codecademy だけでは不十分です。Python スクリプトを作成して実行し、その出力を確認する必要があります。そうして初めて、あなたは学ぶことができるようになります。これを試してみてください。彼らはプログラミングを教える上でコードアカデミーよりも優れています。

于 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]、次の 2 つの部分に分けることができます。

battleships[c-b][a-1]

Python は最初はそのまま呼び出すのでbattleships[c-b]、戦艦から最後のリスト (4 番目の項目) を返します。つまり(インデックス作成は から開始)c-b3['0','0','0','0']0

2番目の部分が来ます:[a-1]

[a-1]返されたリストで呼び出されるようになりました。['0','0','0','0']

['0','0','0','0'][a-1]そのまま、python はこのリストから最初の項目を返しますa-10

だからあなたは「0」を得ました。

、 の異なる値にも同じことが適用されaますb

>>> 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 に答える