• day05-python垃圾回收、格式化输入输出、基本运算符、流程控制


    每日测验

    1、什么是变量?为何要有变量?
    2、变量的三大组成部分是?每部分的作用是什么?
            先定义后引用
                xxx=10
                print(xxx)
    3、变量名的命名原则、规范、风格
            name="egon"
    
            age_of_egon=18
            AgeOfEgon=18
    
    4、变量值的三个特征是什么?
            id(18):id是值在内存中的身份证号
            type(18)
            18
    5、is与==的区别
            is:判断的是id,id是变量值的身份,所以is称之为身份运算符
            ==:判断的是值
    
    6、id相同值是否可以相同?
               id相同值一定相同
    7、id不同值是否可以相同?
               id不同值可以相同
    
                value1 == value2
                value1 is value2
    8、用变量的定义说明int、float、str、list、dict、bool类型用于记录何种状态,每种类型
            至少写出三个示例,如下所示
                # int型
                age = 10
                level = 3
                year = 1990
    
    
    list与dict:
                相同点:都能存多个值,称之为容器类型
                不同点:
                    list是用索引对应值,索引反映的是位置/顺序
                    dict是用key对应值,其中key通常为字符串类型,而str类型具有描述性功能
                         所以key对值可以有描述性功能
    
                    msg="egon 10"
                    l=['egon',10]
                    info={'name':'egon','age':10}
                    info['name']
    
                    info={0:'egon',1:10}
    

    上节课复习

    就是上面的测验

    今日内容

    垃圾回收机制详解(了解)

    引用计数

     x = 10  # 直接引用
     print(id(x))
     y = x
     z = x
    
     l = ['a', 'b', x]  # 间接引用
     print(id(l[2]))  #
    
     d = {'mmm': x}  # 间接引用
    
     print(id(d['mmm']))
    
    
     x=10
     l=['a','b',x] # l=['a'的内存地址,'b'的内存地址,10的内存地址]
    
     x=123
     print(l[2])
    
    
     x=10
     x=[10,]
    
     l=['a','b',10]
    
    

    标记清除

    用来解决循环引用带来的内存泄露问题

    循环引用=>导致内存泄露
    l1=[111,]
    l2=[222,]
    
    l1.append(l2) # l1=[值111的内存地址,l2列表的内存地址]
    l2.append(l1) # l2=[值222的内存地址,l1列表的内存地址]
    
     print(id(l1[1]))
     print(id(l2))
    
     print(id(l2[1]))
     print(id(l1))
    
     print(l2)
     print(l1[1])
    
    del l1
    del l2
    

    分代回收

    用来降低引用计数的扫描频率,提升垃圾回收的效率
    

    与用户交互

    接收用户的输入

    在Python3:input会将用户输入的所有内容都存成字符串类型
    username = input("请输入您的账号:")  # "egon"
    print(username, type(username))
    
    age = input("请输入的你的年龄: ")  # age="18"
    print(age, type(age))
    age=int(age) # int只能将纯数字的字符串转成整型
    print(age > 16)
    
    int("12345")
    int("1234.5")
    int("1234abc5")
    

    在python2中:

    raw_input():用法与python3的input一模一样
    input(): 要求用户必须输入一个明确的数据类型,输入的是什么类型,就存成什么类型
    >>> age=input(">>>>>>>>>>>>>>>>>>>>>: ")
    >>>>>>>>>>>>>>>>>>>>>: 18
    >>> age,type(age)
    (18, <type 'int'>)
    >>>
    >>> x=input(">>>>>>>>>>>>>>>>>>>>>: ")
    >>>>>>>>>>>>>>>>>>>>>: 1.3
    >>> x,type(x)
    (1.3, <type 'float'>)
    >>>
    >>> x=input(">>>>>>>>>>>>>>>>>>>>>: ")
    >>>>>>>>>>>>>>>>>>>>>: [1,2,3]
    >>> x,type(x)
    ([1, 2, 3], <type 'list'>)
    

    字符串的格式化输出

    值按照位置与%s一一对应,少一个不行,多一个也不行
    res="my name is %s my age is %s" %('egon',"18")
    res="my name is %s my age is %s" %("18",'egon')
    res="my name is %s" %"egon"
    print(res)
    
    以字典的形式传值,打破位置的限制
    res="我的名字是 %(name)s 我的年龄是 %(age)s" %{"age":"18","name":'egon'}
    print(res)
    
    %s可以接收任意类型
    print('my age is %s' %18)
    print('my age is %s' %[1,23])
    print('my age is %s' %{'a':333})
    print('my age is %d' %18) # %d只能接收int
    print('my age is %d' %"18")
    
    str.format:兼容性好
    按照位置传值
    res='我的名字是 {} 我的年龄是 {}'.format('egon',18)
    print(res)
    
    res='我的名字是 {0}{0}{0} 我的年龄是 {1}{1}'.format('egon',18)
    print(res)
    
    打破位置的限制,按照key=value传值
    res="我的名字是 {name} 我的年龄是 {age}".format(age=18,name='egon')
    print(res)
    

    填充与格式化

    # 先取到值,然后在冒号后设定填充格式:[填充字符][对齐方式][宽度]
    # *<10:左对齐,总共10个字符,不够的用*号填充
    print('{0:*<10}'.format('开始执行')) # 开始执行******
    
    # *>10:右对齐,总共10个字符,不够的用*号填充
    print('{0:*>10}'.format('开始执行')) # ******开始执行
    
    # *^10:居中显示,总共10个字符,不够的用*号填充
    print('{0:*^10}'.format('开始执行')) # ***开始执行***
    2.5 精度与进制
    
    print('{salary:.3f}'.format(salary=1232132.12351))  #精确到小数点后3位,四舍五入,结果为:1232132.124
    print('{0:b}'.format(123))  # 转成二进制,结果为:1111011
    print('{0:o}'.format(9))  # 转成八进制,结果为:11
    print('{0:x}'.format(15))  # 转成十六进制,结果为:f
    print('{0:,}'.format(99812939393931))  # 千分位格式化,结果为:99,812,939,393,931
    
    
    # 2.3 f:python3.5以后才推出
    x = input('your name: ')
    y = input('your age: ')
    res = f'我的名字是{x} 我的年龄是{y}'
    print(res)
    
    

    基本运算符

    算数运算符

    print(10 + 3.1)
    print(10 + 3)
    print(10 / 3)  # 结果带小数
    print(10 // 3)  # 只保留整数部分
    print(10 % 3) # 取模、取余数
    print(10 ** 3) # 取模、取余数
    

    比较运算符: >、>=、<、<=、==、!=

    print(10 > 3)
    print(10 == 10)
    
    print(10 >= 10)
    print(10 >= 3)
    
    name=input('your name: ')
    print(name == 'egon')
    

    赋值运算符

    =:变量的赋值
    age = 18
    
    增量赋值:
    # age += 1  # age=age + 1
    # print(age)
    
    age*=3
    age/=3
    age%=3
    age**=3 # age=age**3
    
    链式赋值
    x=10
    y=x
    z=y
    z = y = x = 10 # 链式赋值
    print(x, y, z)
    print(id(x), id(y), id(z))
    
    交叉赋值
    m=10
    n=20
    print(m,n)
    交换值
    temp=m
    m=n
    n=temp
    print(m,n)
    
    m,n=n,m # 交叉赋值
    print(m,n)
    
    解压赋值
    salaries=[111,222,333,444,555]
    把五个月的工资取出来分别赋值给不同的变量名
    mon0=salaries[0]
    mon1=salaries[1]
    mon2=salaries[2]
    mon3=salaries[3]
    mon4=salaries[4]
    
    解压赋值
    mon0,mon1,mon2,mon3,mon4=salaries
    print(mon0)
    print(mon1)
    print(mon2)
    print(mon3)
    print(mon4)
    
    mon0,mon1,mon2,mon3=salaries # 对应的变量名少一个不行
    mon0,mon1,mon2,mon3,mon4,mon5=salaries # 对应的变量名多一个也不行
    

    引入*,可以帮助我们取两头的值,无法取中间的值

    取前三个值
    x,y,z,*_=salaries=[111,222,333,444,555] # *会将没有对应关系的值存成列表然后赋值给紧跟其后的那个变量名,此处为_
    print(x,y,z)
    print(_)
    
    取后三个值
    *_,x,y,z=salaries=[111,222,333,444,555]
    print(x,y,z)
    
    x,*_,y,z=salaries=[111,222,333,444,555]
    print(x,y,z)
    
    salaries=[111,222,333,444,555]
    _,*middle,_=salaries
    print(middle)
    
    解压字典默认解压出来的是字典的key
    x,y,z=dic={'a':1,'b':2,'c':3}
    print(x,y,z)
    

    流程控制之if判断

    if 条件:
        代码块
    elif 条件:
       代码块
         。。。
    else:
         代码块
    

    作业

    作业:
    0、分别画出下面两个列表在内存中是如何存放的
    l1=[11,22,[333,444]]
    l2=[11,22,[33,{'name':'egon','age':18}]]
    
    1、
    用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式
    ------------ info of Egon -----------
    Name  : Egon
    Age   : 22
    Sex   : male
    Job   : Teacher
    ------------- end -----------------
    
    2、
    用户输入账号密码,程序分别单独判断账号与密码是否正确,正确输出True,错误输出False即可
    
    3、让计算机提前记下egon的年龄为18岁,写一个才年龄的程序,要求用户输入所猜的年龄
    ,然后程序拿到用户输入的年龄与egon的年龄比较,输出比较结果即可
    
    4、程序从数据库中取出来10000条数据,打算显示到页面中,
    但一个页面最多显示30条数据,请选取合适的算数运算符,计算
       显示满30条数据的页面总共有多少个?
       最后一页显示几条数据?
    
    5、egon今年为18岁,请用增量赋值计算3年后egon老师的年龄
    
    6、将值10一次性赋值给变量名x、y、z
    
    7、请将下面的值关联到它应该对应的变量名上,你懂的
    dsb = "egon"
    superman = "alex"
    
    8、我们只需要将列表中的傻逼解压出来,一次性赋值给对应的变量名即可
    names=['alex_sb','wusir_sb','oldboy_sb','egon_nb','lxx_nb','tank_nb']
    
    
    选做题:
    编写用户登录接口(学的多的同学,尝试做下述作业,这是截止到下周二学完文件处理之后的作业)
    #1、输入账号密码完成验证,验证通过后输出"登录成功"
    #2、可以登录不同的用户
    #3、同一账号输错三次锁定(附加功能,在程序一直运行的情况下,一旦锁定,则锁定5分钟后自动解锁)
    #扩展需求:在3的基础上,完成用户一旦锁定,无论程序是否关闭,都锁定5分钟
    
    
  • 相关阅读:
    android有点纠结的小问题
    持久化应用程序实例的状态
    preference activity框架
    RISC与CISC比较
    C++ const用法
    虚析构函数
    best-case analysis in real-time system
    jitter
    C/C++中static,const,inline三种关键字详细总结
    #pragma warning(disable 4786)
  • 原文地址:https://www.cnblogs.com/zdw20191029/p/14553368.html
Copyright © 2020-2023  润新知