编写一个简单的程序,从键盘读取一行并输出相同的行 每个字都颠倒了。单词被定义为连续的字母数字字符序列 或连字符(' - ')。例如,如果输入是 “你能帮助我吗!” 输出应该是 “naC uoy pleh em!”
我刚刚尝试使用以下代码,但它存在一些问题,
print"Enter the string:"
str1=raw_input()
print (' '.join((str1[::-1]).split(' ')[::-2]))
打印“naC uoy pleh!em”,只看感叹号(!),这就是问题所在。有谁可以帮我???
答案 0 :(得分: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 :(得分:3)
您可以使用re.sub()
查找每个单词并将其反转:
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!'
答案 2 :(得分:0)
我的回答,虽然更加冗长。它最后处理多个标点符号以及句子中的标点符号。
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)
答案 3 :(得分:0)
不使用re
模块的简单解决方案:
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
答案 4 :(得分:-1)
你可以这样做。
print"Enter the string:"
str1=raw_input()
print( ' '.join(str1[::-1].split(' ')[::-1]) )
或者,这个
print(' '.join([w[::-1] for w in a.split(' ') ]))