2016-03-27 45 views
2

文字列の文字を小文字から大文字に変更したい。 私のコードの下に、私の実際の出力は "a"です:あなたは私が間違っている場所を教えてください、なぜ私に説明できますか? ありがとうございます。Python:文字列内で大文字と小文字を交互に使用する

test = "AltERNating" 

def to_alternating_case(string): 
    words = list(string) 
    for word in words: 
     if word.isupper() == True: 
      return word.lower() 
     else: 
      return word.upper() 

print to_alternating_case(test) 
+0

をあなたのコードが動作しない理由は「そのリターンで次のように修正を加えたアンス現在の関数を残します( 'to_alternating_case()')。教育目的のために.swapcase()を実装したい場合は、最初の文字ではなく "words"リストを変更してください。 – folkol

答えて

8

それはこれを試して、その文字列のケースを反転させるために、あなたの希望のようになります。

>>> 'AltERNating'.swapcase() 
'aLTernATING' 
1

これは、関数が最初の文字のみを返すためです。私はreturnキーワードがあなたのforループを壊すことを意味します。

また、words = list(string)を実行して文字列をリストに変換する必要はないことに注意してください。you can iterate over a stringはリストと同様です。

あなたの代わりにswapcase()のアルゴリズム解決策を探しているなら、この方法の代わりにあなたの方法を変更します。

test = "AltERNating" 

def to_alternating_case(string): 
    res = "" 
    for word in string: 
     if word.isupper() == True: 
      res = res + word.lower() 
     else: 
      res = res + word.upper() 
    return res 


print to_alternating_case(test) 
1

あなたのループ反復処理し、入力文字列内の文字の上に。その後、最初の繰り返しから戻ります。したがって、常に1文字の戻り値が得られます。

test = "AltERNating" 

def to_alternating_case(string): 
    words = list(string) 
    rval = '' 
    for c in words: 
     if word.isupper(): 
      rval += c.lower() 
     else: 
      rval += c.upper() 
    return rval  

print to_alternating_case(test) 
1

あなたは、このようにすることを行う必要があります。

test = "AltERNating" 

def to_alternating_case(string): 
    words = list(string) 
    newstring="" 
     if word.isupper() == True: 
      newstring+=word.lower() 
     else: 
      newstring+=word.upper() 
    return alternative 
print to_alternating_case(test) 
3

これには2つの答えがあります。 :簡単なものと難しいもの。

簡単なもの

Pythonがそれを行うための機能で構築された、私は正確にそれが何であるかを覚えていけない、しかし

string.swapcase() 

ハード1

の線に沿って何かしています

独自の関数を定義します。文字列を反復する は文字を手紙で返し、繰り返しを続ける代わりに最初の文字を返すだけなので、関数を作成した方法は間違っています。

def to_alternating_case(string): 
    temp = "" 
    for character in string: 
     if character.isupper() == True: 
      temp += character.lower() 
     else: 
      temp += word.upper() 
    return temp 
1

あなたが期待しているものではありませんワードの交流をループ後の最初のアルファベットを戻ってきている、いくつかの提案があなたのような存在することができ、直接Pythonで文字列をループではなく、リストに変換し、表現<場合variable-name > == 変数名>の場合、Trueを直接簡略化することができます。

test = "AltERNating" 

def to_alternating_case(string): 
    result = '' 
    for word in string: 
     if word.isupper(): 
      result += word.lower() 
     else: 
      result += word.upper() 
    return result 

print to_alternating_case(test) 

ORリストの内包使用:

def to_alternating_case(string): 
    result =[word.lower() if word.isupper() else word.upper() for word in string] 
    return ''.join(result) 

ORマップ、ラムダ使用:

def to_alternating_case(string): 
    result = map(lambda word:word.lower() if word.isupper() else word.upper(), string) 
    return ''.join(result) 
関連する問題