2011-12-02 17 views
7

キーボードから行を読み込んで、すべての単語が逆の と同じ行を出力する簡単なプログラムを作成します。単語は、連続する英数字の文字列 またはハイフン( ' - ')として定義されます。入力された場合例えば、 「あなたは私を助けることができる!」 出力は あるべき「EM pleh uoy NAC!」Pythonでの文字列の逆翻訳

私は次のコードでしようと試みたが、それといくつかの問題があり、

print"Enter the string:" 
str1=raw_input() 
print (' '.join((str1[::-1]).split(' ')[::-2])) 

"naC uoy pleh!em"と表示されますが、感嘆符(!)を表示するだけで問題になります。誰も私を助けることができます???

答えて

3

を使用できます各単語を見つけ、それを逆にする:しかし

In [8]: import re 

In [9]: s = "Can you help me!" 

In [10]: re.sub(r'[-\w]+', lambda w:w.group()[::-1], s) 
Out[10]: 'naC uoy pleh em!' 
+0

が含まれていると言われていませんでした。 – phimuemue

+0

'' \ w''は英数字**とアンダースコア**を表していますが、OPは単語にアンダースコア – eyquem

-1

これを行うことができます。

print"Enter the string:" 

str1=raw_input() 

print(' '.join(str1[::-1].split(' ')[::-1])) 

または、その後、この

print(' '.join([w[::-1] for w in a.split(' ') ])) 
+0

出力がすでに持っているまさにOPのようになります。 –

6

は、最も簡単には、文字列を分割するreモジュールを使用することが考えられます:

import re 
pattern = re.compile('(\W)') 
string = raw_input('Enter the string: ') 
print ''.join(x[::-1] for x in pattern.split(string)) 

実行すると、あなたが得る:

Enter the string: Can you help me! 
naC uoy pleh em! 
+1

これは、ハイフンを含む文字列では正しく動作しません。パターンはre.compile( '([^ \ w \ - ])') –

+0

''(\ W +) '' ''(\ W) ''よりも良いと考えられます。英数字とアンダースコア以外の文字を象徴していますが、OPではアンダースコア – eyquem

0

を私の答えを、より冗長。それは、最後に1つ以上の句読点と、文章内の句読点を処理します。 reモジュールを使用せずに

import string 
import re 

valid_punctuation = string.punctuation.replace('-', '') 
word_pattern = re.compile(r'([\w|-]+)([' + valid_punctuation + ']*)$') 

# reverses word. ignores punctuation at the end. 
# assumes a single word (i.e. no spaces) 
def word_reverse(w): 
    m = re.match(word_pattern, w) 
    return ''.join(reversed(m.groups(1)[0])) + m.groups(1)[1] 

def sentence_reverse(s): 
    return ' '.join([word_reverse(w) for w in re.split(r'\s+', s)]) 

str1 = raw_input('Enter the sentence: ') 
print sentence_reverse(str1) 
0

シンプルなソリューション: "pleh NACがuoy EM!":

print 'Enter the string:' 
string = raw_input() 

line = word = '' 

for char in string: 
    if char.isalnum() or char == '-': 
     word = char + word 
    else: 
     if word: 
      line += word 
      word = '' 
     line += char 

print line + word 
関連する問題