我是编程新手。我已经开始从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)!')
答案 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)!')