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

原文地址:https://www.cnblogs.com/huluhuluwa/p/13047032.html