如何使此代码识别之前输入的内容?

时间:2015-08-22 02:22:38

标签: python

对于家庭作业,我们必须编写将执行以下操作的代码:

  

编写程序以读取多行输入,直到空白行   进入。每行输入将包含多个单词。如果你   以前见过这个词,你应该打印出来。用户之后   完成输入后,你的程序应打印出多少   它看到的重复的话语。

到目前为止,我已经这样做了:

lineList = []
wordList = []
count = 0

line = input("Words: ")
while line:
  for x in line.split():
    if x in lineList:
      count += 1
      wordList.append(x)
      print(x)
      lineList.append(line)
      line = input("Words: ")

print('You repeated '+ str(count) +' word(s).')

我的代码不会循环回到开头,它就会停止。没有错误;事情就是停止运转。我该怎么做才能让它再次运行,我该如何让它运作?

2 个答案:

答案 0 :(得分:3)

首先,你有一个无限循环。永远不会使用任何值更新line,因为它隐藏的条件永远不会成立。 lineList在程序开头不会包含x,因此它会被卡在那里。

显而易见的解决方法是将input行重新移动几个空格......

while line:
  for x in line.split():
    if x in lineList:
      count += 1
      wordList.append(x)
      print(x)
      lineList.append(line)
  line = input("Words: ")

......但那也不是那么做。

您的下一个问题是您的情况不正确。您不应该关心lineList中是否出现一个单词 - 事实上,这是一个多余的变量,只会让您以后感到困惑。您想要查看wordList

所以,这会使代码成为这个(没有lineList):

line = input("Words: ")
while line:
  for x in line.split():
    if x in wordList:
      count += 1
    wordList.append(x)
    print(x)
  line = input("Words: ")

最后一个条件 - 只有你以前见过这个词才应该回应 - 我作为练习留给读者。

答案 1 :(得分:0)

问题不在于它停止,而是相反:它继续在无限循环中进行,而不需要输入,因为它只在需要更多输入时才会找到一个已经在{{1 }}。通过两个级别取消输入请求,以便在处理整行后请求输入。如果列表中 ,则还必须添加计数并打印单词,如果列表中,则将其添加到列表中。您还必须将该字词添加到linelist,而不是wordList。事实上,你也不需要lineList

lineList