2016-09-07 9 views
2
#!/usr/bin/python 
# -*- coding: utf-8 -*- 
def to_weird_case(string): 
    lines = string.split() 
    new_word = '' 
    new_line = '' 
    for word in lines: 
     for item in word: 
      if word.index(item) %2 ==0: 
       item = item.upper() 
       new_word += item 
      else: 
       new_word += item 
     new_line = new_word +' ' 
    return new_line 
print to_weird_case('what do you mean') 

WhAt Do YoU MeAnを取得したいのですが、代わりにWhAtDoYoUMeAnを取得しました。私は既にnew_line = new_word +' 'という行を追加しています。私の問題はどこですか?は、大文字の文字列を扱うときに正しくできません。

答えて

2

まず、すべての繰り返しでnew_lineを上書きします。第二に、new_wordは決してそれをクリアしないので長くなっています。第3に、のスペースをnew_lineの末尾に追加し、新しい単語の後には挿入しません(のため、のため)。

あなたのコードがnew_wordの値をリセットしていないとあなたがループ内new_lineを上書きしていることが正しいですが、私はワンライナーの隣を共有したいコメント

def to_weird_case(string): 
    lines = string.split() 
    new_line = '' 
    for word in lines: 
     new_word = '' # start new word from an empty string 
     for item in word: 
      if word.index(item) %2 ==0: 
       item = item.upper() 
       new_word += item 
      else: 
       new_word += item 
     print new_word 
     new_line = new_line + new_word + " " # add new word to the existing new line 
    return new_line 
+0

これは機能しました。 'new_line'をどこに置くべきか私は混乱していたに違いない。 –

+0

しかし、最後のスペースを残したい場合はどうすればいいですか?文章の終わりに余分なスペースがある ''やってみようか ''のようなものが表示されます。 –

+0

「戻る」の前の最後のスペースを削除することができます。しかし、美しい解決策ではありません:) – Psytho

1

を参照してください。正規表現で解決策:

import re 
def to_weird_case(string): 
    return re.sub(r'(\S)(\S?)', lambda m: "{0}{1}".format(m.group(1).upper(), m.group(2)), string); 
print to_weird_case('what do you mean') 

Python demo

012を参照してください。regexは、グループ1に空白以外の空白を、グループ2には空白以外の空白を1つ取り込み、次にre.subの中で、グループ1の値を大文字の対応するものに置き換えます。 (\S)(\S?)あなたwhat do you meanに一致する方法で

ルック:

  • whが一致していると(enter image description herewは、グループ1にあり、hがグループ2です。マッチはmとしてラムダ式に渡され、グループ1は変更され、グループ2はそのまま渡されます。
  • 次の試合はatが含まれており、同じことが
  • 次に、スペースが\Sマッチの任意の文字が、空白ので、一致していないグループで発生します。
  • doyoが一致し、取り扱う
  • u + 上述したように空きスペース第\S一つと一致?数量詞を有するため次に一致される
  • 空間、上記と同様のものが発生し、一致していますそれが変更されるパターンの発生はゼロです。したがって、最初の文字は大文字で、2番目の空の文字列はそのまま使用されます。
  • 残りは同様の方法で処理されます。
+1

ええ、それははるかに簡単です。私にとっては遠い道のりです。 –

関連する問題