在看慕课的课程,有段代码为:
i = 1 while(i % 3): print(i), if (i >= 10): break i += 1
while后面的条件要为真,才能够执行代码块,但是i%3这个代表了什么条件呢?
ringa_lee
% 求余运算符,是看后者能否被前者整除, i%3 这个条件就是判断i能不能被3整除,所以结果只有两种 0 or 1 ! 比如 9%3 = 0 10%3 = 1,基础运算符,楼主可以多查一下资料,谢谢
历史遗留问题,0为假,非0为真,所以while(i%3)等价于while(i%3 != 0).
while(i%3)
while(i%3 != 0)
首先,我们我们先看while语句的条件(i % 3),这个楼上解释了%是求余的意思,i%3的意思是求i除3的余数,因此while条件的意思就是i除3余数要大于0.现在我们已知i的值为1,所以while条件成立,输出1,i++之后,i的值为2此时也满足while条件进入循环输出2,接着i++,此时i的值为3不满足条件,不执行while循环,跳出。
正如题主问的,while后面的条件要为真,才能够执行代码块,i%3如果值为0,则为false,不执行后面的代码块,不为0的(1和2),则相当于true,执行后面的代码块,if语句也是相同的,条件语句如果为0,为false,不执行;非0,为true,执行。希望能帮到你!
i%3的结果难道不是获取余数么?比如i=3结果是0 i=5结果是2 而在做条件判断的时候会自动转成布尔类型,所以不能被3整除的才能进行运算,因此不管是1还是2都是可以进去,所以这题应该是求得找出10以内不能被3整除的数吧?
i%3
i=3
0
i=5
2
找出10以内不能被3整除的数吧?
单纯的while(i%3)是指当i能被3整除时,跳过该循环。
while (i % 3) { /* ... */ }
等价于
while (i % 3 != 0) { /* ... */ }
python 中的 i % 3 是模除(modulo)运算,对于整数操作数 a,b 满足 a / b * b + a % b == a
i % 3
a
b
a / b * b + a % b == a
当且仅当 a 整除 b 时,a % b == 0。
a % b == 0
所以循环终止的条件是 i 整除 3
i
3
的意思就是i可以被3除尽的时候循环停止。0为假,非0为真就是这个意思。当i%3==0的时候,就不循环了。
i%3 求模计算,有三种情况0 1 2 一个值判断真假遵循NaN undefined null 0 "" false 都为假,其余都为真,这时当求模为0时,即为假,就不会进该循环。
当i循环到能被3整除就跳出循环
% 求余运算符,是看后者能否被前者整除, i%3 这个条件就是判断i能不能被3整除,所以结果只有两种 0 or 1 ! 比如 9%3 = 0 10%3 = 1,基础运算符,楼主可以多查一下资料,谢谢
历史遗留问题,0为假,非0为真,所以
while(i%3)
等价于while(i%3 != 0)
.首先,我们我们先看while语句的条件(i % 3),这个楼上解释了%是求余的意思,i%3的意思是求i除3的余数,因此while条件的意思就是i除3余数要大于0.
现在我们已知i的值为1,所以while条件成立,输出1,i++之后,i的值为2此时也满足while条件进入循环输出2,
接着i++,此时i的值为3不满足条件,不执行while循环,跳出。
正如题主问的,while后面的条件要为真,才能够执行代码块,i%3如果值为0,则为false,不执行后面的代码块,不为0的(1和2),则相当于true,执行后面的代码块,if语句也是相同的,条件语句如果为0,为false,不执行;非0,为true,执行。希望能帮到你!
i%3
的结果难道不是获取余数么?比如i=3
结果是0
i=5
结果是2
而在做条件判断的时候会自动转成布尔类型,所以不能被3整除的才能进行运算,因此不管是1还是2都是可以进去,所以这题应该是求得找出10以内不能被3整除的数吧?
单纯的
while(i%3)
是指当i能被3整除时,跳过该循环。等价于
python 中的
i % 3
是模除(modulo)运算,对于整数操作数a
,b
满足a / b * b + a % b == a
当且仅当
a
整除b
时,a % b == 0
。所以循环终止的条件是
i
整除3
的意思就是i可以被3除尽的时候循环停止。0为假,非0为真就是这个意思。当i%3==0的时候,就不循环了。
i%3 求模计算,有三种情况0 1 2 一个值判断真假遵循NaN undefined null 0 "" false 都为假,其余都为真,这时当求模为0时,即为假,就不会进该循环。
当i循环到能被3整除就跳出循环