根据用户输入构建唯一单词列表

时间:2016-11-05 08:56:33

标签: python python-3.x

我是编程新手。我已经开始从Accessing objects of parent class in cocoa(教授python的网站)学习它。但我对其中一个问题感到困惑。

这是Grok提出的问题:

  

编写一个程序,您可以一次输入一个单词,然后被告知   你输入了多少个独特的单词。你不应该数   重复。你应该停止要求更多的单词   输入一个空行。

     

例如:

Word: *Chat*
Word: *Chien*
Word: *Chat*
Word: *Escargot*
Word:
You know 3 unique word(s)!
     

Word: *Katze*
Word: *Hund*
Word: *Maus*
Word: *Papagei*
Word: *Schlange*
Word:
You know 5 unique word(s)!
     

Word: *Salam*
Word:
You know 1 unique word(s)!

我试过了4天,但我无法理解。到目前为止,这是我可怕的代码。

list1 = []
word = input('Word: ')
while word != '':
  list1.append(word)
  word = input('Word: ')
for w in list1:
  for l in range(len(list1)):
    if w != list1[l]:
      s = list1[l]
      list1.remove(s)
print('You know', len(list1), 'unique word(s)!')

3 个答案:

答案 0 :(得分:1)

而不是使用list使用set来存储单词。 Set是一组无序的唯一项目,如果多次添加相同的项目,状态将不会改变:

s = set()
word = input('Word: ')
while word != '':
    s.add(word)
    word = input('Word: ')

print('You know', len(s), 'unique word(s)!')

示例输出:

Word: foo
Word: bar
Word: foo
Word:
You know 2 unique word(s)!

请注意,您的原始代码是在迭代它时从list中删除元素。由于行为未定义,因此在迭代时不应修改序列。

答案 1 :(得分:0)

您应该尝试使用Python set,以确保您拥有唯一的元素。 set是一个包含无序唯一元素的容器。

以下是您的算法,其中所有输入都附加到您的初始列表。然后我们从列表中创建一个集合,在那里我们计算唯一的元素数量。

list1 = []
word = input('Word: ')
while word != '':
    list1.append(word)
    word = input('Word: ')
print('You know', len(set(list1)), 'unique word(s)!')

答案 2 :(得分:0)

正如其他人所说的那样,简单&有效的方法是使用一个集来存储单词,因为一个集合不能容纳重复的项目。

但是也可以用列表来做。您可以在添加之前测试每个单词以查看它是否在列表中,而不是使事情变得复杂并尝试从完成的列表中删除重复项。例如,

list1 = []
word = input('Word: ')
while word != '':
    if word not in list1:    
        list1.append(word)
    #print(list1)
    word = input('Word: ')

print('You know', len(list1), 'unique word(s)!')

调试代码时,在战略位置插入print调用以确保您的变量包含您希望他们执行的操作会很有帮助,这就是我添加print(list1)行的原因。如果您取消对该行的注释,它将在每个循环中显示列表内容。

这是一个稍微好一点的版本,不需要两个相同的input来电:

list1 = []
while True:
    word = input('Word: ')
    if not word:
        break
    if word not in list1:    
        list1.append(word)

print('You know', len(list1), 'unique word(s)!')