2011-12-09 5 views
1

文字列中の他のすべての単語を大文字にする方法は不思議です。たとえば、私は "ここは私の犬です"を "ここは私の犬です"に変更したいと考えています 誰も私を助けてくれるのですか?私が見つけることができるのは、各単語の最初の文字をどのように大文字にするかです。大文字にする方法Pythonの文字列中の他のすべての単語

答えて

0

を使用して、単語にあなたの文字列を分割し、他のすべての単語でのコールupper()、その後、戻って一緒に文字列を結合するためにsplit()を使用することができます。

string = "Here is my dog" 

def alternateUppercase(s): 
    i = 0 
    a = s.split(' ') 
    l = [] 
    for w in a: 
     if i: 
      l.append(w.upper()) 
     else: 
      l.append(w) 
     i = int(not i) 
    return " ".join(l) 

print alternateUppercase(string) 
+0

oはどうもありがとうございました、しかし、あなたは私がforループを説明するのに役立つことができますか?私はまだこれに新しいです。 –

+1

@Neal Wang ** a **はすべての単語のリストであり、**はwのwのリストです。**は単語のリスト内のすべての単語を意味します。 forループは、単語リスト(** a **)内のすべての単語(** w **)の基になるコードを実行します。 forループの良い例は、[here](http://www.tutorialspoint.com/python/python_for_loop.htm)にあります。 – enderskill

2

あなたが探している方法はupper()だと思います。 あなたはそれが最もコンパクトな機能ではないのですが、これはトリックを行うだろうjoin()

6
' '.join(w.upper() if i%2 else w 
      for (i, w) in enumerate(sentence.split(' '))) 
+0

に、 – enderskill

1
words = sentence.split(' ') 
sentence = ' '.join(sum(zip(words[::2], map(str.upper, words[1::2])),())) 
+0

( 'str.upper'のため)これはunicode入力のpython2では機能しません。 'str'と' unicode'の両方を扱わなければならない場合は、 – ekhumoro

+0

'lambda x:x.upper()'となります。 –

0

任意の英数字以外の文字を処理するためにregexを使用して別の方法。

import re 

text = """The 1862 Derby was memorable due to the large field (34 horses), 
the winner being ridden by a 16-year-old stable boy and Caractacus' 
near disqualification for an underweight jockey and a false start.""" 

def selective_uppercase(word, index): 
    if index%2: 
     return str.upper(word) 
    else: 
     return word 

words, non_words = re.split("\W+", text), re.split("\w+", text) 
print "".join(selective_uppercase(words[i],i) + non_words[i+1] \ 
       for i in xrange(len(words)-1)) 

出力:本当のミニマリストのよう

The 1862 Derby WAS memorable DUE to THE large FIELD (34 HORSES), 
the WINNER being RIDDEN by A 16-YEAR-old STABLE boy AND Caractacus' 
NEAR disqualification FOR an UNDERWEIGHT jockey AND a FALSE start. 
関連する問題