1:可变、不可变类型
  • 可变类型:值改变,id不变,原值可以被修改

    可变类型包括:list,dict

    l = [111,222,333]
    print(id(l))
    l[0] = 444
    print(l)
    print(id(l)) # l中的第一个内容被修改,但两个结果id是相同的
    

dic = {'k1':111,'k2':222}
print(id(dic))
dic['k1'] = 3333333333
print(dic)
print(id(dic)) # dic中的'k1'被修改,但是两个结果的id是相同的

# 补充
# 定义:{}内用逗号分隔开多key:value,
# 其中value可以是任意类型
# 但是key必须是不可变类型
  • 不可变类型:值改变,id也变了,原值不可被修改

    int、float、str是不可变类型

    x=10
    print(id(x))
    x=11 
    print(id(x))
    
    x=3.1
    print(id(x))
    x=3.2
    print(id(x))
    
    x="abc"
    print(id(x))
    x='gggg'
    print(id(x))
    
    # 三个类型的两个结果值改变了并且两个结果的id也不相同
    结论:int、float、str都被设计成了不可分割的整体,不能够被改变
    

2、什么是条件?什么可以当做条件?为何要要用条件?
  • ​ 显式布尔值:比较运算符、True、False
  • ​ 隐式布尔值:所有数据类型,其中0、None、空为假
3:逻辑运算符:用来
  • not、and、or的基本使用

    # not:把紧跟其后的那个条件结果取反
    print(not 16 > 13)
    print(not True)
    print(not False)
    print(not 10)
    print(not 0)
    print(not None)
    print(not '')
    
    结果:
    False
    False
    True
    False
    True
    True
    True
    False
    
    # and:逻辑与,and用来链接左右两个条件,两个条件同时为True,最终结果才为真
    print(True and 10 > 3)
    print(True and 10 > 3 and 10 and 0)
    print( 10 > 3 and 10 and 0 and 1 > 3 and 4 == 4 and 3 != 3)
    
    结果:
    True
    0
    0
    # 运算中条件全部为真则为真,一个条件为假则为假
    
    
    # or:逻辑或,or用来链接左右两个条件,两个条件但凡有一个为True,最终结果就为True,个条件都为False的情况下,最终结果才为False
    print(3 > 2 or 0)
    print(3 > 4 or False or 3 != 2 or 3 > 2 or True)
    
    结果:
    True
    True
    
  • 区分优先级:not > and > or

    # 如果单独就只是一串and链接,或者说单独就只是一串or链接,按照从左到右的顺讯依次运算即可(偷懒原则)
    # 如果是混用,则需要考虑优先级了
    
    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)
    
    结果:
    False
    False
    
4、成员运算符
  • in:某一个对象包含于另一个对象中

    print("egon" in "hello egon") # 判断一个字符串是否存在于一个大字符串中
    print("e" in "hello egon") # 判断一个字符串是否存在于一个大字符串中
    print(11 in [111,222,33]) # 判断元素是否存在于列表
    
    结果:
    True
    True
    False
    #判断key是否存在于字典
    print(111 in {"k1":111,'k2':222})
    print("k1" in {"k1":111,'k2':222})
    
    结果:
    False
    True
    
    #not in
    print("egon" not in "hello egon") # 推荐使用
    print(not "egon" in "hello egon") # 逻辑同上,但语义不明确,不推荐
    
    结果:
    True
    True
    
5、身份运算符
  • is:判断两个值的id是否相等

    x = 10
    y = 11
    l = [x,5]
    print(x is y)
    print(x is l[0])
    
    结果:
    False
    True
    
6、流程控制之if判断
  • 什么是流程控制

    流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为三种结构:顺序结构(之前我们写的代码都是顺序结构)、分支结构(用到if判断)、循环结构(用到while与for)。

  • 分支结构

    1.什么是分支结构:

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

    2.为什么用分支结构?

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

    所以程序中必须有相应的机制来控制计算机具备人的这种判断能力

  • 如何用分支结构

    1.使用if语句来实现

    if 条件1:   # 如果条件1的结果为True,就依次执行:代码1、代码2,......
       代码1
        代码2
        ......
    elif 条件2: # 如果条件2的结果为True,就依次执行:代码3、代码4,......
       代码3
        代码4
        ......
    elif 条件3: # 如果条件3的结果为True,就依次执行:代码5、代码6,......
       代码5
        代码6
        ......
    else:     # 其它情况,就依次执行:代码7、代码8,......
        代码7
        代码8
        ......
    # 注意:
    # 1、python用相同缩进(4个空格表示一个缩进)来标识一组代码块,同一组代码会自上而下依次运行
    # 2、条件可以是任意表达式,但执行结果必须为布尔类型
         # 在if判断中所有的数据类型也都会自动转换成布尔类型
           # 2.1、None,0,空(空字符串,空列表,空字典等)三种情况下转换成的布尔值为False
           # 2.2、其余均为True
    

    2.if应用

    # 如果我大于22岁我就可以结婚
    age = 25
    if age > 22:
        print("我可以结婚了")
    # 如果:成绩>=90,那么:优秀
    
    # 如果成绩>=80且<90,那么:良好
    
    # 如果成绩>=70且<80,那么:普通
    
    # 其他情况:很差
    
    score=input('>>: ')
    score=int(score)
    
    if score >= 90:
        print('优秀')
    elif score >= 80:
        print('良好')
    elif score >= 70:
        print('普通')
    else:
        print('很差')   
    
    # if嵌套
    # 如果我大于22岁我就可以结婚,如果结婚了,那我很幸福,没结婚我就不幸福
    age = 25
    is_marry = True
    if age > 22:
        if is_marry:
        	print("我很幸福")
        else:
            print("我不幸福")