if (i + j) % 8 in [1, 5]:
这行代码是什么意思,它将如何执行?
for i in range(8):
for j in range(16):
if (i + j) % 8 in [1, 5]:
print('/', end = '')
答案 0 :(得分:6)
它检查i+j
模8是1还是5。
(i+j)
返回其和(显然)
% 8
返回modulo 8.例如:8 % 8 == 0, 9 % 8 == 1, 10 % 8 == 2
等
in [1, 5]
检查是否可以在列表(i + j) % 8
中找到[1, 5]
的结果-是等于1还是等于5
以下是官方的Python文档about modulo运算符:
%(模)运算符从第一个参数除以第二个参数得出余数。首先将数字参数转换为通用类型。右零参数引发ZeroDivisionError异常。参数可以是浮点数,例如3.14%0.7等于0.34(因为3.14等于4 * 0.7 + 0.34。)模运算符始终产生与第二个操作数具有相同符号(或为零)的结果;结果的绝对值严格小于第二个操作数1的绝对值。
这是Python的官方文档about "in"运算符:
正在测试或未测试成员资格的运营商。如果x是s的成员,则x in s的结果为True,否则为False。 x not in s返回x in s的取反。所有内置序列和集合类型都支持此功能以及字典,为此,它们会测试字典是否具有给定的键。对于列表,元组,集合,frozenset,字典或collections.deque等容器类型,y中的表达式x等于any(x是e或x == e表示y中的e)。
对于字符串和字节类型,当且仅当x是y的子字符串时,y中的x才为True。等效测试为y.find(x)!= -1。空字符串始终被认为是任何其他字符串的子字符串,因此“ abc”中的“”将返回True。
答案 1 :(得分:1)
in
运算符(成员运算符):“ in”运算符用于检查某个值是否存在于序列中。如果找到指定顺序的值,则结果为true,否则为false。
%运算符用于模除。
此处(i+j)%8
将取值从0到7,因为它是模除法。
但是在代码中,模除法的结果在列表[1,5]
中被选中,无论它是否存在。
如果它存在于列表中,则我们在if条件下执行该语句,否则将进行下一次循环迭代。