2016-06-11 101 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(' ')]) 

這將解決你的問題。