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
添加回答
舉報