看到你这两个问题,觉得题主是真新手(纯的),哈哈!
问题1,and和or逻辑运算符是很多人容易搞错的问题,要弄明白首先要明白一下3点:
(1),and逻辑运算符 ,要and两边同为真,才为真,比如 x and y ,首先判断x,如果x=0,短路,这个表达式=0;如果x!=0,再来判断y,如果y等于0,短路,表达式=0;如果y也不等于0, 表达式=y。
(2) or逻辑运算符,or两边有一个为真,即为真,比如 x or y ,首先判断x,如果x!=0,短路,表达式=x;如果x=0,判断y,如果y!=0,则表达式=y;如果y也等于0,则表达式=0
(3)在and和or同时存在时,and优先级高于or;比如: 1 or 0 and 2 =1而不是等于 2
弄懂了这些,上面简直不要太简单,0 or 0=0,然后0 or 4 =4 然后后面都是or,直接短路,式子=4
问题2:
这段代码就是打印100以内的奇数,i从0 开始,i是偶数时,i的值增1,i是奇数时,打印i,i的值增1,
再来看,你把i+=1改成i+=2,改的一定是if条件下吧,改成2时,i=0时,执行else,i自增变为1,再循环
,执行if语句,打印1,i自增2变为3,再执行if语句,打印3,i自增2变为5.。。。。一直到i=100,
因为奇数并没有改变,所以结果不变。当你把它去掉是,循环执行到i=1时,执行if 打印1,然后i的值没发生改变,所以再次执行if语句,再打印1,相当于if永远为真,所以就无限打印1喽。