打印出字母序列给出的字母 - 蟒蛇

use*_*086 2 python for-loop

在练习题考试中,我们给出以下内容:

ALPHABET = "ABCD" # letters to use in sequences 
seq = 3 * [ "" ]
letterSeqs = [ ] # list of all the letter sequences

for seq[0] in ALPHABET:
    for seq[1] in ALPHABET:
        for seq[2] in ALPHABET:
            letterSeqs.append("".join(seq))
Run Code Online (Sandbox Code Playgroud)

我们应该估计列表letterSeqs中的条目总数以及第一个和最后一个条目.任何人都可以解释代码如何工作?

谢谢!

aba*_*ert 5

这是奇怪的代码,但合法......

第一:

seq = 3 * [ "" ]
Run Code Online (Sandbox Code Playgroud)

...创建一个空字符串,以及一个包含对该空字符串的三个引用的列表.

之后,你这样做:

for seq[0] in ALPHABET:
Run Code Online (Sandbox Code Playgroud)

这是棘手的一点.它循环ALPHABET,依次分配4个字母中的每一个seq[0].通常,您使用变量作为循环变量,而不是像这样的复杂目标.事实上,我猜老师这样做是为了让你失望.然而,它确实是有用的.

然后,对于这4次迭代中的每次迭代,您都这样做:

    for seq[1] in ALPHABET:
Run Code Online (Sandbox Code Playgroud)

每个外循环再次循环4次,因此总共有16个中间循环.然后,对于这16个中的每一个,你这样做:

        for seq[2] in ALPHABET:
Run Code Online (Sandbox Code Playgroud)

每个中间循环再次循环4次,总共64个内循环.

然后,对于每一个,你这样做:

            letterSeqs.append("".join(seq))
Run Code Online (Sandbox Code Playgroud)

此时,seq将始终是3个单字符串的列表.这是使用seq[0]循环变量的回报.话虽这么说,有更好的方法来做同样的事情.只需使用for i,for j和,for k而这可能是i+j+k.(如果你想推广到3个字符串以外的东西,静态嵌套循环结构是困难的部分,而不是单独的变量...)

因此,它将join成为一个3个字符的字符串.然后将其附加到空列表中.

所以,最后,你有一个包含64个3字符字符串的列表.