1

タイトルに記載されているPython言語に問題があります。

 for slovo in slova:
        if pygame.mouse.get_pressed()[0] and slovo["rect"].collidepoint(pygame.mouse.get_pos()):
            for i in range (len(randRijec)):
                if slovo["name"] in randRijec[i]:
                    if i == 0:
                        slovo1 = randRijec[i].upper()
                        prvoSlovo = 1
                    ...
                    ...
                else:
                    pogresnoBrojac += 1
            slova.remove(slovo)

したがって、このIFステートメントがであっても、ELSEステートメントが実行されています。ただし、 ifステートメントが実行される場合は、 elseステートメントをスキップする必要があります。

この問題を修正するにはどうすればよいですか?

ps私は以前にこの問題を数回経験しましたが、それを解決することができませんでした...

4

4 に答える 4

4

コードにはタブとスペースが混在しています。

cat -A test.py(Unixで)実行すると

     for slovo in slova:$
            if pygame.mouse.get_pressed()[0] and slovo["rect"].collidepoint(pygame.mouse.get_pos()):$
                for i in range (len(randRijec)):$
                    if slovo["name"] in randRijec[i]:$
                        if i == 0:$
                            slovo1 = randRijec[i].upper()$
                            prvoSlovo = 1$
^I^I^I^I^I^I...$
^I^I^I^I^I^I...$
                    else:$
                        pogresnoBrojac += 1$
                slova.remove(slovo)$

^I指示タブ。

したがって、ブロックは、ブロックが存在するように見えるelseインデントレベルにあるとは解釈されていません。

Pythonコードでは、インデントのためにタブとスペースを混在させないでください。を実行すると、スクリプトでタブとスペースが混在していないことを確認できますpython -t script.py

Pythonでは、インデントにスペースのみまたはタブのみを使用することを確約する必要があります。PEP8では、スペースのみのインデントを推奨しています。

reindent.pyプログラムを使用して、タブをスペースに変換できます。

于 2013-03-24T10:49:30.273 に答える
3

したがって、このIFステートメントが真であっても、ELSEステートメントが実行されています。

私はあなたにこれが起こることではないことを保証することができます。

あなたのコードのアウトラインでは、がループのif中にあることに気づきました。実際のコードで、がの代わりに誤って整列されていないforことを確認してください。私はこの間違いを何度も見ました。elseforif

Pythonでは、for-elseは有効な構成です。たとえば、以下は完全に有効なPythonです。

for i in range(10):
    if i < 100:
        pass
else:
    print 'In else clause'

実行すると、これは出力されIn else clauseます。

これを、実行時に何も出力されない次のものと比較してください。

for i in range(10):
    if i < 100:
        pass
    else:
        print 'In else clause'
于 2013-03-24T10:42:45.403 に答える
0

それは昔からの質問であり、まったく同じ問題のトラブルシューティングを行っていたときに遭遇しました-解決策は実際にはかなりばかげていて、おそらくそうでした-forループであるため、すべてのリスト要素を繰り返し処理しますこれらの要素の1つがif条件を満たさない場合、elseが自動的にトリガーされます。これはかなり自明ですが、初心者には見逃しがちです。少なくとも私の場合はそれが問題でした:)

于 2019-08-11T22:31:23.500 に答える
-1

次の解決策は私の問題を修正しました:

    for slovo in slova:
        if pygame.mouse.get_pressed()[0] and slovo["rect"].collidepoint(pygame.mouse.get_pos()):
            xy = 0
            for i in range (len(randRijec)):
                if slovo["name"] in randRijec[i]:
                    xy = 1
                    if i == 0:
                        slovo1 = randRijec[i].upper()
                        prvoSlovo = 1
                        break
                    if i == 1:
                        slovo2 = randRijec[i].upper()
                        drugoSlovo = 1
                        break
            slova.remove(slovo)
            if xy == 0:
                pogresnoBrojac += 1

    ...
    ...
    ...

    xy = 1
    pygame.display.update()
    time.tick(value)

そのため、コードを正常に機能させるxyカウンターを追加しました。IFステートメントが満たされるとxy1になり、 IFステートメントが満たされない場合はxyが0に設定され、この「else」ステートメントが実行されます。コードの最後で、この「else」( xy == 0の場合)ブロックが実行されないように、 xyが再び1に設定されます。

于 2013-03-24T11:29:17.960 に答える