如何保存和反转字符串?

时间:2016-02-24 08:10:56

标签: python python-3.x

  

编写一个接受由空格分隔的单词串的函数   由字母字符组成并返回一个字符串   输入字符串中的每个单词与单词的顺序相反   在输入字符串中保留。资本化在这里很重要。该   输入字符串的长度必须等于输出的长度   字符串,即你的中应该没有尾随或前导空格   输出字符串。例如,如果:

     

input_string =“这是一个样本测试”

     

然后该函数应该返回一个字符串,如:

     

" siht si elpmas tset"

这是我的代码:

def preserve_and_reverse (input_str):
    list = input_str.split()
    print (list)
    reverse_character = ""
    for i in range (0, len(input_str)):
        split_list = list[0:(i + 1)]
        print (split_list) 
        for j in split_list_advance:
            reverse_character = reverse_character + split_list[j]
        output_str = output_str.append(reverse_character)
    output = output_str.replace("", " ")
    print (output)

#Main Program
input_str = input("Enter a string: ")
result = preserve_and_reverse (input_str)
print (result)

我无法获得任何代码。我是否应该尝试不同的方法,例如遍历每个字符,当我遇到白色空格时,只需将字符串切片然后执行反向操作? 任何帮助,将不胜感激。

6 个答案:

答案 0 :(得分:6)

在空格上

Split,使用map[::-1]的每个字符串反转,然后join将其转回' '.join

>>> s = 'this is a sample test'
>>> 
>>> ' '.join(map(lambda s:s[::-1], s.split()))
'siht si a elpmas tset'

答案 1 :(得分:2)

我就是这样做的:

def preserve_and_reverse(input_str):

    # Split the String into an Array
    list_ = input_str.split(" ")

    return_str = ""

    # For Each String in the Array
    for item in list_:

        # Add Reversed String to Return String
        return_str += item[::-1] + " "

    # Return String without leading/trailing spaces
    return return_str.strip()

# Main Program
string_input = input("Enter a string: ")
result = preserve_and_reverse(string_input.strip())
print(result)

答案 2 :(得分:1)

这样的事情会做(一步一步):

input_string = "this is a sample test"
words = input_string.split()
nwords = []
for i in words:
    rword = ""
    for c in reversed(word):
        rword += c
    nwords.append(rword)
output_string = " ".join(nwords)    
print(output_string)

结果:

siht si a elpmas tset

分步说明:

  1. 您将输入文本拆分为字符串列表:

    words = input_string.split()
    
  2. 您遍历words

    for word in words):
    
  3. 对于每个word,您准备一个反向词rword并通过将旧词中的字符相加但反转来构建反向词:

    rword = ""
    for c in reversed(word):
        rword += c
    nwords.append(rword)
    
  4. 你重新加入了相反的词 - 但按顺序打印出来:

    output_string = " ".join(nwords)    
    print(output_string)
    
  5. 或者更简单:

    input_string = "this is a sample test"
    words = input_string.split()
    output_string = ""
    for word in words:
        for c in reversed(word):
            output_string += c
        output_string += " "
    print(output_string)
    

答案 3 :(得分:0)

word[::-1]颠倒了名为word的字符串变量的顺序,该变量是通过迭代句子中的每个分词来获得的。

>>> ' '.join(word[::-1] for word in input_string.split())
'siht si a elpmas tset'

一步一步:

>>> input_string.split()
['this', 'is', 'a', 'sample', 'test']

>>> [word[::-1] for word in input_string.split()]
['siht', 'si', 'a', 'elpmas', 'tset']

>>> ' '.join(word[::-1] for word in input_string.split())
'siht si a elpmas tset'

答案 4 :(得分:0)

到目前为止,所有其他答案都忽略了单词之间或输入字符串的两端有多余空格时的情况。请测试您的代码以验证其是否正常运行。下面提供的main函数具有一些测试,您可能希望使用它们来验证函数是否正常运行,如果发现代码行为不正确,则可能需要添加更多测试:

def main():
    print('Running test 1 ...')
    text = 'this is a sample test'
    par = preserve_and_reverse(text)
    assert par == 'siht si a elpmas tset'
    print('Running test 2 ...')
    text = 'This is a sample TEST'
    par = preserve_and_reverse(text)
    assert par == 'sihT si a elpmas TSET'
    print('Running test 3 ...')
    text = 'This string  has   some    extra     spaces'
    par = preserve_and_reverse(text)
    assert par == 'sihT gnirts  sah   emos    artxe     secaps'
    print('Running test 4 ...')
    text = ' check  spaces   at    string     ends      '
    par = preserve_and_reverse(text)
    assert par == ' kcehc  secaps   ta    gnirts     sdne      '
    print('Done!')


def preserve_and_reverse(text):
    return ' '.join(word[::-1] for word in text.split(' '))


if __name__ == '__main__':
    main()

答案 5 :(得分:-1)

def sample(string):
    list=[]
    string1=string.split()
    for i in string1:
        list.append(i[::-1])
    print(" ".join(list))

if __name__=="__main__":
    input=input("Enter string: ")
    sample(input)