【问题标题】:How to find start and end of a string如何查找字符串的开头和结尾
【发布时间】:2016-04-16 21:12:13
【问题描述】:

目的是编写一个函数来反转字符串中的单词。所以如果输入是:“我是学生”,输出应该是“学生是我”

我在 Python 中有以下代码,它首先反转字符串中的所有字符,然后循环反转的句子以反转单词并将它们打印到“最终句子”变量。

因为我要检查的条件只是一个空格,所以不会打印第一个单词,即如果输入是“我是学生”,我的代码可以工作(注意“我”之前的空格)......但是如果输入是“我是学生”,那么输出只是“学生是”

我需要知道如何修改我的 IF 语句,以免遗漏第一个单词

def reverse(sentence):
    count = 0
    new_sentence = ''
    final_sentence = ''
    counter = 0
    word = ''

    for char in sentence[::-1]:
        new_sentence = new_sentence + char


    for char in new_sentence:
        if char != " ":
            count = count + 1
            continue
        else:
            for i in new_sentence[count-1::-1]:

                if i != " ":    
                    word = word + i
                else:
                    break

        count = count + 1
        final_sentence = final_sentence + " " + word
        word = ''
    print final_sentence

reverse("I am a student")

【问题讨论】:

    标签: python string if-statement


    【解决方案1】:

    我不知道你为什么要做这么复杂的循环?您可以将句子拆分,反转然后重新加入:

    >>> ' '.join('I am a student'.split(' ')[::-1])
    'student a am I'
    

    将其转换为函数:

    def reverse_sentence(sentence):
        return ' '.join(sentence.split(' ')[::-1])
    

    【讨论】:

    • 这是正确的做法。但是,“这种方法的错误在哪里”似乎是一个有效的问题,而您还没有解决这个问题。无论出于何种原因(教育?),OP 都在展开他们自己的解决方案,因此您似乎应该解决为什么他的方法无法正常工作以获得完整答案
    • 您不必将单引号作为拆分参数。 split() 的默认参数是一个空格。此外,Python 已经自带了一个内置的 reversed() 函数。所以解决方案可以很简单:return " ".join(reversed("I am a student".split()))
    • 正如 en_Knight 指出的那样,这确实适用于一个类,并且我试图在不使用 spilt、join、reverse 或任何其他内置 Python 函数的情况下做到这一点。谢谢!
    【解决方案2】:

    您在代码中做了几件奇怪的事情。例如:

    new_sentence = ''
    for char in sentence[::-1]:
        new_sentence = new_sentence + char
    

    您通过串联构建的字符串已经存在于sentence[::-1] 中。你可以刚刚完成new_sentence = sentence[::-1]

    您可以使用enumerate()检查第一个单词,并检查句子中该点之前是否有空格:

    for idx,char in enumerate(new_sentence):
        if char != " " or ' ' not in new_sentence[:idx]:
    

    但是,实现您的实际目标的最简单方法是使用split(),自动用空格分割句子。反转后使用join() 将其重新组合在一起。

    def reverse(sentence):
        return ' '.join(sentence.split()[::-1])
    

    【讨论】:

      猜你喜欢
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多