[英]why is my python code outputting the wrong thing?
words=[]
word=input("Word:")
count=0
while word != '':
count+=1
words.append(word)
word=input("Word:")
for w in words:
if words.count(w)>1:
count-=1
print("You know",count,"unique word(s)")
所以我的代码所做的是,它允许用户输入单词,然后检查他们是否有任何重复的单词; 如果他们这样做,那不算数。 所以在完成之后,它会告诉你你知道多少个“独特的单词”。
问题是:当没有重复时,它会输出正确数量的“唯一单词”,但是当有重复时,它会输出“正确数量的唯一单词” - 1。所以假设我给出了 3 个单词,其中 2 个是重复; 它会说只有 1 个唯一的单词。 感谢您的任何帮助。
如果在words.append(word)
之后添加print(words)
可能有助于理解发生了什么。
发生的情况是该word
作为新项目添加到数组中。 在你递减count
的循环中,你递减每个不唯一的单词,即如果一个单词出现两次,你递减两次。
Input words count
a [a] 1
a, b [a, b] 2
a, b, b [a, b, b] 1
a, b, b, b [a, b, b, b] -1
a, b, b, c, c [a, b, b, c, c] -3
另一个问题是 for 循环发生在每个输入之后,即您多次递减相同的副本。
不断输入单个单词的程序的固定版本是
words=[]
word=input("Word:")
while word != '':
words.append(word)
word=input("Word:")
uniquewords = set(words)
print("You know",len(uniquewords),"unique word(s)")
您可以在空间上拆分用户的输入,然后将项目添加到集合中。 一个集合包含独特的项目,因此添加“a”三次将导致仅包含一个“a”。
word = input('Word:')
split_word = word.split() # splits on space
set_word = set(split_word) # turns the list into a set
unique_words = len(set_word)
print("You know",unique_words,"unique word(s)")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.