无法使用'for'循环功能反转文本

问题描述 投票:-1回答:3

我想使用Loop&Function反转字符串。但是,当我使用以下代码时,它将再次输出完全相同的字符串。但是它假定反转字符串。我不知道为什么。

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.x reverse
3个回答
1
投票

[如果您查看调试语句的输出,则会看到您正在使用从-5-1的索引:

-5
-4
-3
-2
-1

负值指定到字符串的end的距离,因此-5A,-4是第一个P,依此类推。由于您是将这些字符依次附加到原来为空的字符串中,因此您只是按照字母在原始字符中出现的顺序添加它们。

要以其他顺序添加它们,您可以简单地使用len(word) - i - 1作为索引。


[另一种选择是意识到您根本不需要使用索引,因为遍历字符串一次可以给您一个字符。因为它为您提供了orser中的那些字符,所以您需要通过为每个字符加上前缀而不是附加来调整构建反向字符串的方式:

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

当然,您也可以完全使用Pythonic:

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

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


0
投票

假设您的单词是python

然后,由于0,您将循环遍历5len(word) == 6的值。

[i0时,i-len(word)-6(请注意,该值为))。您会注意到word[-6]是字符,位于字符串末尾左侧的六个位置,即p

类似地,当i1时,i-len(word)-5word[i-len(word)]y

此模式在循环的每次迭代中都会继续。

似乎您打算在每次迭代中使用正索引来向后移动字符串。要获得此行为,请尝试使用表达式len(word)-i来索引您的字符串。


0
投票
def reversed_word(word):
    reversed = ''
    for i in range(len(word)-1, -1, -1):
        reversed += word[i]
    return reversed

print(reversed_word("apple"))
© www.soinside.com 2019 - 2024. All rights reserved.