首页 > 解决方案 > 无法使用“for”循环函数反转文本

问题描述

我想使用循环和函数来反转字符串。但是当我使用以下代码时,它再次输出完全相同的字符串。但它假设反转字符串。我不知道为什么。

def reversed_word(word):
    x=''
    for i in range(len(word)):
        x+=word[i-len(word)]
        print(i-len(word))
    return x


a=reversed_word('APPLE')
print(a)

标签: python-3.xreverse

解决方案


如果您查看调试语句的输出(print函数中的 ),您会看到您正在使用索引-5-1.

由于负索引指定到字符串末尾的距离, -5is A,-4 是第一个P,依此类推。而且,由于您将这些依次附加到最初的空字符串中,因此您只需按照它们在原始字符串中出现的顺序添加字母。

要以其他顺序添加它们,您可以简单地使用len(word) - i - 1作为索引,给出序列(len-1) .. 0(而不是-len .. -1,它等于0 .. (len-1)):

def reversed_word(word):
    result = ""
    for i in range(len(word)):
        result += word[len(word) - i - 1]
    return result

另一种选择是意识到您根本不需要使用索引,因为迭代字符串一次会给您一个字符。但是,由于它按顺序为您提供了这些字符,因此您需要通过为每个字符添加前缀而不是附加来调整构建反转字符串的方式:

def reverse_string(word):
    result = ""
    for char in word:
        result = char + result
    return result

APPLE这将反向字符串(从)构建为APAPPA和。LPPAELPPA


当然,你也可以完全Pythonic:

def reverse_string(word):
    return "".join([word[i] for i in range(len(word), -1, -1)])

这使用列表推导在原始字符串中创建一个字符列表(以相反的顺序),然​​后将该列表连接成一个字符串(带有一个空分隔符)。

可能不是我交作业的东西(除非我想惹恼标记),但你应该知道,这就是专业的 Pythonistas 通常解决问题的方式。


推荐阅读