在练习题考试中,我们给出以下内容:
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中的条目总数以及第一个和最后一个条目.任何人都可以解释代码如何工作?
谢谢!
这是奇怪的代码,但合法......
第一:
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字符字符串的列表.
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |