zoukankan      html  css  js  c++  java
  • 004.python基础知识3

    一、基本数据类型及运算符补充

    (一)基本数据类型补充

    1.换行符

    以python中的print()为例,我们可以发现打印完成之后,光标自动跳转到了下一行,是因为换行符发挥了作用,解释器在我们输出的内容后面,加上了一个换行符“ ”。

    >>> print("abc
    
    def")  # 换行符实现的效果
    abc
    
    def
    
    >>> print("abc", end=" ")
    abc  # 输出的结果没有换行
    

    2.原生字符串

    若我们输出的内容中,有与换行符“ ”一样内容,可以通过增加转义符或者原生字符串来解决。

    >>> print("zhangsan is 
    b")
    zhangsan is 
    b
    
    >>> print("zhangsan is \nb")  # 增加转义符
    zhangsan is 
    b
    
    >>> print(r"zhangsan is 
    b")  # 增加前缀"r",即rawstring原生字符串,让特殊字符直接显示
    zhangsan is 
    b
    
    

    3.浮点数的精度问题

    在python中进行计算,会遇到计算结果精确度的问题

    >>> 10 / 3
    3.3333333333333335
    
    

    计算结果出现误差的原因,是由于计算机数据是以二进制储存的,而我们平时运算是在十进制下进行的,所以精确度在转换后出现了偏差。

    4.布尔值

    (1)显示布尔值

    ①直接定义布尔类型的变量值

    >>> tag=True
    

    ②通过比较运算得到布尔值

    >>> 10 == 10
    

    (2)隐式布尔值

    隐式布尔值为False的数据类型有:0,None,空(空字符串、空列表、空字典),其他的数据类型隐式布尔值均为True

    >>> print(bool(0))  #  False
    >>> print(bool(None))  #  False
    >>> print(bool([]))  #  False
    >>> print(bool({}))  #  False
    >>> print(bool(""))  #  False
    >>> print(bool(" "))  #  True,空格也是字符串
    >>> print(bool(1))  #  True
    >>> print(bool(["a"]))  #  True
    
    

    5.可变、不可变类型

    在基本的数据类型中,按照数据是否可变,可以进行如下分类:

    (1)可变类型:list,dict

    在值改变的情况下,id号不变,即内存地址不变,证明就是在改原来内存空间中的值,即原值可变。

    >>> l1=[111,"aaaa"]
    >>> print(id(l1))  #  2458812741376
    >>> l1[0]=222222
    >>> print(l1)  #  [222222, 'aaaa']
    >>> print(id(l1))  #  2458812741376
    
    >>> dic={'k1':111,'k2':222}
    >>> print(id(dic))  #  2197454021376
    >>> dic['k1']="abc"
    >>> print(dic)  #  {'k1': 'abc', 'k2': 222}
    >>> print(id(dic))  #  2197454021376
    
    

    (2)不可变类型:int,float,str

    在值改变的情况下,id号也随之改变,即内存地址变了,证明不是在改原来内存空间中的值,而是申请了新的内存空间,产生了新的值,即原值不可变。

    >>> x = 10
    >>> print(id(x))  #  140726143342528
    >>> x = 11
    >>> print(id(x))  #  140726143342560
    
    >>> x = 10.3
    >>> print(id(x))  #  1544494893584
    >>> x = 11.4
    >>> print(id(x))  #  1544493433776
    
    >>> x = "abc"
    >>> print(id(x))  #  1544494430384
    >>> x = "aBc"
    >>> print(id(x))  #  1544494511600
    
    

    (3)字典相关补充

    字典的value可以是任意类型,但是字典的key必须是不可变类型。

    >>> dic = {1111111: "abc", "k2": "def", 3.1: 'aaa'}
    >>> print(dic[1111111])
    abc
    
    >>> dic={[1,2,3]:"abc"}
    TypeError: unhashable type: 'list'  # 了解:不可哈希类型就是可变类型,可哈希类型就是不可变类型
    

    (二)基本运算符补充

    1.赋值运算符

    (1)增量赋值

    >>> age=18
    >>> age += 1
    >>> print(age)
    19
    
    

    (2)链式赋值

    作用:可以在不丧失可读性的情况下,起到简化代码的作用。

    >>> x=10
    >>> y=x
    >>> z=y
    >>> print(x, y, z)
    10 10 10
    
    >>> z = y = x = 10
    >>> print(x, y, z)
    10 10 10
    >>> print(id(x), id(y), id(z))
    140726143342528 140726143342528 140726143342528
    
    

    (3)交叉赋值

    >>> m = 111
    >>> n = 222
    
    >>> temp=m
    >>> m=n
    >>> n=temp
    >>> print(m, n)
    111 222
    
    >>> m, n = n, m
    >>> print(m, n)
    111 222
    
    

    (4)解压赋值

    在列表的取值过程中,常常会遇到值较多,不方便取值的情况,此时使用解压赋值,可以使代码更简洁。

    >>> salaries = [1.1, 2.2, 3.3, 4.4, 5.5]
    
    >>> mon0 = salaries[0]
    >>> mon1 = salaries[1]
    >>> mon2 = salaries[2]
    >>> mon3 = salaries[3]
    >>> mon4 = salaries[4]
    >>> print(mon0, mon1, mon2, mon3, mon4)
    1.1 2.2 3.3 4.4 5.5
    
    >>> mon0, mon1, mon2, mon3, mon4 = salaries  #  使用一行代码实现,解决代码冗余的问题
    >>> print(mon0, mon1, mon2, mon3, mon4)
    1.1 2.2 3.3 4.4 5.5
    
    >>> mon0, mon1, mon2, *_ = salaries  
    >>> *_, x, y, z = salaries
    >>> x, *_, z = salaries
    
    

    注意:变量名的个数必须与包含的值个数相同,不能多也不能少。若需要取开头几个,或者取结尾几个,或者开头以及结尾的几个同时取,可以使用”*_“作为填充的变量名实现。

    对于字典来说,解压赋值取出来的是字典的key。

    >>> dic = {"k1": 111, "k2": 222}
    >>> x, y = dic
    >>> print(x, y)
    k1 k2
    
    

    了解:字符串也可以解压赋值

    >>> a,b,c,d,e="hello"
    >>> print(a,type(a),b,c,d,e)
    h <class 'str'> e l l o
    
    

    2.身份运算,”is“与"=="

    (1)”==“判断的是值是否相等

    >>> x = ['a', 'b']
    >>> y = ['a', 'b']
    >>> print(x == y)
    True
    
    

    (2)”is“判断的是id是否相等

    >>> x = ['a', 'b']
    >>> y = ['a', 'b']
    >>> print(id(x))  #  2212916950784
    >>> print(id(y))  #  2212917372096
    >>> print(x is y)
    False
    
    

    (3)总结

    is判断的结果为True,即二者的id一样,即二者的内存地址相同,即二者就是一个东西,即值一定相等。

    如果==判断的结果为True,即二者的值一样,那么二者的内存地址可能不一样。

    如果要判断一个变量是否等于None、True、False,推荐使用is去判断。

    3.比较运算补充

    在python3中,可以实现如下操作,简化代码:

    age = 19
    age >= 18 and age <= 20
    print(20 >= age >= 18)  # True
    print(18 <= age <= 20)  # True
    
    

    二、流程控制之if条件判断

    (一)什么是if条件判断

    if条件判断是一段代码块,使用一个或多个条件,根据条件判断的结果(True or False),选择执行的子代码块,得出结果。

    (二)为什么要有if条件判断

    为了控制计算机能像人一样去完成判断的过程。

    (三)如何用if条件判断

    1.if判断的语法

    if 条件1:
        子代码块1
    elif 条件2:
        子代码块2
    elif 条件3:
        子代码块3
    ...
    else:
        子代码块
    

    2.if单独使用

    if结构中,只有一个if是可以的

    inp_name=input('你的名字: ')
    if inp_name == "egon":
        print('输入正确')
    
    print('其他代码')
    
    

    3.if+elif

    inp_name=input("你的名字:   ")
    if inp_name == "egon":
        print("您是super VIP")
    elif inp_name == "张三":
        print("您是法外狂徒")
    elif inp_name == "李四":
        print("您是张三的好朋友")
    
    print("其他代码")
    
    

    4.if+else

    inp_name = input("你的用户名:  ")
    inp_pwd = input("你的密码:  ")
    
    if inp_name == "zhangsan" and inp_pwd == "123":
        print("登录成功")
    else:
        print("用户名或密码错误,请重新输入正确的用户名和密码")
        
    

    5.if+elif+else

    """
    如果:成绩>=90,那么:优秀
    如果成绩>=80且<90,那么:良好
    如果成绩>=70且<80,那么:普通
    其他情况:很差
    """
    
    score = input("请输入您的成绩:  ")
    score = int(score)
    if score >= 90:
        print("优秀")
    elif score >= 80:
        print("良好")
    elif score >= 70:
        print("普通")
    else:
        print("很差")
    
    

    6.if判断嵌套if

    print("ok0")
    if 10 < 3:    #  由于结果为False,子代码块不执行
        if 1 == 1:
            print("ok1")
            print("ok2")
        print("ok3")
    print("ok4")    #  ok0  ok4
    
    
  • 相关阅读:
    安装httpd服务
    tmpfs临时文件系统,是一种基于内存的文件系统
    oracle Awr报告
    maven jar 怎么看jdk编译版本
    Oracle 11g direct path read 等待事件的理解
    Spring AOP 实现原理
    JVM相关知识(1)
    spring ioc原理(看完后大家可以自己写一个spring)
    java中HashSet详解
    java中HashMap详解
  • 原文地址:https://www.cnblogs.com/huluhuluwa/p/13047032.html
Copyright © 2011-2022 走看看