我是一个python初学者,并且已经给出了这段代码来写出每行的功能。这是代码:
z = [int(input("Enter your nth term sequence ")) for _ in range(12)]
total = sum([num * 8 if i % 2 == 0 else num * 4 for i, num in enumerate(z)])
因此,我假设z是一个列表,其中用户输入第n个术语序列的编号,他们可以输入12个数字。然后代码找到一个数字的总和乘以8,如果除以2得到余数为0.我只是得不到([num * 8 if i % 2 == 0 else num * 4 for i, num in enumerate(z)])
的含义。我试过并尝试过搜索,但这太令人困惑了。请尽可能帮助
答案 0 :(得分:2)
代码:
foo = [num * 8 if i % 2 == 0 else num * 4 for i, num in enumerate(z)]
在功能上等同于:
foo = []
for i, num in enumerate(z): # num is element in z, i is index of num
if i % 2 == 0:
foo.append(num*8)
else:
foo.append(num*4)
然后用户在结果上调用sum
这是否回答了你的问题?
编辑:解释枚举
您应该习惯阅读有关函数的文档,例如enumerate
。在您阅读完之后,如果您仍然不了解,那么您应该搜索stackoverflow。例如:A post asking what enumerate is with a good answer
通话:
for num in z:
i = z.index(num)
# Do stuff
在功能上与说法相同:
for i, num in enumerate(z):
# Do stuff
答案 1 :(得分:2)
让我们一步一步地解决这个问题。
z = [int(input("Enter your nth term sequence ")) for _ in range(12)]
首先,您假设z
是一个列表是正确的。它是从列表理解生成的。它使用input("Enter your nth term sequence ")
从for _ in range(12)
的用户输入总共12次。所以z
将是12个用户输入整数的列表(不是数字,因为它可以是任何整数,而不仅仅是0-9)。
接下来我们有:
total = sum([num * 8 if i % 2 == 0 else num * 4 for i, num in enumerate(z)])
我们立即明确表示我们正在使用total = sum([...])
列表的总和生成总计。接下来我们需要弄清楚列表推导所生成的列表的内容。
为了使列表理解更容易理解,我们可以添加一些括号,将理解分解为更容易管理的部分,然后我们将单独处理。
(num * 8) if (i % 2 == 0) else (num * 4) for (i, num) in (enumerate(z))
前三组是相当不言自明的:
num * 8
八倍的数字
i % 2 == 0
检查i
是否均匀
num * 4
四倍数
因此,如果i
为偶数,则列表推导的前半部分返回的值为该数字的8倍,如果不是,则返回该数字的4倍。
这样我们就可以获得列表理解的后半部分for i, num in enumerate(z)
。
让我们先讨论枚举。枚举采用序列并对该序列中的每个元素进行编号。例如,enumerate(['a', 'b', 'c'])
将返回2元素元组[(0, 'a'), (1, 'b'), (2, 'c')]
的列表。
for i, num in
从enumerate(z)
获取元组,并将每个元组解压缩为i
和num
。因此i
是由enumerate
生成的索引,num
是原始用户输入。
z = [int(input("Enter your nth term sequence ")) for _ in range(12)]
total = sum([num * 8 if i % 2 == 0 else num * 4 for i, num in enumerate(z)])
第1行从用户输入中获取12个整数,并将它们存储在z
第2行采用那些整数,对它们进行索引(从0开始),如果索引是偶数,则将该数乘以8,如果索引是奇数,则将该数乘以4。
最后,第2行将所有相乘的用户输入相加,并将它们存储在total
答案 2 :(得分:1)
好吧让我们分解吧。您正在将某些内容存储到变量“total”中。
然后你将括号内的所有内容总和。你运行一个if语句,说如果i模数2(即如果它可被2整除并且没有剩余余数)将num(变量)乘以8加到列表z。
否则,在列表z中附加数字4。它是一种紧凑的方式,他们写出了语句而不是多行