0

これは宿題の質問で、「単語を選んでください。ユーザーに文字を入力してもらいます。文字が単語に何回含まれているかを確認し、画面に数字を出力してください。」と尋ねられます。これまでのところ、私はそれをそのまま書きました、そしてそれはうまく働いているようです:

word = str("python")
letters = len(word)
attempt = str(raw_input ("Enter a letter: "))

while attempt in word:
    count = "python".count(attempt)
    if attempt in word:
                    print "This letter is present ",count, "time(s)."
    attempt = str(raw_input ("Enter another letter: "))

while attempt not in word:
    attempt = str(raw_input ("This letter is not present, enter another letter: "))
    count = "python".count(attempt)
    if attempt in word:
             print "This letter is present ",count, "time(s)."

しかし、文字を入力していると、プログラムが停止し、入力を受け取らなくなることがあります。私は何が間違っているのですか?私はプログラミングに不慣れであるため、コードが非常にずさんで、記述が不十分である場合は、お詫び申し上げます。ありがとう。

4

2 に答える 2

5

これがあなたが得ているものであるかどうかはわかりませんが、whileループは次々に実行されます。両方が常に適用されるわけではありません。したがって、最初のwhileは、「ユーザーが単語に含まれる文字を入力する限りこれを実行し続ける」ことを意味し、ユーザーが単語に文字を入力する限り、そのループは実行を継続します。ユーザーが単語に含まれていない1文字を入力するとすぐに、ループが終了し、2番目のループに進みます。実行が最初のループに戻ることはありません。同様に、2番目のループに入ると、その単語に含まれる文字を入力する、ループが終了します。これでプログラムは終了ですので、プログラムは終了します。

したがって、単語に含まれていない文字を入力してから、単語に含まれている文字を入力すると、プログラムは終了します。最初に「x」を入力してから「y」を入力すると、停止します。

私はあなたが本当に欲しいものはもっと似ていると思います:

while True:
    attempt = raw_input("Enter a letter:")
    if attempt in word:
        print "That was in the word", word.count(attempt), "times"
    else:
        print "That was not in the word"

もちろん、このプログラムは、Ctrl-Breakなどを押して閉じるまで無限にループします。

コードには他にもいくつか問題があります。「python」はstrすでに文字列であるため、で囲む必要はありません。また、すでに文字列を返しているraw_inputため、文字列でラップする必要はありません。raw_inputと呼ばれる変数を定義しますlettersが、決して使用しないでください。

また、最初に定義word = "python"しますが、後でword変数を使用する場合もあれば、コードに文字列「python」を再入力する場合もあります。このプログラムでは問題ではありませんが、一般に、変数を1回評価して、それをどこでも使用することをお勧めします。そうしないと、別の単語を使用することにした場合、多くの場所で変更する必要があります。これにより、1つの場所で変更するのを忘れて、バグが発生する可能性が高くなります。

最後に、 1文字だけでなく、部分文字列inを操作することに注意してください。countしたがって、入力として「yth」を入力しても機能し、カウントは1になります。これは必ずしも問題ではありませんが、文字を要求している場合でも、人は何でも入力でき、どのような長さでも「単語」に含まれます。

于 2012-09-18T02:42:35.550 に答える
0

プログラムは2つのループでシーケンシャルです。これらのループが渡されると、プログラムは終了します。

ループ1:入力が単語内にある間に実行します。

この条件が失敗するとすぐに、ループ2にフォールスルーします。

ループ2:入力が単語に見つからないときに実行します。

この状態が失敗するとすぐに、プログラムの最後まで失敗します。

したがって、「悪い」入力を1回入力し、次に「良い」入力を1回入力すると、プログラムは終了します。

あなたがしたいのは、両方のループを1つにラップし、if-elseを使用してそれぞれの特定の入力がどれであるかを決定することです。

于 2012-09-18T02:42:52.123 に答える