day05 可变类型、逻辑运算与if判断

1、可变不可变类型

可变类型:值改变,id不变,证明改的是原值,证明原值是可以被改变的

不可变类型:值改变,id也变了,证明是产生新的值,压根没有改变原值,证明原值是不可以被修改的

1.1、验证

1.1.1 int是不可变类型

x=10
print(id(x))
x=11 # 产生新值
print(id(x))

1.1.2 float是不可变类型

x=3.1
print(id(x))
x=3.2
print(id(x))

1.1.3 str是不可变类型

x="abc"
print(id(x))
x='gggg'
print(id(x))

小结:int、float、str都被设计成了不可分割的整体,不能够被改变

1.1.4 list是可变类型

l=['aaa','bbb','ccc']
print(id(l))
l[0]='AAA'
print(l)
print(id(l))

1.1.5 dict是可变类型

x={'k1':111, 'k2':222}
print(id(x)) # 3199870035008
x['k1']=333
print(id(x)) # 3199870035008
'''
关于字典补充:
定义:{}内用逗号分隔多key:value,
  其中value可以是任意类型
  但是key必须是不可变类型
'''

1.1.6 布尔类型是不可变类型

dic={
    'k1':111,
    'k2':3.1,
    'k3':[333,],
    'k4':{'name':'egon'}
}
dic={
    2222:111,
    3.3:3.1,
    'k3':[333,],
    'k4':{'name':'egon'}
}
print(dic[3.3])
dic={[1,2,3]:33333333}
dic={{'a':1}:33333333}

2、条件

2.1、什么是条件?

​ 条件就是为了达成某种状况而所要具备的机制

2.2、什么可以当做条件?

2.2.1、第一大类:显式布尔值

比较运算符
age = 18
print(age > 16)  # 条件判断之后会得到一个布尔值True
布尔类型
is_beautiful=True
print(is_beautiful)

2.2.2、第二大类:隐式布尔值

​ 所有的值都可以当成条件去用

​ 其中0、None、空(空字符串、空列表、空字典)=》代表的布尔值为False,其余都为真

print(bool(0)) # False
print(bool(None)) # False
print(bool('')) # False
print(bool([])) # False
print(bool({})) # False

2.3、为何要要用条件?

​ 为了能够让计算机具备人的这种判断事物是否能够成立的机制

3、逻辑运算符

3.1、not、and、or的基本使用

3.1.1、 not

​ not:就是把紧跟其后的那个条件结果取反
​ ps:not与紧跟其后的那个条件是一个不可分割的整体

print(not 16 > 13)
print(not True)
print(not False)
print(not 10)
print(not 0)
print(not None)
print(not '')

3.1.2、and

​ and:逻辑与,and用来链接左右两个条件,两个条件同时为True,最终结果才为真

print(True and 10 > 3)

print(True and 10 > 3 and 10 and 0) # 条件全为真,最终结果才为True
print( 10 > 3 and 10 and 0 and 1 > 3 and 4 == 4 and 3 != 3)  # 偷懒原则

3.1.3、or

​ or:逻辑或,or用来链接左右两个条件,两个条件但凡有一个为True,最终结果就为True,两个条件都为False的情况下,最终结果才为False

print(3 > 2 or 0)
print(3 > 4 or False or 3 != 2 or 3 > 2 or True) # 偷懒原则

3.2、优先级not>and>or

如果单独就只是一串and链接,或者说单独就只是一串or链接,按照从左到右的顺讯依次运算即可(偷懒原则)
如果是混用,则需要考虑优先级了

res=3>4 and not 4>3 or 1==3 and 'x' == 'x' or 3 >3
 #  False              False              False
print(res)    

res=(3>4 and (not 4>3)) or (1==3 and 'x' == 'x') or 3 >3
print(res)

res=3>4 and ((not 4>3) or 1==3) and ('x' == 'x' or 3 >3)
print(res)

4、成员运算与身份运算

​ 成员运算符:in/not in

​ 身份运算符:is 判断的是id是否相等

print("egon" in "hello egon") 
print("e" in "hello egon") # 判断一个字符串是否存在于一个大字符串中

print(111 in [111,222,33]) # 判断元素是否存在于列表

#判断key是否存在于字典
print(111 in {"k1":111,'k2':222})
print("k1" in {"k1":111,'k2':222})

not in
print("egon" not in "hello egon") # 推荐使用
print(not "egon" in "hello egon") # 逻辑同上,但语义不明确,不推荐

5、分支结构

5.1、什么是分支结构

​ 分支结构就是根据条件判断的真假去执行不同分支对应的子代码

5.2、为什么要用分支结构

​ 人类某些时候需要根据条件来决定做什么事情,比如:如果今天下雨,就带伞

5.3、如何使用分支结构

  • 5.3.1、if 语法

  • if 条件1:
        代码1
        代码2
        代码3
    elif 条件2:
        代码1
        代码2
        代码3
    ...
    else:
        代码1
        代码2
        代码3
    
  • 注意:

  • ​ 1、python用相同缩进(4个空格表示一个缩进)来标识一组代码块,同一组代码会自上而下依次运行

  • ​ 2、条件可以是任意表达式,但执行结果必须为布尔类型

  • ​ 在if判断中所有的数据类型也都会自动转换成布尔类型

  • ​ 2.1、None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False

  • ​ 2.2、其余均为True

  • 5.3.2、if 应用案例

  • 案例1:

age = 60
is_beautiful = True
star = '水平座'

if age > 16 and age < 20 and is_beautiful and star == '水平座':
    print('我喜欢,我们在一起吧。。。')

print('其他代码.............')

​ 案例2:

score = input('请输入您的成绩:') # score="18"
score=int(score)

if score >= 90:
    print('优秀')
elif score >= 80:
    print('良好')
elif score >= 70:
    print('普通')
else:
     print('很差,小垃圾')

案例3 : if嵌套if

age = 17
is_beautiful = True
star = '水平座'

if 16 < age < 20 and is_beautiful and star == '水平座':
    print('开始表白。。。。。')
    is_successful = True
    if is_successful:
        print('两个从此过上没羞没臊的生活。。。')
else:
    print('阿姨好,我逗你玩呢,深藏功与名')

print('其他代码.............')

猜你喜欢

转载自www.cnblogs.com/Henry121/p/12431021.html