【问题标题】:String reverse in PythonPython中的字符串反转
【发布时间】:2012-01-11 14:41:00
【问题描述】:

编写一个简单的程序,从键盘读取一行并输出同一行 每个字都颠倒了。单词被定义为字母数字字符的连续序列 或连字符 ('-')。例如,如果输入是 “你能帮助我吗!” 输出应该是 “naC uoy pleh em!”

我刚刚尝试了以下代码,但它有一些问题,

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

它打印“naC uoy pleh !em”,看看感叹号(!),这就是问题所在。任何人都可以帮助我???

【问题讨论】:

    标签: python


    【解决方案1】:

    最简单的可能是使用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!
    

    【讨论】:

    • 这不适用于包含连字符的字符串。我认为模式应该改为 re.compile('([^\w\-])')
    • (\W+) 会比 (\W) 更好 - 请注意,\W 表示除字母数字字符和下划线之外的其他字符,而 OP 没有将单词定义为可能包含下划线
    【解决方案2】:

    您可以使用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!'
    

    【讨论】:

    • 我认为这是一个不错的方法。
    • 请注意,\w 表示字母数字和下划线,而 OP 没有将单词定义为可能包含下划线
    【解决方案3】:

    我的回答,虽然更冗长。它可以处理多个结尾的标点符号以及句子中的标点符号。

    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)
    

    【讨论】:

      【解决方案4】:

      不使用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
      

      【讨论】:

        【解决方案5】:

        你可以这样做。

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

        然后,这个

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

        【讨论】:

        • 输出将与 OP 已有的完全一样:“naC uoy pleh !em”。
        猜你喜欢
        • 1970-01-01
        • 2019-05-02
        • 2010-10-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多