鱼C论坛

 找回密码
 立即注册
查看: 6350|回复: 8

[已解决]python 006课后问题

[复制链接]
发表于 2016-5-15 09:01:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
2个问题
1.第四题中提到了‘短路逻辑’ 写的很详细,但是对0 or 0 or 4 or 6 or 9的判断,我觉得答案还是0啊,按照小甲鱼老师课程里说的
0 or 0 == 0
0 or 4 == 0
0 or 6 == 0
依次类推,那最后答案应该是0
2.i = 0
while i <= 100:
    if i % 2 != 0:
        print(i, end=' ')
        i += 1
    else:
        i += 1

这个代码我试着把  i += 1修改为 i += 2和去掉这两种
第一种情况得到的是一样的结果
第二种情况是无线循环1
这个能给解释下是为什么吗?
最佳答案
2016-5-18 19:46:57
看到你这两个问题,觉得题主是真新手(纯的),哈哈!
问题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喽。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-5-15 10:11:57 | 显示全部楼层
我想第一题应该是这样的吧(猜测的。。):
0 or 0 ==0
0 or 4 ==4     }
                     取true值,因为or和and不同,不用和and一样需要二个值都为true的,只要有一个就好
0 or 6 ==6     }
然后可能是
4 or 6 ==4
取第一个是true值,不关心下一个值是什么,所以是4吧
不知道对不对
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-5-18 11:30:43 | 显示全部楼层
第一个问题:or是取真值的,0 or 4也就是4是真,所以是4。逻辑短路,也就是后面的就不再计算了。
第二个问题:没看懂楼主修改后代码的意思,最好是贴出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-18 13:06:16 | 显示全部楼层
i = 0
while i <= 100:
    if i % 2 != 0:
        print(i, end=' ')
        i += 1
    else:
        i += 1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-5-18 13:07:43 | 显示全部楼层
i = 0
while i <= 100:
    if i % 2 != 0:
        print(i, end=' ')
        i += 1
    else:
        i += 1
改成
i = 0
while i <= 100:
    if i % 2 != 0:
        print(i, end=' ')
        i += 2或者 i += 3或者直接去掉这一行
    else:
        i += 1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-18 16:54:50 | 显示全部楼层


i = 0
while i <= 100:
    if i % 2 != 0:
        print(i, end=' ')
        i += 1
    else:
        i += 1
改成
i = 0
while i <= 100:
    if i % 2 != 0:
        print(i, end=' ')
        i += 2或者 i += 3或者直接去掉这一行     #+=2  还是可以得出结果,+=3 就会漏数了。如果去掉就会进入死循环  
    else:
        i += 1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-18 19:46:57 | 显示全部楼层    本楼为最佳答案   
看到你这两个问题,觉得题主是真新手(纯的),哈哈!
问题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喽。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 3 反对 0

使用道具 举报

 楼主| 发表于 2016-5-18 21:27:44 | 显示全部楼层
python大法好 发表于 2016-5-18 19:46
看到你这两个问题,觉得题主是真新手(纯的),哈哈!
问题1,and和or逻辑运算符是很多人容易搞错的问题, ...

谢谢,没错,是纯新手。24K纯的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-19 07:50:54 | 显示全部楼层
我也是纯的新手。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 15:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表