-4

現在、私はプログラミングコースを行っていますが、この質問に行き詰まっています。送信をクリックすると、無限ループがあると表示されます。これを何時間もテストしましたが、見つからないようです。

import re
text = ""
print("Hello, my name is Eliza. What would you like to talk about?")
while text != "go away":
  if text != "go away":
    text = input()
    text = text.lower()
    if re.search(r"\bfeel\b", text) is not None:
      print("Do you often feel that way?")
    elif re.search(r"\bi am\b", text) is not None:
      m = str(re.findall('i am\w* (\w+)',text))
      m = re.sub('[\'\]\[]', '', m)
      print("How long have you been",m+"?")
    elif "you" in text:
        if "me" in text:
          m = str(re.findall('you\w* (\w.*)',text))
          m = m.replace("me","you")
          m = re.sub('[\'?\]\[]', '', m)
          print("What makes you think I",m+"?")
        else:
          print("Please go on")
    elif text == "go away":
      text = "go away"
      break
    else:
      print("Please go on")
  else:
    text = "go away"

print("I hope I have helped you!")

これは私に与えるエラーです。

あなたのプログラムはあまりにも多くの出力を生成しました! これはおそらく、コード内の無限ループが原因です。

4

4 に答える 4

2

あなたのコードには冗長性がありますが、私にとってはうまくいきます。Python バージョン 2 と 3 の間にはいくつかの重要な違いがあるため、それを指定する必要があります (特に、関数input()とについてはraw_input()。Python 2 でコードを実行しているので、入力プロンプトに文字列を指定しました。

Hello, my name is Eliza. What would you like to talk about?
"hi, I am askewchan"
('How long have you been', 'askewchan?')
"go away"
I hope I have helped you!

これは冗長性の例です:

while text != "go away":
    if text != "go away":
        ...
    else:
        text = "go away"

while ループは text != "go away" の場合にのみ継続するため、最初の if は常に true になります。この if-else ステートメントは必要ありません。

于 2013-09-06T22:28:03.227 に答える
1

他のすべての回答はコードの問題を指摘しており、それらは正しい...しかし、自動化されたコードジャッジから得られる結果(と思われるもの)については説明していません。

'go away'プログラムが終了に失敗する唯一の方法は、入力に遭遇しない場合です。正確 に でなければならないことに注意してください'go away'。余分な空白がある場合、一致しません。たとえば'go away '、プログラムを終了しません。また、自動ジャッジがプログラムに予期しない空白を与えている可能性があります (これは、行末の不一致の問題が原因である可能性もあります)。

受信した入力から余分な空白を取り除くことで、このシナリオを防ぐことができます。たとえば、次のように変更できます。

text = input()

text = input().strip()

それが役立つかどうかを確認してください。

于 2013-09-06T23:19:36.743 に答える
1

したがって、ここには重大な論理エラーがあります。

text != "go away" の間、ループが続きます。ただし、最初にチェックするのは、テキスト != "go away" です。これは冗長です。確認したところです。

うまくいかないのはinput()の問題だと思います。それはあなたを促していないようです。

于 2013-09-06T22:28:14.013 に答える
0

while text != "go away":
    if text != "go away":
        # ...
    else:
        text = "go away"

、私たちはすでにそれを確立しましたtext != "go away"。このコードはダメです。

于 2013-09-06T22:27:47.237 に答える