这个问题与我的教育有关,我希望尽可能详细地向你提供任何帮助 - 我不想复制粘贴代码并将其交给我。:)
任务很简单 - 创建一个名为writeshort(txt)的定义,取一串单词,只打印少于五个字符的单词。现在我已经完成了这个,但事情是特定sais的任务使用定义。我在这里失败了。
没有定义的代码,有效:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
string = raw_input(”Write a few lines: ”)
txt = string.split()
result = []
for words in txt:
if len(words) > 4:
continue
result.append(words)
print ', '.join(result), ”have less than five letters!”
现在看起来不错,打印没有任何令人讨厌的['']。但是这些定义呢? 我尝试了几件事,这是最新的,但它只打印少于五个字母的第一个单词,而忽略其余的单词:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
string = raw_input(”Write a few lines: ”)
txt = string.split()
def writeshort(txt):
for txt in txt:
if len(txt) > 4: #Yes I know its a 4, but since it counts 0...
continue
return txt
print writeshort(txt), "have fewer letters than five!"
我感谢任何帮助。感谢您花时间帮我学习Python!
答案 0 :(得分:7)
是的,因为writeshort
中的循环在找到一个短字时会遇到return语句并立即返回。
如果您需要writeshort
中的所有简短字词,则需要先在列表中收集,然后最后返回列表。也许是这样的:
def writeshort(txt):
wordlist = []
for item in txt:
if len(item) > 4:
continue
wordlist += [item] # or wordlist.append(item) as in your first snippet
return wordlist
整个功能可以用一行代码和更多pythonic代码替换:
[word for word in txt if len(word) <= 4]
你写过for txt in txt:
,这很奇怪。它将执行预期的操作(对原始txt
中的每个项执行),但txt
将在每次迭代中更改为列表中的项。
答案 1 :(得分:1)
你的问题是return txt
;在for
循环期间,Python第一次点击该语句时,它将返回txt
并且完全停止调用writeshort
。
为什么不像你的旧代码一样,将它们收集到一个列表然后使用它?
def writeshort(txt):
result = []
for word in txt:
if len(word) > 4:
continue
result.append(word)
return result
(我将令人困惑的for txt in txt
更改为for word in txt
,但不会覆盖名为txt
的旧变量。)
此外,您对if len(word) > 4
的评论让我觉得您可能会对此感到有些困惑:len
不会“计数0” - 您可能正在考虑索引,从0开始你需要> 4
的原因是因为它检查它大于 4,即5或更多。你也可以说>= 5
。
虽然我们正在努力,为什么不让你的代码更好?
不要在你的循环中使用continue
,而是可以通过否定条件直接做到这一点:
result = []
for word in txt:
if len(word) < 5:
result.append(word)
顺便说一句,这种将事物收集到列表中的模式实际上非常普遍,以至于Python有一个特殊的语法处理它(以及一些更一般的情况),称为列表理解:
def writeshort(txt):
return [word for word in txt if len(word) < 5]
答案 2 :(得分:0)
一些想法:
1)你正在使用txt作为你正在循环的集合和当前元素:
for txt in txt:
这最好让人感到困惑。尝试
for word in txt:
2)这里的主要问题是,一旦找到一个短于五个字符的单词,就会从函数返回。您应该查看保存这些单词的列表,然后在检查txt中的每个单词后返回整个列表。
def writeshort(txt):
shortwords = []
for word in txt:
if len(txt) > 4:
continue
shortwords += [word]
return shortwords