Python中while not name循环的工作机制是怎样的?
循环逻辑与判断规则说明
先明确两个Python的基础运行规则,搞懂这俩你就明白这段代码的逻辑了:
while循环的触发规则:只有while后面跟的条件算出来是布尔真(True)的时候,才会跑循环里的代码;条件算出来是假(False)就直接退出循环,往下走后面的代码- Python的布尔隐式转换规则:做逻辑判断的时候不需要值必须是显式的
True/False,任何值都能自动转成布尔值参与运算,其中会被判定为假的值(也叫falsy值)只有这几类:None- 数值0(整数0、浮点数0.0、复数0j都算)
- 空的序列或容器:空字符串
''、空列表[]、空字典{}、空元组()等
除了上面列的这些值,剩下的绝大多数值在做判断时都会被当成真(True)。
对应你贴的代码,逐行走一遍执行流程就很清楚了:
name = None while not name: name = input('what is your name ? ') print('hello '+name)
- 最开始给
name赋值为None,这个值属于上面说的falsy值,转成布尔值就是False - 第一次判断循环条件
not name:因为name的布尔值是False,not False算出来是True,满足循环执行要求,进入循环体 - 循环里跑输入语句等用户输入,这里会出现两种情况:
- 用户啥也不输入直接敲回车:
input()会返回空字符串'',空字符串也是falsy值,布尔值为False。这轮循环跑完回到条件判断时,not ''结果还是True,就会再次进入循环,重新提示用户输入 - 用户输入了有效姓名(比如输入
Li Ming):input()返回非空字符串,非空字符串的布尔值是True。这轮循环跑完回到条件判断时,not True算出来是False,不满足循环执行要求,直接退出循环
- 用户啥也不输入直接敲回车:
- 退出循环后执行后面的print语句,拼接输入的姓名输出问候语
你之前的认知偏差本质是搞反了两个点:一是not运算符的取反作用,二是while循环的触发条件。你以为name不为空时条件为真会持续跑循环,实际上name不为空的时候not name的结果是假,循环刚好停止,和你之前想的逻辑完全反过来了。
内容的提问来源于stack exchange,提问作者Youssef Elsaid hassan
相关产品推荐
相关产品推荐

