字符串镜像函数

2 投票
3 回答
2082 浏览
提问于 2025-04-18 15:42

我想写一个函数,让一个字符串反转过来,但不使用任何内置的函数,只用一个 循环

比如,wordMirror("stackexchange") 这个函数应该返回 'stackexchangeegnahcxekcats'

我写了下面的代码,参考了我之前的一些问题:

def wordMirror(word):
    c = ""
    for x in word:
        c = c + x
    return word + c

但是它没有成功。然后我开始尝试修改,简单地把 c = c + x 改成 c = x + c,结果它就神奇地工作了。

那么,当我交换了变量的时候,代码到底在做什么呢?

3 个回答

2

我知道你在找循环的用法,但为什么不试试这个呢:

c = "hello"
output = c + c[::-1]
print output
#=> 'helloolleh'

这个方法会把你的字符串 c 当作一个字符数组来处理,然后反向遍历它(最后一个参数中的 -1 就是用来实现这个的)。这样,你就可以很方便地把原始字符串和它的镜像版本拼接在一起。

很多Python开发者认为,简单的方式比复杂的方式更好。这种技巧可以让你和其他开发者更容易理解和维护你写的代码。

5

这没有什么神奇的地方,你把字符添加到c中的顺序是反的,因为你是在c里原本的内容之前插入了x

你真的应该手动一步一步地执行一下:

iteration  |   x   |    c 
-------------------------------
0             ''       ''
1              s        s
2              t        ts 
3              a        ats
4              c        cats
5              k        kcats
6              e        ekcats
7              x        xekcats
8              c        cxekcats
9              h        hcxekcats
10             a        ahcxekcats
11             n        nahcxekcats
12             g        gnahcxekcats
13             e        egnahcxekcats

通过这个简单的表格,你应该能看到字符串是如何增长的。学会手动执行你的程序是一个非常重要的技能。

4

一步一步地走过代码,可以帮助我们理解它。

c = c + x

在这个例子中,假设 c = "stackexchange"。你会一个字母一个字母地查看,每个字母都会放到 x 里。

# x = "s"
c = c + x    # c = "" + "s" = "s"
# x = "t"
c = c + x    # c = "s" + "t" = "st"
# x = "a"
c = c + x    # c = "st" + "a" = "sta"

现在我们换个方式试试。

# x = "s"
c = x + c    # c = "s" + "" = "s"
# x = "t"
c = x + c    # c = "t" + "s" = "ts"
# x = "a"
c = x + c    # c = "a" + "ts" = "ats"

这样应该能让你明白为什么加法的顺序会影响结果。当你想弄清楚代码为什么这样工作的时,慢慢地走过代码通常能更清楚地显示出发生了什么。你可以通过 1) 找一个好的开发环境,或者 2) 在合适的地方添加 print 语句来做到这一点。试着在 c = x + c 之后立即添加一行 print x, c,你会看到它是一个字母一个字母地构建起来的。

撰写回答