2011-12-02 46 views
7

Viết một chương trình đơn giản đọc một dòng từ bàn phím và xuất ra cùng một dòng, trong đó mỗi từ được đảo ngược. Một từ được định nghĩa là một chuỗi liên tục gồm các ký tự chữ và số hoặc dấu gạch ngang (‘-’). Ví dụ, nếu đầu vào là “Bạn có thể giúp tôi!” sản lượng nên được “NAC uoy pleh em!”Chuỗi đảo ngược trong Python

Tôi chỉ tryed với đoạn mã sau, nhưng có một số vấn đề với nó,

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

Nó in "naC uoy pleh! Em", chỉ cần nhìn vào dấu chấm than (!), Đó là vấn đề ở đây. Ai cũng có thể giúp tôi?

Trả lời

3

Bạn có thể sử dụng re.sub() để tìm từng từ và đảo ngược từ:

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

đó là một cách hay, theo ý kiến ​​của tôi. – phimuemue

+0

Lưu ý rằng '' \ w'' tượng trưng cho chữ và số ** và dấu gạch dưới ** trong khi OP không định nghĩa một từ có thể chứa dấu gạch dưới – eyquem

-1

bạn có thể thực hiện việc này.

print"Enter the string:" 

str1=raw_input() 

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

hoặc sau đó, đây

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

đầu ra sẽ được chính xác giống như những gì OP đã có: "NAC uoy pleh em!". –

6

Các đơn giản nhất có lẽ là sử dụng các mô-đun re để phân chia các chuỗi:

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

Khi chạy, bạn nhận được:

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

Điều này không hoạt động chính xác trên chuỗi chứa dấu gạch nối. Tôi nghĩ rằng mô hình nên được thay đổi thành re.compile ('([^ \ w \ -])') –

+0

'' (\ W +) '' sẽ tốt hơn '' (\ W) '' - Lưu ý rằng \ W tượng trưng cho các ký tự khác ngoài chữ và số và dấu gạch dưới trong khi OP không xác định một từ có thể chứa dấu gạch dưới – eyquem

0

Câu trả lời của tôi, mặc dù dài hơn. Nó xử lý nhiều hơn một dấu chấm câu ở cuối cũng như các dấu chấm câu trong câu.

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

giải pháp đơn giản mà không sử dụng re mô-đun:

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