3 回答
TA贡献1775条经验 获得超11个赞
为什么程序会失败?
仔细看看你的cap()函数。
def cap(words):
for j in words:
print(j)
return j.capitalize()
return j.captialize()将退出该函数并且仅返回第一个单词的大写值。
更正
该函数必须将列表中的所有元素大写。
def cap(words):
capitalized = []
for word in words:
capitalized.append(word.capitalize())
return capitalized
现在最终的代码应该是这样的
def cap(words):
capitalized = []
for word in words:
capitalized.append(word.capitalize())
return capitalized
words = ["hello","foo","bar"]
capitalized = cap(words)
print(*capitalized)
也许更Pythonic的方法是使用列表理解
def cap(words):
return [word.capitalize() for word in words]
words = ["hello","foo","bar"]
capitalized = cap(words)
print("Regular: ",*words) # printing un-packed version of words[]
print("Capitalized: ",*capitalized)
输出:
常规:hello foo bar
大写:Hello Foo Bar
TA贡献1777条经验 获得超10个赞
像这样简单的事情怎么样:
[s.capitalize() for s in words]
这里发生了什么?
简而言之,就是代码复杂度优化。编写高质量代码的一部分不是编写冗长、(可能)低效的代码,而是效率和可读性。
该循环使用了一种称为列表理解的技术。在处理列表或处理简单到不需要专用函数的事情时,这是一种非常有用的技术。
words迭代时,对每个单词调用该函数.capitalize(),并将结果附加到返回的列表中 - 无需显式附加列表。
要将其变成一个函数,您可以使用:
def cap(words) -> list:
"""Capitalise each word in a list.
Args:
words (list): List of words to be capitalised.
Returns:
A list of capitalised words.
"""
return [s.capitalize() for s in words]
输出:
words = 'my name'.split(' ')
cap(words)
>>> ['My', 'Name']
TA贡献1844条经验 获得超8个赞
我已经“清理”了你的代码(但保留了概念)。
请注意,它可以以更短的方式完成。
def cap(words):
result = []
for j in words:
result.append(j.capitalize())
return result
words = "my name"
words_lst = words.split(" ")
capped = cap(words_lst)
result = " ".join(capped)
print(result)
输出
My Name
更短的方法:-)
print(' '.join([s.capitalize() for s in 'my name'.split(' ')]))
输出
My Name
添加回答
举报