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

我会使用 adict来存储单词/计数。然后您可以查询该单词是否在字典中并更新计数...

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 之前,它不会获得您的其他打印语句。您可能想要这样做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 回答