day06-python可变与可变、条件、in、is、流程控制if

今日测验

1、简单描述定义一个变量x=10,在内存中的栈区域堆区的存放情况
       栈区:存放是变量名与内存地址的对应关系,所以可以简单理解为:变量名存内存地址
       堆区:存放的是变量值

       强调:只站在变量的名的角度去谈一件事情
           变量名的赋值(x=y),还有变量名的传参(print(x)),传递的都是栈区的数据
           ,而且栈的数据是变量名与内存地址的对应关系,或者说是对值的引用

           python是引用传递

           示例1:
               x=10
               y=20
               x=y
           示例2:
               l=[111,222,333]
               l1=[22222222,333333333,4444444]

               l2=l

   2、简述什么是直接引用、什么是间接引用
   3、简单描述python解释器垃圾回收机的引用计数、标记清除、分代回收
   4、写一段程序
   	接收用户输入的用户名、年龄、性别,然后选取最优格式化字符串的方式,按照如下
   	格式输出

   	我的名字是:xxx
   	我的年龄是:xxx
   	我的性别是:xxx


   	格式化输出
   	    %
   	    str.format()
   	    f''

  	5、算数运算符相关
  	    /
  	    //
  		用示例演示
  			取模运算
  			增量赋值
  			    age += 1 # age = age + 1
  			交叉赋值
  			    x,y=y,x
  			链式赋值
  			    x=y=z=10
  			解压赋值
  			    x,y,*_,z=[10,20,30,40,50]
  			    _,_,*m,_=[10,20,30,40,50]

昨日知识补充

l = [111, 222, 333]
l2 = l  # 把l的内存地址给l2


l[0] = 'balabla'
print(l)

print(l2)

l2[1] = 4444444444444
print(l2)
print(l)

del l2

格式化输出
print('my name is %s age is %s' % ('egon', 18))
print('成功的概率 %s%% ' % (97,))

"""
name:{}
age:{}
sex:{}
""".format('egon', 18, 'male')

"""
name:{x}
age:{y}
sex:{z}
""".format(z='male', x='egon', y=18)

format新增(了解)print('{x}=============='.format(x='开始执行'))  # 开始执行******
print('{x:=<10}'.format(x='开始执行'))  # 开始执行******
print('{x:=>10}'.format(x='开始执行'))  # 开始执行******
print('{x:=^10}'.format(x='开始执行'))  # 开始执行******

四舍五入
# 精确到小数点后3位,四舍五入,结果为:1232132.124
print('{salary:.3f}'.format(salary=1232132.12351))


x = 'egon'
y = 18
res = f'name:{x} age {y}'
print(res)


x = 'egon'
y = 18
res = f'name:{{{x}}} age {y}'
print(res)

了解f的新用法:{}内的字符串可以被当做表达式运行
res = f'{10+3}'
print(res)

f'{print("aaaa")}'

今日内容

1:可变不可变类型

2、什么是条件?什么可以当做条件?为何要要用条件?
    显式布尔值:True、False
    隐式布尔值:所有数据类型,其中0、None、空为假

3:逻辑运算符:用来
    # not、 and 、 or
    # 区分优先级:not > and > or

4、成员运算符

5、身份运算符

6、流程控制之if判断

今日内容详解

可变不可变类型

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

验证

int是不可变类型

x = 10
print(id(x))
x = 11  # 产生新值
print(id(x))
结果是变量的id被改变了

float是不可变类型

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

str是不可变类型

x = “abc”
print(id(x))
x = ‘gggg’
print(id(x))

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

list是可变类型

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

dict

dic = {'k1': 111, 'k2': 222}
print(id(dic))
dic['k1'] = 3333333333
# print(dic)
print(id(dic))

bool不可变

关于字典补充:

定义:{}内用逗号分隔开多key: value,
其中value可以是任意类型
但是key必须是不可变类型

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}

条件

什么是条件?什么可以当做条件?为何要要用条件?

第一大类:显式布尔值

条件可以是:比较运算符
age = 18
print(age > 16)  # 条件判断之后会得到一个布尔值

条件可以是:True、False
is_beautiful = True
print(is_beautiful)

第二大类:隐式布尔值,所有的值都可以当成条件去用

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

逻辑运算符

not、and、or的基本使用

not:就是把紧跟其后的那个条件结果取反
ps: not与紧跟其后的那个条件是一个不可分割的整体
print(not 16 > 13)
print(not True)
print(not False)
print(not 10)
print(not 0)
print(not None)
print(not '')

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)  # 偷懒原则

or:逻辑或,or用来链接左右两个条件,两个条件但凡有一个为True,最终结果就为True,
两个条件都为False的情况下,最终结果才为False
print(3 > 2 or 0)
print(3 > 4 or False or 3 != 2 or 3 > 2 or True)  # 偷懒原则

优先级not > and > or

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

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

#       False                 False              False
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)

成员运算符和逻辑运算符

成员运算符

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")  # 逻辑同上,但语义不明确,不推荐

身份运算符

is  # 判断的是id是否相等

流程控制之if判断

print(1)
print(2)
print(3)
if 条件:
    代码1
    代码2
    代码3
print(4)
print(5)
'''
语法1:
if 条件:
    代码1
    代码2
    代码3

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

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

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


'''
语法2:
if 条件:
    代码1
    代码2
    代码3
else:
    代码1
    代码2
    代码3
'''

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

if age > 16 and age < 20 and is_beautiful and star == '水平座':
    print('我喜欢,我们在一起吧。。。')
else:
    print('阿姨好,我逗你玩呢,深藏功与名')

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


'''
语法3:
if 条件1:
    代码1
    代码2
    代码3
elif 条件2:
    代码1
    代码2
    代码3
elif 条件2:
    代码1
    代码2
    代码3
'''
score = 73
if score >= 90:
    print('优秀')
elif score >= 80 and score < 90:
    print('良好')
elif score >= 70 and score < 80:
    print('普通')

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

if score >= 90:
    print('优秀')
elif score >= 80:
    print('良好')
elif score >= 70:
    print('普通')


'''
语法3:
if 条件1:
    代码1
    代码2
    代码3
elif 条件2:
    代码1
    代码2
    代码3
elif 条件2:
    代码1
    代码2
    代码3
...
else:
    代码1
    代码2
    代码3
'''
score = input('请输入您的成绩:')  # score="18"
score = int(score)

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

print('=====>')


'''
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('其他代码.............')
原文地址:https://www.cnblogs.com/zdw20191029/p/14553367.html