这行代码离我的理解还很远,这是做什么的?

时间:2019-05-22 13:16:10

标签: python python-3.x

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 = '')

2 个答案:

答案 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条件下执行该语句,否则将进行下一次循环迭代。