繁体   English   中英

为什么我的 python 代码输出错误?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM