擅长:python、mysql、java
<p>我认为从内而外解释比较容易</p>
<pre><code> stmt = stmt[:i] + mix[i] + stmt[i + 1:]
</code></pre>
<ul>
<li>stmt[:i]是字符串的开始,直到但不包括偏移量i(因此字符串的头部<em>不会改变</em>)</li>
<li>mix[i]是另一个字符串中偏移量i的字符</li>
<li>stmt[i+1:]是字符串的其余部分,从i之后的偏移量到结尾(因此字符串的尾部<em>不会改变</em>)</li>
</ul>
<p>所以总的来说,这意味着“创建一个新字符串,与旧字符串相同,但是在偏移量i处替换mix中的相应字符”。在</p>
<p>那么我们这样做是为了抵消什么呢?在</p>
<p>它被称为循环</p>
^{pr2}$
<p>范围(a,b,c)生成一系列数字:a,a+c,a+2c,a+3c。。。a+Nc<;b</p>
<p>Python字符串的索引从0开始-第一个字符是stmt[0]-len(string)是字符串中的字符数,因此最后一个字符是stmt[len(stmt)-1]。所以这个循环给i的值是(0,2,4,6…),但不包括第一个太高的索引。实际上,循环说“交换第一个字符、第三个字符和第五个字符。。。尽可能多的字符而不离开字符串的末尾”。在</p>
<p>更直接的写作方式是</p>
<pre><code>stmt = "Iomrscr yn wore"
mix = "C'r eotrA,snep!"
print ''.join(d[i%2] for i,d in enumerate(zip(mix,stmt)))
</code></pre>
<p>它说“将mix和stmt中的字符配对,索引它们,当索引为偶数时从mix中提取一个字母,当索引为奇数时从stmt中提取一个字母;然后将所有字符重新连接到一个字符串中并打印它”。在</p>