2

私はここでPythonを学んでいますサンプルコードです

girls = ['alice','bernice','clarice']
boys = ['chris','arnold','bob']
letterGirls = {}
for girl in girls:
    letterGirls.setdefault(girl[0],[]).append(girl)
  print [b+'+'+g for b in boys for g in letterGirls[b[0]]]

次のエラーが発生します

 File "<stdin>", line 3
    print [b+'+'+g for b in boys for g in letterGirls[b[0]]]
                                                           ^
IndentationError: unindent does not match any outer indentation level

1)上記のエラーを解決し
たい2)Pythonのforループ内にコードブロックを書き込む方法を知りたいたとえば上記の例では、最初のfor行の下に空白を残さない場合はターミナルでチェックし、構文は次のようになります間違っていますPythonでforループコードブロックにスペースを与える方法が明確ではありませんPythonにスペースを残すことがあります

for girl in girls:
    letterGirls.setdefault(girl[0],[]).append(girl)
  print [b+'+'+g for b in boys for g in letterGirls[b[0]]]


以下の提案に基づいて更新しましたコードを更新しましたprintステートメントは与えられた例のforループの外にあるので、ubuntuターミナルでプログラムを更新しまし

girls = ['alice','bernice','clarice']
boys = ['chris','arnold','bob']
letterGirls = {}
for girl in girls:
    letterGirls.setdefault(girl[0],[]).append(girl)
print [b+'+'+g for b in boys for g in letterGirls[b[0]]]

しかし、それでも上記のコードでエラーが発生します

print[b+'+'+g for b in boys for g in letterGirls[b[0]]]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'c'

私はここで端末でプログラムを書いているので、私の端末はまさにそのように見えます

@ubuntu:~$ python
Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> girls = ['alice','bernice','clarice']
>>> boys = ['chris','arnold','bob']
>>> letterGirls = {}
>>> for girl in girls:
...     letterGirls.setdefault(girl[0],[]).append(girl)
... print [b+'+'+g for b in boys for g in letterGirls[b[0]]]
  File "<stdin>", line 3
    print [b+'+'+g for b in boys for g in letterGirls[b[0]]]
        ^
SyntaxError: invalid syntax
>>> print[b+'+'+g for b in boys for g in letterGirls[b[0]]]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'c'
4

3 に答える 3

2

同じレベルのコードは同じインデントを使用する必要があるため、「for」ステートメントと「print」は1つの列(同じインデント)にある必要があります。推奨される方法は、4つのスペースを使用してレベルからレベルをインデントすることです。コードを次のように変更します。

for girl in girls:
    letterGirls.setdefault(girl[0],[]).append(girl)
print [b+'+'+g for b in boys for g in letterGirls[b[0]]]

あなたへの私の提案は、PEP8ガイドでもっと読むことですこれはあなたの人生を楽にするでしょう

于 2013-03-27T08:29:34.463 に答える
0

1)「print」ステートメントに間違ったインデントがあります。Pythonの同じレベルのブロックに対して4つのスペースをインデントしてください。この場合、「print」の前にインデントしないでください。

girls = ['alice','bernice','clarice']
boys = ['chris','arnold','bob']
letterGirls = {}
for girl in girls:
    letterGirls.setdefault(girl[0],[]).append(girl)
print [b+'+'+g for b in boys for g in letterGirls[b[0]]]

出力:

['chris+clarice', 'arnold+alice', 'bob+bernice']

2)ループ内にブロックステートメントを作成する場合は、すべてのステートメントのインデントレベルが同じであることを確認してください。

for girl in girls:
    letterGirls.setdefault(girl[0],[]).append(girl)
    print "This is in the loop"
print "This is not in the loop"
于 2013-03-27T08:31:04.173 に答える
0

ループの外側にステートメントを出力する場合:

for girl in girls:
    letterGirls.setdefault(girl[0],[]).append(girl)
print [b+'+'+g for b in boys for g in letterGirls[b[0]]]

ループ内にステートメントを出力する場合:

for girl in girls:
    letterGirls.setdefault(girl[0],[]).append(girl)
    print [b+'+'+g for b in boys for g in letterGirls[b[0]]]

インデントは整列する必要があります。詳細はこちらをご覧ください。インデントレベルごとに4つのスペースを使用する必要があります。

たとえば、コードに別のレベルが必要な場合:

for ():
    print x
    for():
        print x

すべてのインデントレベルで、スペースは4でなければなりません。

PS。これは、whileループやif/else条件などの他のコマンドを使用する場合でも適用する必要があるものです。

于 2013-03-27T08:31:04.673 に答える