我正在尝试将字符串中每个单词的第一个字母转换为python中的大写字母。但是在此之前,我仍然没有收到generator object at 0x10315b8>
帖子似乎回答了我的问题。
def capitalize(str):
newstr = str.split(' ')
newlist = []
for word in newstr:
if word[0][0] == word[0][0].upper():
newlist.append(word[0][0].upper())
newlist.append(word[0][1:])
newlist.append(" ")
convert_first = (str(w) for w in newlist)
print(convert_first)
capitalize(input("enter some string"))#calling the function
答案 0 :(得分:1)
您的问题在于如何尝试从字符串列表中创建字符串。将字符串“拆分”为列表的相反方法是将列表“连接”到字符串中。
def capitalize(str):
newstr = str.split(' ')
newlist = []
for word in newstr:
newlist.append(word[0].upper() + word[1:])
convert_first = ' '.join(newlist)
print(convert_first)
capitalize(input("enter some string"))#calling the function
注意:我试图让我的代码尽可能接近问题中的代码。
另外,为什么代码中有if
语句?有了它,你真的只是把所有已经资本化的词汇都用掉,并放弃其余的词,因为它们从未进入新的列表。
答案 1 :(得分:0)
您的代码存在一些问题:
您收到的错误消息是尝试打印convert_first
,这是一个生成器,而不是字符串。
newstr
是一个单词列表,因此word
是一个字符串,word[0]
已经是第一个字符。对word[0][0]
或word[0][1:]
毫无意义。
if word[0][0] == word[0][0].upper():
只过滤掉第一个字符不是大写的所有单词...
因此,只需要一些代码就能完成您所描述的内容:
def capitalize(str):
newstr = str.split(' ')
newlist = []
for word in newstr:
newlist.append(word[0].upper())
newlist.append(word[1:])
newlist.append(" ")
convert_first = ''.join(w for w in newlist)
print(convert_first)
capitalize(input("enter some string"))
或者那些喜欢短代码和生成器表达式的人:
def capitalize(str):
print(' '.join(word[0].upper() + word[1:] for word in str.split(' ')))
capitalize(input("enter some string"))
这也会删除生成的字符串的拖尾空间,这可能(不)是你想要的。