2016-06-11 54 views
1

我正在试着写一些东西来把一个句子中的每个单词都大写。它工作正常,如下:(Python)中的单词大写?

print " ".join((word.capitalize() for word in raw_input().strip().split(" "))) 

如果输入的是“世界你好”,输出将是:

Hello World 

但我试过不同的写,如下所示:

s = raw_input().strip().split(' ') 
for word in s: 
    word.capitalize() 
print ' '.join(s) 

其输出将是错误的:

hello world 

那又怎么了,为什么结果不一样呢!!谢谢。

+0

在您的第二个程序中,您将s的单词拷贝大写。不是s本身的话。 – SvbZ3r0

+2

字符串是不可变的,所以字符串方法不能修改原始字符串,它们总是返回一个新的字符串。你的第二个代码片段没有保存那个新的字符串。顺便说一句,有一种更简单的方式来利用字符串中的每个单词:使用'str.title'方法,例如''hello world'.title()'。 –

回答

4

你的代码中的问题是字符串是不可变的,你试图改变它。所以,如果你不想使用循环,你必须创建新的变量。

s = raw_input().strip().split(' ') 
new_s = '' 
for word in s: 
    new_s += s.capitalize() 
print new_s 

或者,如果您使用enumerate遍历列表它的工作和更新s

s = raw_input().strip().split(' ') 
for index, word in enumerate(s): 
    s[index] = .capitalize() 
print ' '.join(s) 

但能够利用在串词的最好方法是使用str.title() - 方法的话的资本在字符串:

s = 'hello word' 
print(s.title()) 
+0

我试过了。但它会用数字开头的词(如:3g),我不想这样做。 –

0

字符串是immutable,你要更新这是不poassib相同的值乐。

创建一个新字符串并以此方式更新。

s = raw_input().strip().split(' ') 
st = '' 
for word in s: 
    st+= word.replace(word,word.capitalize()) 
print ''.join(st) 

或者

print " ".join([i.capitalize() for i in raw_input().strip().split(" ")]) 
0
print ' '.join([i.capitalize() for i in raw_input('Enter text here:').split(' ')]) 

这将解决你的问题。