0

私は春休みにプロジェクトを開始することに決めました.ウェブコミックからキャラクターを取り出し、そのキャラクターが言っているようにテキストを翻訳します. 1 キャラ分はうまく動くようになったのですが、少し問題があります。

def meulin():
    replace = {'EE':'33', 'ee':'33'}
    originalText = input('Input text -> ')
    while True:
        for i, j in replace.items():
            if i in originalText:
                newText = originalText.replace(i,j)
                print(newText.upper())
            else:
                print(originalText.upper())
        originalText = input('Input text (type "quit" to end program.) -> ')
        if originalText in ('quit', 'end', 'exit', 'stop', 'q'):
            sys.exit('Program ended.')

PyScripter のデバッガーを実行すると、入力を取得した後、プログラムはそのfor i, j in replace.items():行から開始し、if ステートメントを完全にスキップして、else ステートメントに移動し、次に if ステートメントに移動することがわかりました。だからただ投稿するのではなく

CH33SE

それは投稿します

チーズ

CH33SE

else ステートメントを完全に削除することはできますが、元のテキストはまったく投稿されません。任意の提案をいただければ幸いです。

4

1 に答える 1

1
for i, j in replace.items():
    if i in originalText:
        newText = originalText.replace(i,j)
        print(newText.upper())
        break
else:
    print(originalText.upper())

このbreakステートメントは、最初の置換後にループが停止することを意味します。Python では、ステートメントによってループが停止されていない場合にのみ実行されるループのelse句を使用できます。forbreak

出力が 2 回表示された理由は、dict に 2 つの項目があるためです。置換が一致しない場合にのみ、元のテキストを印刷しようとしていると思います。

于 2013-03-23T03:08:24.073 に答える