编写一个函数find_longest_word(wordList),它接受一个单词列表并返回列表中最长的单词。如果有多个最长的单词(即具有相同的长度),那么它应该返回它们中的第一个(即,在列表中的其他单词之前出现的单词)。
编写一个程序,要求用户输入一些由空格分隔的单词(全部在一行中)。然后你的程序应该创建一个包含输入单词的列表(你可以在字符串中使用内置的split方法)并输出列表和最长的单词(使用上面的函数)。
示例运行:
输入几个字,我会找到最长的:
快速的棕色狐狸跳过懒狗
输入的字词列表为:
<'>'''','快速','棕色','狐狸','跳','过',''','懒惰','狗']列表中最长的单词是:
快速
我的代码
def find_longest_word():
lizt=[]
s = input("Please type a sentence and I will out put the longest word. ")
for word in s:
lizt.append(word)
x = max(s.split(), key=len)
print('')
print('The list of words entered is:')
print(lizt)
print(s.split())
print('')
print('The longest word is:')
print(x)
find_longest_word()
答案 0 :(得分:5)
for word in s:
lizt.append(word)
这个循环错了。 s
是一个字符串,word in s
将遍历s
中的每个字母,而不是每个空格分隔的字。您只需使用.split()
,就不需要变量lizt
。
你可以做:
lizt = []
for word in s.split():
lizt.append(word)
但这只会导致lizt
与s.split()
相同。所以lizt = s.split()
会更简单。
如果真的想要为此使用循环,您可以尝试放弃使用max
并执行以下操作:
max_word, max_len = None, 0
for word in s.split():
if len(word) > max_len:
max_word, max_len = word, len(word)
但是使用split
和max
更简单,更灵巧,而不必自己编写显式循环。
答案 1 :(得分:2)
使用for word in s:
将导致Python浏览用户输入的字符串的每个字符。您应该使用lizt = s.split()
,它会自动生成最初由输入中的单个空格分隔的str
列表。这就是你想要的。
作为一点注意事项,您可以使用s.split('\t')
之类的参数来使用不同的分隔符来分割单词。例如:
sentence = "Split function"
sentence.split() # -> ["Split", "function"]
sentence.split("i") # -> ["Spl","t funct","on"]
关于您对append
的使用情况,您似乎了解如何将项目附加到list
,以便如此粗略。
答案 2 :(得分:0)
我认为这段代码会做你想要的。字符串上的split方法创建单词列表。然后返回max函数,len函数作为键,为您提供列表中最长的单词。即它通过对每个值应用len并返回最长值来查找列表中的最大值。
s = "Please type a sentence and I will out put the longest word"
s_list = s.split()
def longest_word(s_list)
return max(s_list, key=len)