美文网首页
5章 布尔表达式

5章 布尔表达式

作者: 码上版码 | 来源:发表于2020-09-08 21:27 被阅读0次

本章大纲

布尔类型

布尔表达式

布尔操作符

布尔类型

布尔类型:只有2中结果:真 假

boolData = True  # True/False在布尔表达式中是必须大写
'''
使用场景:
    浏览器中的选项,比如:选A,显示A内容;选B,显示B内容
    搜索输入框内容是否可见,可操作
'''
# 搜索输入框内容是否可见,示例:
from selenium import webdriver
# 根据驱动的实际路径填写
executable_path = r"E:\selenium\cheomedriver.exe"
# 初始化,运行Chrome driver
driver = webdriver.Chrome(executable_path)
# 打开网址
driver.get('https://www.baidu.com')
# 定位搜索框
el = driver.find_element_by_id('kw')
# 判断搜索框是否可见,并打印结果:True
print(el.is_displayed())  # is_displayed()判断搜索框可见

布尔表达式

布尔表达式

​ 1、关系运算符:

​ 数值比较

​ 字符串比较

​ in 和 not in

​ 2、关系运算符的结果是bool

# 关系运算符:>  <  ==  >=   <=  !=
# = 赋值, == 关系等于
# 关系运算符:数值比较
print(3 >= 1)
print(3 != 1)
# is 是不是同一个对象--python解释器中操作下面数据
>>> a = 100
>>> b = 100
>>> a == b
True
>>> a is b
True

>>> a = 256
>>> b = 256
>>> a == b
True
>>> a is b
True
>>> id(a)
4305291616
>>> id(b)
4305291616

>>> a = 257
>>> b = 257
>>> a is b
False
>>> id(a)
4373499792
>>> id(b)
4375680208
"""
a is b
结果True,原因:a和b的对象在256内,所以a = 100 的时候已经创建了一个100,当b = 100时解释器会自动识别内存地址中的100,a和b共用一个对象(内存地址),不再生产新的内存地址,节省内存空间
a和b的对象大于256,b就会创建新的内存地址
这是python本身的存储机制
"""

# 关系运算符:字符串比较--比较的是a b的ASCII值的大小
print('abc' > 'bc')  print('abc' > 'bc')  # 比较abc中的a与bc中的b的ASCII值的大小,a=97,b=98,所以为False,如果abc与bc中一个值相等就比第二个值,依此类推
注:ASCII:A=65 B=66 C=67,a=97 b=98 c=99

# 关系运算符:in 和 not in
# 1- in 在字符串:前者是后者的一个元素;前者是后者的连续一段
str1 = 'abcdefg'
print('acd' in str1)  # 必须连续一段
print('abc' in str1)
print('a' in str1)
# 2- in 数据存储使用--前者是后者的一个元素
alist = [10, 20, 40, 20]
print(20 in alist)
print(alist[0:3] in alist)  # 前者不能是后者的连续一段元素,只能是一个元素,所以切片不行

在线工具:https://tool.oschina.net/commons?type=4

ASCII对照表

ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符
0 NUT 32 (space) 64 @ 96
1 SOH 33 ! 65 A 97 a
2 STX 34 " 66 B 98 b
3 ETX 35 # 67 C 99 c
4 EOT 36 $ 68 D 100 d
5 ENQ 37 % 69 E 101 e
6 ACK 38 & 70 F 102 f
7 BEL 39 , 71 G 103 g
8 BS 40 ( 72 H 104 h
9 HT 41 ) 73 I 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 K 107 k
12 FF 44 , 76 L 108 l
13 CR 45 - 77 M 109 m
14 SO 46 . 78 N 110 n
15 SI 47 / 79 O 111 o
16 DLE 48 0 80 P 112 p
17 DCI 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 S 115 s
20 DC4 52 4 84 T 116 t
21 NAK 53 5 85 U 117 u
22 SYN 54 6 86 V 118 v
23 TB 55 7 87 W 119 w
24 CAN 56 8 88 X 120 x
25 EM 57 9 89 Y 121 y
26 SUB 58 : 90 Z 122 z
27 ESC 59 ; 91 [ 123 {
28 FS 60 < 92 / 124 |
29 GS 61 = 93 ] 125 }
30 RS 62 > 94 ^ 126 `
31 US 63 ? 95 _ 127 DEL

布尔操作符

条件组合

逻辑条件

且(and):

​ 要求工作3年且统招本科,同时满足两同个条件才为真

逻辑 且 - and
    条件1 and 条件2
        1- 全真为真,一假为假
        2- 如果条件1为真,条件2一定会运行
        3- 如果条件1为假,条件2一定不会运行
或 or

要求本科或有python自动化经验,满足1个条件就为真

逻辑 或 - or
    条件1 or 条件2
        1- 一真为真,全假为假
        2- 如果条件1为真,条件2一定不会运行
        3- 如果条件1为假,条件2一定会运行
不/非 not
逻辑 不/非 - not
    将真变为假,将假变为真
混合运算
优先级---适当的打上括号--方便理解逻辑--维护代码比较好理解
代码加注释
算数运算符(+ - * /.....) > 关系运算符(> < ==.....) > 逻辑运算符(逻辑运算符优先级:not > and > or)

练习-代码(python解释器执行)

>>> 2 > 1 and 3 > 2 
True
>>> 2 > 1 and 3 > 4
False
>>> 3 > 4 and 2 > 1
False
>>> 2 > 1 or 3 > 2
True
>>> 2 > 1 or 3 > 4
True
>>> (2 > 1 or 3 > 4) and 5 > 4
True
>>> not 3 > 2
False
>>> not 1 > 2 or 4 > 3
True
>>> not (1 > 2 or 4 > 3)
False
>>> 1 > 2 or not 4 > 3
False
>>> 1 > 2 and not 4 > 3
False

面试官:

​ 描述下:python的赋值,深拷贝和浅拷贝的区别?

# 不可变对象,赋值、深拷贝和浅拷贝可种方法都行
# 可变对象,根据情况使用 深拷贝或浅拷贝
"""
项目场景:
一个接口api_A,获取到数据- sData---[[],100]有区别
需要:
    1- 接口a 调用数据源 sData
    2- 接口b 调用数据源 sData
期望效果:接口a使用完数据源,不会改变数据
总结:
    1- 如果数据源只有一层列表,深拷贝/浅拷贝都可
    2- 如果数据源多层列表,使用深拷贝
    3- 赋值--指向同一个对象-相互没有关联
使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错误。
"""
# 方案1 --赋值--指向同一个对象,会改变数据
alist = [10, 30, [100, 200]]
blist = alist
# 接口a操作
blist.append(30)
print('blist-->:', blist, 'id-->:', id(blist))
print('alist-->:', alist, 'id-->:', id(alist))

# 方案2 --浅拷贝:只是增加了一个指针指向已存在的内存地址--拷贝父对象,不会拷贝对象的内部的子对象。
import copy
alist = [10, 30, [100, 200]]
blist = copy.copy(alist)  #对象拷贝,浅拷贝
# 接口a操作
blist.append(50)  #修改对象blist
blist[2].append(50)  #修改对象blist中的['100', '200']数组对象
print('blist-->:', blist, 'id-->:', id(blist))
print('alist-->:', alist, 'id-->:', id(alist))

# 方案3 --深拷贝:是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存
# copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
import copy
alist = [10, 30, [100, 200]]  #原始对象
blist = copy.deepcopy(alist)  #对象拷贝,深拷贝
# 接口a操作
blist[2].append('3')   #修改对象blist中的['100', '200']数组对象
print('blist-->:', blist, 'id-->:', id(blist))
print('alist-->:', alist, 'id-->:', id(alist))

参考文档:https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html

相关文章

  • 5章 布尔表达式

    本章大纲 布尔类型 布尔表达式 布尔操作符 布尔类型 布尔类型:只有2中结果:真 假 布尔表达式 布尔表达式 ...

  • 运算符

    运算符 逻辑运算符 与语法:布尔值(表达式) && 布尔值(表达式) 或语法:布尔值(表达式) || 布尔值(表达...

  • 改善Java程序建议19

    建议19 : 断言不是鸡肋 基本用法:assert <布尔表达式>assert <布尔表达式> : <错误信息>在...

  • 循环

    while循环 结构: while( 布尔表达式 ) { //循环内容} 只要布尔表达式为 true,循环体会直执...

  • Java--if条件语句-3

    语法结构:if(布尔表达式1){  语句块1;}else if(布尔表达式2){  语句块2;}.......el...

  • java终极菜鸟总结3

    1.java条件运算符: ?: 语法形式:布尔表达式 ? 表达式1 :表达式2 运算过程:如果布尔表达式的值为tr...

  • javaSE回顾_04

    if表达式: if单选结构:去判断一个东西是否可行,然后才去执行。 if(布尔表达式) { //如果布尔表达式为t...

  • 条件运算符(三元运算符)

    条件运算符( ? : )也称为 “三元运算符”。 语法形式:布尔表达式 ? 表达式1 :表达式2运算过程:如果布尔...

  • 使用pyparsing实现布尔表达式计算

    语言及语法定义 布尔表达式包含:逻辑表达式 and or not,关系表达式 >, >=, ==, <=, < 源...

  • More Boolean and Comparison Expr

    前面已经看到许多布尔表达式和比较表达式了,这里做一个简单的汇总 布尔运算(Boolean operations) ...

网友评论

      本文标题:5章 布尔表达式

      本文链接:https://www.haomeiwen.com/subject/bodcektx.html