我想编写一个函数来镜像字符串,而不使用任何内置函数,并且只使用loop
。
例如,wordMirror("stackexchange")
返回'stackexchangeegnahcxekcats'
。
我使用前面问题中的一些提示编写了以下代码:
def wordMirror(word):
c = ""
for x in word:
c = c + x
return word + c
但它没有工作。然后我开始摆弄它,只是把c = c + x
转换成c = x + c
,它神奇地工作了。
当我切换变量时,究竟是什么代码读取?
没有什么神奇的,你在c
中添加字符的顺序是颠倒的,因为你在之前插入了x
以前在c
中。
你真的应该手动完成一次运行:
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
从这个简单的表中,您应该能够看到字符串是如何增长的。学习如何手工执行程序是一项至关重要的技能。
一步一步地浏览代码有助于我们理解它。
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)找到一个好的IDE,或2)在战略位置添加print
语句。尝试在c = x + c
之后立即添加print x, c
行,您将看到它一次构建一个字母。
我知道你在寻找循环,但为什么不直接:
c = "hello"
output = c + c[::-1]
print output
#=> 'helloolleh'
这将获取字符串c
,您可以将其视为一个字符数组,并以相反的方式遍历它(切片表示法的最后一个参数中的-1
执行此操作)。这样,您就可以轻松地将起始字符串与其镜像版本连接起来。
许多python开发人员认为简单比复杂好。这种技巧是一种增加您和其他开发人员理解和维护您生成的代码的便利性的方法。