这个if not n是什么意思

这个if not n是什么意思


https://img1.sycdn.imooc.com/climg/6756ee5409f963b710330528.jpg            
这个if判断是布尔值吧,只看这个n是0还是1,这样写是什么意思,感觉不要这个if也行啊
能详细说说if判断的原理吗?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小猿 2024-12-10 10:39:29

同学,你好!1、if not n指的是,是否接收到了c.send发送过来的值,如果没有接收到n的值,那么就执行return 语句。

2、if 判断是布尔值,判断真假,但这里不是看n是0还是1,是看n 是否有值(视频中18分46秒老师有说),如果接收到值n 为真,not n结果为假的。

如果n没有接到值为假的,not n 非假为真。

3、如果不加if 判断,那么会一直执行while True,一直有输出内容造成无线循环的死循环。

4、当n 接收不到值,为假,not n 为真,即if not n 为真,则执行if 语句块下的return语句,结束customer()函数,也结束了while True 的循环


祝学习愉快~

  • 提问者 慕运维8253108 #1

    老师你好,再问一下这个布尔值判断真假就是判断True 和False吧,为什么在这里就是判断n是否接受到值

     是not n 这种句子的原因吗?

    这个不带if判断好像确实可以,我认为是product函数启动生成器次数只与i有关

    i遍历结束了,生成器就结束了,所以不用写if判断,这样想对吗?

    https://img1.sycdn.imooc.com/climg/6757d5ae0961a60307240445.jpg

    https://img1.sycdn.imooc.com/climg/6757d5ae0915e60308060486.jpg


    2024-12-10 13:50:37
  • 好帮手慕小猿 回复 提问者 慕运维8253108 #2

    同学,你好!1、同学f.send(i)应该把i转换成字符串类型的。数值类型的程序报错,因为当 i = 0 时,传入到 customer 生成器中,n 被赋值为 0,此时 if not n 这个条件成立,就会执行 return 语句,这就导致 customer 生成器结束执行,引发了 StopIteration 异常。

    https://img1.sycdn.imooc.com/climg/6757fe5b09c7566e05320079.jpg

    2、if 语句最终是判断true or false。如果是true执行if 下的代码块,为false 则不执行if 下的代码块。同学可以这样理解,视频中老师使用f.send(str(i)) ,当在customer()函数中会接收到字符串'0'、'1'、'2'、'3'、'4'。在python中空字符串“”对应的布尔值为false,其余值均为true,也就是'0'、'1'、'2'、'3'、'4'对应的布尔值均为true。not 是取反的意思,not true结果是false。如果if 的布尔值是false 则不执行if 下的代码块,即:'0'、'1'、'2'、'3'、'4'时不执行return  。

    当n 接收不到值时,n 值为false ,not false 结果为true。如果if 的布尔值是true ,则执行if 下的代码块,即执return 语句。

    不知道这样解释同学是否理解

    3、当前的代码是可以不写 if 判断的。但从更长远、更复杂的编程应用角度来看,建议保留if语句。如果后续代码逻辑需要在特定条件下提前结束生成器的运行,而不是单纯依赖 product 函数里的循环次数来决定,就会比较麻烦。例如,假设要根据一些外部输入或者运行时的状态判断(比如接收到一个特定的停止指令,或者某个系统资源不足等情况)来提前终止 customer 生成器的执行,仅依靠 product 函数的循环结束是无法做到的,而原代码中 if not n: return 这样的判断语句就提供了一种可以从外部传入合适的值来主动结束生成器的机制,能更灵活地应对这类需求。所以建议保留

    祝学习愉快~

    2024-12-10 18:50:29
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师