-4
for line in range(50):
    def show_table():   

        if len(table) == 0: 
            print('There are no cards on the table.')   
        else:
            for card in range(len(table)):
                print names[table[card][0]] + ' played a ' + str(table[card][1]) + '.'
4

1 に答える 1

1

最初の問題は、コロンが単語の後ではなく、 if 条件の最後にあることですif。そう:

if len(table) == 0: print('There are no cards on the table.')

または、より良い:

if len(table) == 0:
    print('There are no cards on the table.')

ただし、これを Python 2.7 と 3.3 の両方でテストすると、インデントに関するエラーではなく、小さなキャレットが余分なコロンを指している SyntaxError が実際に発生するはずです。

これは、実際のエラーは、その上の行にも何か問題があることを意味します。

次の問題は、2 つではなく 1 つのコロンを使用するワンライナー ショートカットしか使用できないことです。したがって、次のようになります。

else: for card in range(len(table)): print names[table[card][0]] + ' played a ' + str(table[card][1]) + '.' ?

コンパイラを混乱させるだけです。何がうまくいくかを調べようとするのではなく、これを慣用的な Python に分割する必要があります。

for line in range(50):

    def show_table():
        if len(table) == 0:
            print('There are no cards on the table.')
        else:
            for card in range(len(table)):
                print names[table[card][0]] + ' played a ' + str(table[card][1]) + '.' ?

50行ごとに新しい関数を定義して、その関数を決して呼び出さない理由はわかりませんが、これは少なくとも合法的なものになるでしょう...ほとんど.

最後の問題は次のとおりです。

print names[table[card][0]] + ' played a ' + str(table[card][1]) + '.' ?

まず、printPython 3.3 のステートメントではなく、通常の古い関数であるため、引数を指定して呼び出す必要があります。第二に、それ?は最後に、それが合理的に添付できるものに添付されていないように見えるので、修正する必要があるのはおそらく迷子のタイプミスです. そう:

print(names[table[card][0]] + ' played a ' + str(table[card][1]) + '.')

編集した質問に貼り付けた未加工のバージョン (コードとして貼り付けていないため、これは単なる推測です) を見ると、さらに 2 つの問題があるように見えます。

まず、最初のfor行は 1 列インデントされています。後で列 0 に戻ると、1 つではなく 2 つのへこみとしてカウントされます。

第 2 に、def show_table():行は 8 列目にインデントされていますが、その次は 0 列目に戻っています。ここに空の関数が必要だったのではないでしょうか? もしそうなら、それは合法ではありません。Python では、関数を空にすることはできません。passただし、次のステートメントでも同じ効果が得られます。

def show_table():
    pass
于 2012-12-06T02:09:00.200 に答える