字符串镜像函数
我想写一个函数,让一个字符串反转过来,但不使用任何内置的函数,只用一个 循环
。
比如,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
,你会看到它是一个字母一个字母地构建起来的。