2015-02-24 34 views
-1

我正在使用Python 3.4,并且在我的程序中收到错误消息“'wordlist is not defined'”。我究竟做错了什么?请用代码回复。Python v3查找最长的单词(错误信息)

该计划是找到最长的单词:

def find_longest_word(a): 
    length = len(a[0]) 
    word = a[0] 
for i in wordlist: 
    word = (i) 
    length = len(i) 
return word, length 

def main(): 
    wordlist = input("Enter a list of words seperated by spaces ".split() 
    word, length = find_longestest_word(wordlist) 
    print (word, "is",length,"characters long.") 

main() 
+0

您的问题的标题是不是很有用的信息... – 2015-02-24 04:00:48

回答

0

除了你的代码缩进问题,你的find_longest_word()函数并没有真正的逻辑来找到最长的单词。此外,你通过它的参数名为a,但你从来没有在功能中使用a,而是你使用wordlist ...

下面的代码做你想做的。 Python中的len()函数非常有效,因为所有Python容器对象都存储了它们的当前长度,所以将长度存储在单独的变量中很少值得困扰。所以我的find_longest_word()只是存储迄今为止遇到的最长的单词。

def find_longest_word(wordlist): 
    longest = '' 
    for word in wordlist: 
     if len(word) > len(longest): 
      longest = word 
    return longest 

def main(): 
    wordlist = input("Enter a list of words separated by spaces: ").split() 
    word = find_longest_word(wordlist) 
    print(word, "is" ,len(word), "characters long.") 

if __name__ == '__main__': 
    main() 
+0

谢谢,这几乎正是我需要的!我现在唯一的问题是,我的输出只是第一个字,给我的字符数。我需要能够输入几个单词(例如:猫狗老鼠的小鸟猪),并说,“老鼠是最长的单词”。 – NewAtThis 2015-02-24 04:33:26

+0

@NewAtThis:很奇怪。它是否打印任何错误消息?你在使用Python 2还是Python 3?我正在使用Python 2,所以我使用'raw_input'而不是'input',就像这样:'wordlist = raw_input(“输入由空格分隔的单词列表:”).split()'。但是我上面的代码应该可以在Python 3上正常工作。 – 2015-02-24 04:41:50

+0

版本3.它确实工作正常,并且正在执行代码所说的没有问题。我只是想知道如何改变代码,让它告诉我最长的单词是什么,而不是告诉我最长单词有多少个字符。例如,现在如果我回答“狗”,它会回应,“狗3”,但我想能够说“狗猫老鼠”,并有回应,“老鼠是最长的词。” – NewAtThis 2015-02-24 04:44:33

0

线“返回字,长度”是任何功能之外。最接近的函数是“find_longest_word(a)”,所以如果你想让它成为函数的一部分,你需要缩进第4-7行。

+0

感谢您的帮助。绝对是一个时刻。也许你可以帮助我进一步?现在我收到以下错误消息: – NewAtThis 2015-02-24 03:04:23

+0

“NameError:name'wordlist'is not defined。”我如何定义它? – NewAtThis 2015-02-24 03:05:33

+0

在第4行中,您在for循环中使用变量wordlist,但wordlist在main()函数中定义。 – user2027202827 2015-02-24 03:18:39

0

缩进在Python中很重要。正如错误所述,你有这个功能以外的回报。尝试:

def find_longest_word(a): 
    length = len(a[0]) 
    word = a[0] 
    for i in wordlist: 
     word = (i) 
     length = len(i) 
    return word, length 

def main(): 
    wordlist = input("Enter a list of words seperated by spaces ".split() 
word, length = find_longestest_word(wordlist) 
print (word, "is",length,"characters long.") 

main() 
+1

这将仍然失败,一个'NameError'; OP需要缩进倒数第二行和倒数第三行,因此它们在'main'内(并且就此而言拼写正确的函数名称)。 – 2015-02-24 03:00:00

+0

是的,我得到一个NameError,但即使我缩进第三到最后一行。这是说'名词'的名字没有定义。我不确定代码中的哪个位置可以执行此操作? – NewAtThis 2015-02-24 03:32:35

+0

@NewAtThis你需要缩进'word,length'行和'print'行才能工作。否则,Python不知道如何处理'print'函数。 – BobChao87 2015-02-24 03:37:59

0

在python中,缩进非常重要。它应该是:

def find_longest_word(a): 
    length = len(a[0]) 
    word = a[0] 
    for i in wordlist: 
     word = (i) 
     length = len(i) 
    return word, length 

但是由于函数名,我认为这个实现是错误的。