2011-12-02 4 views
7

키보드에서 한 줄을 읽고 모든 단어가 역순 인 동일한 줄을 출력하는 간단한 프로그램을 작성하십시오. 단어는 일련의 영숫자 문자 시퀀스 또는 하이픈 ('-')으로 정의됩니다. 입력이 경우 예를 들어, "당신이 나를 도와 드릴까요!" 출력이 해야한다 "그들 pleh uoy NAC!"파이썬에서의 문자열 반전

난 그냥 다음 코드를 tryed,하지만 몇 가지 문제가있다,

"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

"\"는 영숫자 ** 및 밑줄 **을 나타내며 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 : "NAC pleh uoy 그들!". –

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

내 대답, 더 자세한. 문장 내에 문장 부호뿐만 아니라 끝에 문장 부호 하나 이상을 처리합니다. 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

간단한 해결책 :

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