今天看了下python中的一些基础知识,以offer64为例叭!

求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

使用逻辑运算符的短路效应~

Python(2或3)的运算的返回值是这样的:
(1)如果多个变量均非0,那么返回最后一个变量的值。如3 and 2 and 'a'的返回值为'a';
(2)如果多个变量中存在0值,且0值前无None,则返回第一个0值。如1 and 'a' and 0 and None的返回值为0。

Python 中的 “1” 和 “True”  “0”和“False”:

1. 两者“数值”相等   2. 但两者的ID不同

【举个栗子】

“is”和“==”的含义不同,“1”和“True”虽然数值相同,但是id不同。

“is” 比较的是 ID :is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。

“==” 比较的是 数值大小 :==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等。

1.包含一个逻辑运算符

首先从基本的概念着手,python中哪些对象会被当成 False 呢?而哪些又是 True 呢?

在Python中,None、任何数值类型中的0、空字符串“”、空元组()、空列表[]、空字典{}都被当作False,还有自定义类型,如果实现了  __ nonzero __ () 或 __ len __ () 方法且方法返回 0 或False,则其实例也被当作False,其他对象均为True。

下面是最简单的逻辑运算: 这里 1,2 都是Ture; 0,"’都是False

1 and 2 ==> 2 1or 2 ==> 1

1 and 0 ==> 0 1 or 0 ==> 1

0 and 1 ==> 0 0 or 1 ==> 1

0 and ""==> 0 0 or "" ==> ""

总结: 前提一个运算符的情况

or 从左到右,返回第一个为真的值,都为假返回后一个值

and 从左到右,若所有值均为真,则返回后一个值,有一个假的值,则返回第一个假的值

2.包含两个及以上的逻辑运算符

逻辑运算符 and / or 一旦不止一个,其运算规则的核心思想就是短路逻辑。

好的,那我们就来了解一下短路思想:

表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 or),直接输出 or 左侧表达式 。

表达式从左至右运算,若 and 的左侧逻辑值为 False ,则短路其后所有 and 表达式,直到有 or 出现,输出 and 左侧表达式到 or 的左侧,参与接下来的逻辑运算。

若 or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑。

3.三元运算操作符 bool ? a : b ,若 bool 为真则 a ,否则为 b 。

转化为 python 语言为:

bool and a or b

如何理解呢? 首先 a , b 都为真,这是默认的。如果 bool 为真, 则 bool and a 为真,输出 a ,短路 b 。如果 bool 为假,短路 a,直接 bool or b ,输出 b 。

换一种更简单的写法:

return a if bool else b

【举个复杂的栗子】

and 与 or 语句同时存在的情况:

def a():
print ("A")
return[]
def b():
print ("B")
return[]
def c():
print ("C")
return 1 def d():
print ("D")
return[] def e():
print ("E")
return 1 def f():
print ("F")
return 1 def g():
print ("G")
return[] def h():
print ("H")
return 1 if a() and b() and c() and d() or e() and f() or g() and h():
print ("ok")

分析一下,从左至右,首先a() 的逻辑值为 False,其后到 or 语句为止有三个 and 语句: a() and b() and c() and d(),均被短路。只输出 a(), 得到 a() or e() 为True,输出 e() ,得 e() and F() 为 True ,输出 f(), 其后接 or 语句,则短路其后所有。最终只打印了A E F ok 。

Debug --> python中的True False 0 1的更多相关文章

  1. python中,a=10.0 b=10.0 a is b 为什么输出是false

    >>>a=10.0>>>b=10.0>>>a is bFalse为什么当a=10,b=10时,a is b输出的是True呢? >>& ...

  2. Python中Bool为False的情况

    在python中,以下数值会被认为是False: 为0的数字,包括0,0.0空字符串,包括'', ""表示空值的None空集合,包括(),[],{}其他的值都认为是True. No ...

  3. 为什么 Python 中的 True 等于 1

    开始的时候,需要用以下函数来做一个判断,根据返回的值来做一些后续判断处理: def is_success(param): if not param: return False return True ...

  4. Python的逻辑控制true/false和循环

    逻辑判断 简单的几个尝试,看下和java的一点不同之处 1 > 2 # False 1 < 2 <3 # True 42 != '42' # True 'Name' == 'name ...

  5. python中的True和False

    返回真假时,需要为: return True return False

  6. js中的true,false盲点

    上一篇博客提到了一个js的小问题,我当时的解释不太清晰,后面请教胡大大才弄明白js中的处理. js里面检查true和false的过程是这样的: 所以'0'在逻辑判断里面,是被当做true. if('0 ...

  7. 在Python中,令values=[0,1,2];values[1]=values,为何结果是[0,[...],2]?

    转载自:http://www.zhihu.com/question/21000872/answer/16856382>>> values = [0, 1, 2] >>&g ...

  8. 你所不知道的 JS: null , undefined, NaN, true==1=="1",false==0=="",null== undefined

    1 1 1 === 全相等(全部相等) ==  值相等(部分相等) demo: var x=0; undefined var y=false; undefined if(x===y){ console ...

  9. python中的这些坑,早看早避免。

    python中的这些坑,早看早避免. 说一说python中遇到的坑,躲坑看这一篇就够了 传递参数时候不要使用列表 def foo(num,age=[]): age.append(num) print( ...

  10. python中的and和or用法

    在python中and和or返回的值并不是True和false这么简单.虽然他们看上去和c++中的&&和||有些相似.在了解and和or之前,我们先要了解python中的True和Fa ...

随机推荐

  1. 国产电源芯片DP4054 软硬件兼容TP4054 规格书资料

    DP4054 是一款完整的采用恒定电流/恒定电压单 节锂离子电池充电管理芯片.其SOT小封装和较少的外部元件数目使其成为便携式应用的理想器件,DP4054 可以适合USB 电源和适配器电源工作.跟进口 ...

  2. C#判断窗体是否打开,并获取聚焦、未打开则新建一个子窗体

    在桌面程序开发会遇到的情况,托盘功能或者是小功能弹窗问题: 现有一个主窗体有子窗体 子窗体每个都可以新建其他窗体问题:新建子窗体时怎么判断子窗体是否打开?若子窗体打开则置顶获取焦点.若未打开则新建一个 ...

  3. java okio 找不到的问题

    问题描述: okio 找不到的问题 解决办法: 下载 jar_files.zip 在idea-File-Project Structure- Project Settings - Libraries ...

  4. 监听 view 初始化时

    new ViewTreeObserverRegister().observe(getContentView(), new ViewTreeObserver.OnGlobalLayoutListener ...

  5. J V M(三)沙箱安全机制

    沙箱安全机制 Java安全模型的核心就是Java沙箱(sandbox)什么是沙箱? 沙箱是一个限制程序运行的环境.沙箱机制就是将Java代码限定在虚拟机(JVM)特定的运行范围中,并且严格限制代码对本 ...

  6. OpenCv:边缘处理&Canny边缘检测

    卷积边缘: 一.在进行卷积的时候,对于原图像(1,1)的位置,左.上方没有足够的像素做卷积. 二.通常,在卷积之前,在原图增加边缘像素,比如(3*3的,增加一个像素) 三.增加像素值得处理方法,通常有 ...

  7. debian / deepin (Ubuntu)安装 mariadb

    debian / deepin 安装 mariadb 安装步骤: LINUX安装mariadb本质和mysql一致,可以参考官网教程进行安装.https://mariadb.org/download/ ...

  8. 【基础】为何odd negative scaling会导致Unity动态合批失败?

    https://blog.csdn.net/weixin_41885426/article/details/109817466

  9. golang常见编程错误集

    一.append是深拷贝, func main() { a := []int{7, 8, 9} fmt.Printf("%+v\n", a) ap(a) fmt.Println(& ...

  10. 【1】java之类与对象

    一.前言 面向对象就是一种组件化的设计思想. 面向对象特性 封装性:保护内部的定义结构安全性: 继承性:在已有的程序结构上继续扩充新的功能: 多态性:在某一个概念范围内的满足. 二.类与对象的定义和使 ...