1

私はpythonが初めてです。同じデータが複数回入力されたときに異なる応答を返すスクリプトを作成しようとしています。コードは次のようになります。

def loop() :
    Repeat = 0
    response = raw_input("enter something : ")
    if response == "hi"
        Repeat += 1
        print "hello"
        loop()
        if Repeat > 2 :
            print "you have already said hi"
            loop()


def main() :
    loop()
    raw_input()

main()

上記のコードは機能しません。できれば、両方の条件をチェックするステートメントが必要ですが、これを行う方法がよくわかりません。

4

3 に答える 3

1

dict単語/カウントを保存するためにを使用します。次に、その単語が辞書にあるかどうかを問い合わせて、カウントを更新できます...

words = {}
while True:
    word = raw_input("Say something:")
    if word in words:
       words[word] += 1
       print "you already said ",words[word]
       continue
    else:
       words[word] = 0
       #...

try/を使用してこれを行うこともできますがexcept、最初は簡単に始めたいと思いました...

于 2012-10-24T16:30:35.947 に答える
1

このようなことを試してください:

def loop(rep=None):
    rep=rep if rep else set()  #use a set or list to store the responses
    response=raw_input("enter something : ")
    if response not in rep:                    #if the response is not found in rep
        rep.add(response)                      #store response in rep   
        print "hello"
        loop(rep)                              #pass rep while calling loop()
    else:
        print "You've already said {0}".format(response)    #if response is found 
        loop(rep)
loop()        

出力:

enter something : hi
hello
enter something : hi
You've already said hi
enter something : foo
hello
enter something : bar
hello
enter something : bar
You've already said bar
enter something : 

PS: また、それ以外の場合は無限ループになるブレーク条件を追加しloop()ます

于 2012-10-24T16:36:34.047 に答える
0

上記のステートメントは、再帰的に自分自身を呼び出しています。loop の新しいインスタンスは Repeat の呼び出し値にアクセスできず、代わりに Repeat の独自のローカル コピーを持ちます。また、 if がありますRepeat > 2。書かれているように、これは、「hello」を3回入力してカウンターを3まで取得するまで、他のprintステートメントを取得しないことを意味しますRepeat >= 2

必要なのは、入力が繰り返されるかどうかを追跡する while ループです。実生活では、while ループがいつ終了するかを示す何らかの条件が必要になる可能性がありますが、ここでは泣き言を言う必要がないため、while True:永久にループするために使用できます。

最後に、コードは「hello」が複数回入力されているかどうかのみをチェックします。代わりに、彼らがすでに言ったことを追跡することで、より一般的なものにすることができ、その過程でカウンターを持つ必要性を取り除くことができます. 私がテストしていない高速でずさんなバージョンの場合、次のようにループする可能性があります。

alreadySaid = set() #sets are effecient and only store a specific element once
while True: #probably want an actual break condition here, but to do it forever this works
   response = raw_input("enter something : ") 
   if response in alreadySaid:
      print 'You already said {}'.format(response)
   else:
      print response
      alreadySaid.add(response)
于 2012-10-24T17:42:30.933 に答える