【问题标题】:Error trying reversing words in a string using python尝试使用 python 反转字符串中的单词时出错
【发布时间】:2023-01-27 21:21:22
【问题描述】:
def spin_words(sentence):
    for word in sentence.split():
        if len(word)>=5:
            words = word[::-1]
    new_sentence = sentence.replace(word,words) 
    return new_sentence
spin_words('Hey fellow warriors')


#output is 'Hey fellow sroirraw'

我试图反转字符串中大于五个字符的一些单词,但我只反转了一个单词。

【问题讨论】:

  • words 在循环中被覆盖,只有最后一个 >=5 的单词会被反转。此外,如果没有单词足够长,您将遇到错误,因为永远不会设置 words

标签: python string


【解决方案1】:

将句子存储为数组并独立更改每个元素比在每次迭代中修改整个句子更容易。

def spin_words(sentence: str):
    words = sentence.split()
    for idx, word in enumerate(words):
        if len(word) >= 5:
            words[idx] = word[::-1]
    return ' '.join(words)

rev = spin_words('Hey fellow warriors')
print(rev)  # Hey wollef sroirraw

笔记:这个解决方案确实不是保留连续的空格或换行符。

【讨论】:

  • 这比我采用的方法更好,并且还可以正确处理某些单词是其他单词的一部分的情况。
【解决方案2】:

你应该例如将反转移动到循环本身:

def spin_words(sentence):
    for word in sentence.split():
        if len(word)>=5:
            words = word[::-1]
            sentence = sentence.replace(word, words) 
    return sentence

spin_words('Hey fellow warriors')

您还应该警惕单词成为其他单词的一部分,例如在tester anothertester

【讨论】:

    【解决方案3】:

    为您的代码试试这个:

    def spin_word(this_word):
        rotated_list = list(this_word.lower())[::-1]
        rotated_word = ''.join(rotated_list)
        return rotated_word
    
    def spin_frase(frase):
        rotated_frase = []
        for word in frase.split():
            if len(word) >= 5:
                rotated_frase.append(spin_word(word))
            else:
                rotated_frase.append(word)
        print(' '.join(rotated_frase))
    
    if __name__ == '__main__':
        spin_frase('Hey fellow warriors')
    

    【讨论】:

      猜你喜欢
      • 2018-07-09
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多