python基础和python运算符

学习python的第二天

  • 该文章主要学习内容:

  • python运算符


注释

我们写的程序里,不光有代码,还要有很多注释。注释有说明性质的、帮助性质的,它们在代码执行过程中相当于不存在,透明的。

  1. 单行注释
    Python中,以符号'#'为单行注释的开始,从它往后到本行的末尾,都是注释内容。快捷键:CTRL+/
1
2
# 打印输出hello world
print("hello world")
  1. 多行注释

Python没有真正意义上的多行注释(块注释)语法。选中需注释的代码,再使用快捷键CTRL+/

1
2
3
# 第一行注释
# 第二行注释
# 第三行注释
  1. 注释文档

在某些特定的位置,用三引号包括起来的部分,也被当做注释。

1
2
3
4
5
6
7
8
9
10
"""
这个是函数的说明文档。
:param a: 加数
:param b: 加数
:return: 和
"""
'''
也可以实现多行注释
与三个双引号作用一致
'''

注意:

很多时候,我们在一些py脚本文件的开头都能看到类似的以*#*开头的这样两行代码,它们不是注释,是一些设定

1
2
#!/usr/bin/env python
# -*- coding:utf-8 -*-

第一行:用于指定运行该脚本的Python解释器,Linux专用,windows不需要。env方式下,系统会自动使用环境变量里指向的Python。还有一种方式,#!/usr/bin/python3.6,这会强制要求使用系统中的python3.6解释器执行文件,这种方式不好,一旦你本地的Python3.6版本删除了,会出现找不到解释器的错误。无论两种方式的哪一种,都指的是在linux下使用

第二行:代码的编码方式。不是程序要处理的数据的编码方式,而是程序自己本身的字符编码。在Python3中,全面支持Unicode,默认以UTF-8编码,我们不用再纠结中文的问题,乱码的问题,所以本行其实可以不需要。但在Python2中,对字符的编码是个非常令人头疼的问题,通常都需要指定这么一行。如果要自定义别的编码类型的话,可以像这样:# – coding: cp-1252 –,但如果没有强制需求的话,不要自己作死,请坚持使用utf-8编码。

这里的-*-是什么意思呢?没意思,装饰美观好看而已。

语句与缩进

语句
在代码中,能够完整表达某个意思、操作或者逻辑的最短代码,被称为语句。

1
2
3
a = 321
print("hello world")
input("请输入")

注意:python的标准语言不需要使用分号。简单的换行就表示语句已经结束

代码块
为完成某一特定功能而联系在一起的一组语句构成一个代码块。有判断、循环、函数、类等各种代码块。代码块的首行通常以关键字开始,以冒号( : )结束。比如:

1
2
3
4
5
6
if expression:
pass
elif expression :
pass
else:
pass

缩进

Python最具特色的语法就是使用缩进来表示代码块,不需要使用大括号

像PHP、JAVA等语言都是使用({})来表示代码块的。python一般用四个空格就是tab来缩进。在pycharm中tab自动回转成4个空格。在Linux环境中,如VIM编辑器,建议使用空格。

那么怎么才是正确的缩进方式呢?

  • 所有的普通语句,顶左开始编写,不需要缩进
  • 所有的语句块,首行不用缩进,从冒号结束后开始下一行,都要缩进
  • 直到该语句块结束,就退回缩进,表示当前块已结束
  • 语句块可以嵌套,所以缩进也可以嵌套

多行语句: 前面是多条语句在一行,但如果一条语句实在太长,也是可以占用多行的,可以使用反斜杠()来实现多行语句

1
2
string = "i love this country,"\
+"because it is very beautiful!"

不到迫不得已,不要使用这种,该换行就换行。

pass语句

pass语句是占位语句,它什么都不做,只是为了保证语法的正确性而写。以下场景中,可以使用pass语句:

  • 当你不知道后面的代码怎么写的时候
  • 当你不需要写代码细节的时候
  • 当语法必须,又没有实际内容可写的时候
  • 其它的一些你觉得需要的场景
1
2
def func(a,b):
pass

字符串的表示形式

在后面的章节中,会进行更深入的介绍,这里作为一个前期的知识铺垫。

abc可能是个变量,但是"abc"肯定是个字符串了。这里强调一下在编程语言中,所有的符号都是英文状态下的

在python中单引号和双引号的作用完全相同。在其他语言中,单双引号还是有一定区别的。

原生字符串: 通过在字符串前加r或R,如 r”this is test \n”,表示这个字符串里的斜杠不需要转义,等同于自身

变量与常量

变量:在程序运行过程中,值会发生变化的量

常量:在程序运行过程中,值不会发生变化的量

无论是变量还是常量,在创建时都会在内存中开辟一块空间,用于保存它的值

这里有一点需要注意的是,在python中是不需要声明类型的。这是根据Python的动态语言特性而来。变量可以直接使用,而不需要提前声明类型。

变量

变量的定义
把程序运算的中间结果临时存到内存里,以备后面的代码继续调用,这几个名字的学名就叫做“变量”。

变量的作用
变量用于存储要在计算机程序中引用和操作的信息。它提供了一种用描述性名称标注数据的方法,这样读者和我们自己就可以更清楚地理解我们的程序。

我们可以将变量看作保存信息的容器。它们的目的是在内存中标注和存储数据。然后,可以在整个程序中使用这些数据。

变量的创建

  1. Python 中的变量不需要声明类型
1
2
3
4
5
6
7
>>> a = 4
>>> type(a)
<class 'int'>

>>> b = "hello"
>>> type(b)
<class 'str'>

这些变量都是不需要声明它的类型的,在C和Java中是必须要声明的。这里的=是赋值而不是等于的意思。每个变量在使用前都必须赋值,变量赋值以后才会被创建。如果一个变量没有赋值,直接用的话。系统会报出错误

这里的等号要理解并读作“赋值”,而不是“等于”,“赋值”是对变量的操作,而“等于”是对两个变量进行比较。

  1. 每个变量在使用前都必须赋值,变量赋值以后才会被创建

新的变量通过赋值的动作,创建并开辟内存空间,保存值。如果没有赋值而直接使用会抛出赋值前引用的异常或者未命名异常

1
2
3
4
5
6
7
8
>>> a      
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
a
NameError: name 'a' is not defined
>>> a = 1
>>> a
1
  1. Python中,一切事物都是对象,变量引用的是对象或者说是对象在内存中的地址。(后续详解)

  2. 在Python中,变量本身没有数据类型的概念

通常所说的“变量类型”是变量所引用的对象的类型,或者说是变量的值的类型

1
2
3
4
>>> a = 1
>>> a = "haha"
>>> a = [1, 2, 3]
>>> a = { "k1":"v1"}

例子中,变量a在创建的时候,赋予了值为1的整数类型,然后又被改成字符串“haha”,再又变成一个列表,最后是个字典。变量a在动态的改变,它的值分别是不同的数据类型,这是动态语言的特点。

  1. “=”号这个赋值运算符是从右往左的计算顺序。
    1
    2
    3
    4
    5
    >>> a = 1
    >>> b = 2
    >>> c = a + b # 先计算a+b的值,再赋给c
    >>> c
    3
  2. Python允许同时为多个变量赋值

例如:输出a,b,c的值都为2

1
2
3
4
5
6
7
>>> a = b = c = 2
>>> a
2
>>> b
2
>>> c
2

例如:输出a,b,c的值分别为1,2,3

1
2
3
4
5
6
7
>>> a,b,c = 1,2,3
>>> a
1
>>> b
2
>>> c
3

变量创建

a = ‘ABC’时,Python解释器干了两件事情:

1.在内存中创建了一个‘ABC’的字符串对象;

2.在内存中创建了一个名为a的变量,并把它指向’ABC’。

思考

1
2
3
4
5
a = 'Jack'
b = a
a = 'Tom'
print(b)
print(a)

执行a = ‘Jack’,解释器创建字符串‘Jack’对象和变量a,并把a指向‘Jack’对象;

执行b = a,解释器创建变量b,并且将其指向变量a指向的字符串‘Jack’对象;

执行a = ‘Tom’,解释器创建字符串‘Tom’对象,并把a改为指向‘Tom’对象,与b无关。

常量

常量的定义

常量就是不变的量,或者说在程序运行过程中不会改变的量。比如常用的数学常数圆周率就是一个常量。在Python中,通常用全部大写的变量名表示常量:

1
PI = 3.14159265359

但事实上,从Python语法角度看,PI仍然是一个变量,因为Python根本没有任何机制保证PI不会被改变。你完全可以给PI赋值为10,不会弹出任何错误。所以,用全部大写的变量名表示常量只是一个习惯上的用法。

1
2
3
4
5
6
>>> PI = 3.1415
>>> PI
3.1415
>>> PI = 10
>>> PI
10
  1. 注释语句缩进

pyhton注释

为什么会有注释?

  • 我们写的程序里,不光有代码,还要有很多注释。

  • 注释有说明性质的,帮助性质的,它们在代码执行过程中相当于不存在,透明的

  • 目的:增加代码可读性

单行注释

  • python中以符号#为注释的开始,从它往后到本行的末尾,都是注释内容。

  • 快捷键:CTRL+/ (唱、跳、RAP、篮球 都知道吧🤭)

小练习:给你的 hello world 写个注释吧

1
2
# 单行注释 第一个注释 先选中 ctrl+/
# print('hello world')

多行注释

  • python中没有真正意义上的多行注释(块注释)语法。

  • 选中需注释的代码块,再使用快捷键:CTRL+/ (依旧是 唱、跳、RAP、篮球🤭)

小练习:实现同时进行多行注释暂时不需要的代码,以及再需要使用时取消注释

注释文档

  • 在python中通常使用三对引号来注释文档,也可以认为时注释多行。
1
2
3
4
5
6
'''
多行注释 可以用三对双引号也可以用三对单引号
print('hello')
print('hello')
print('hello')
'''

语句与缩进

语句

  • 在代码中,能够完整表达某个意思操作或者逻辑的最短代码,被称为语句
  • 注意:python不需要使用分号。

  • 简单的换行就代表语句已经结束。

1
2
# 如果一定要在一行输出多个语句 必须在后面加上一个分号 但是不建议
print('hello');print('hello')

代码块

  • 为完成某一特定功能而联系在一起的一组语句构成一个代码块。

  • 有判断、循环、函数、类等各种代码块。

  • 代码块的首行通常以关键字开始,以冒号(:)结束。

缩进

  • python最具特色的语法就是使用缩进来表示代码块,不需要使用大括号。

  • python一般用四个空格就是tab来缩进.

  • 在pycharm中tab自动回转成4个空格

正确的缩进方式:

  • 所有的普通语句,顶左开始编写,不需要缩进

  • 所有的代码块,首行不用缩进,从冒号借宿开始下一行,都要缩进

  • 直到该语句块结束,就退回缩进,表示当前块已结束

  • 语句块可以嵌套,所以缩进也可以嵌套

相关栗子

1
2
3
4
5
6
7
age = input('请输入你的年龄:')
if int(age) >= 18: # 12>18?不成立
# 前面的空格可以使用Tab键进行缩进
print('你好呀小靓仔!')
print('hello')
else: # if条件不满足直接执行else
print('你好呀小朋友!')

pass语句

pass语句

  • pass语句是占位语句,它什么都不做,只是为了保证语法的正确性而写

以下场景中,可以使用pass语句

  • 当你不知道后面的代码怎么写的时候

  • 当你不需要写代码细节的时候

  • 当语法必须,又没有实际内容可写的时候

  • 其他的一些你觉得需要得场景

1
2
3
4
5
# pass 占位语句 保证代码完整性
if 5 > 8:
pass
else:
pass

02.算式运算符

python运算符

算数运算符

注意:

  • / 计算结果是 浮点数 ,即使两个数都是整数,结果也是浮点数

  • // 是 向下取整

  • 如果想同时得到 余数 ,可以用 divmod() 这个方法。该方法的返回值是 tuple(x//y, x%y)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
print(3+5) # 8
print('3'+'5') #35 字符串相加是拼接
# print(4+'8') # int不和str相加
print(8-9)
print('%'*10)
# print('3'-'5') str不能相减 相除

# 乘法
# print(6x5) 报错
print(6*5)

# 除法 / 简单的除法(即使整除) 结果也会有小数 是浮点型
print(7/2) # 3.5
print(4/2) # 2.0

# % 取余
print(10 % 3.0) # 1
print(20 % 10) # 0
print(1 % 3) # 1

# ** 幂次
print(3**3) # 求3的3次方 3*3*3 27
print(5**5) # 5的5次方 也就是 5*5*5*5*5 结果为:3125
print(2*3) # 8

# // 取整 返回商的整数部分
print(10//3)
print(10//3.0)

'''
取整:
只要有浮点型的数参加了运行,结果就是一个浮点型
'''

# divmod(x,y)(x//y,x%y)
print(divmod(10,3)) # (10//3,10%3)

比较运算符

注意:

  • int 不能 直接与 str 比较

  • python3 中 不支持 <> 号,如:>>> 2 <> 3

  • == 与 != 符号 不能分开 写成 = =

  • str 与 str 之间比较的是 ASCII,并且 逐个比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 比较运算符返回的是布尔类型
print(2003 == 2003) # True 判断值是否相等 相等返回True 不相等返回False
print(19 != 19)
print(3 != 3.0) # False

print(78 < 89) # True
print(78.0 < 79) # False

# str比较的是ascll编码 A 65 a 97 0 48
print('a' < 'b') # 97 < 98

# 第一个字符大谁就大 如果第一个相等 就比较第二个 以此类推
print('acd' < 'acc') # False
print('acd' < 'bcd') # True

print(8 <=8 ) # True

print('abc' < str(89)) # int和字符串不能进行比较

ascll编码对照表:https://blog.csdn.net/hhy321/article/details/120610891

赋值运算符

注意:

  • 赋值:是将等号右边赋值给等号左边

  • python 不支持 a++、a– 语法

  • += 等符号 不能分开 写成 + =

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
z = 9  # 把这个9赋给了z z 在里面存的就是9
c = z+10 # c=9+10
print(c)

# 加法赋值运算
a = 10
a += 10 # a=a+10
print(a) # 20

# 乘法赋值运算
d = 9
d *= 2 # d=d*2
print(d)

# 取整除赋值运算符
e = 10
e //= 3 # e=e//3
print(e)

逻辑运算符

连续比较

  • 连续比较、如:a>b>c 可拆解为 a>b and b>c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# and 逻辑与 前面都为真才为真
print(True and False) # False
print(True and True) # True

# bool()查看数据的真假
print(bool(2)) # True
print(2 and 0)

# or 逻辑或 只要有一个为真结果就为真
print(True or False) # True
print(False or True) # True
print(False or False) # False

# 逻辑非 取反 真为假 假为真
print(not True) # False
print(not False) # True
print(not 2)

# 连续比较就相当于运用了逻辑与运算
print(25 > 23 > 2) # 25>23 and 23 >2 True and True
print(25 > 23 < 2) # 25>23 and 23 < 2 True and False

成员运算符

  • in 与 not in 是 Python 独有的运算符(全部都是小写字母),用于判断对象是否某个集合的元素之一,非常好用,并且运行速度很快。

-返回的结果是布尔值类型的 True 或者 False 。

1
2
3
4
5
6
7
8
# in 判断某个对象是否在某个集合中 在返回真 不在返回假
print('a' in 'abc') # True
print('ac' in 'abc') # False
# print('7' in 789) # 错误 报错
print(7 in 789) # 错误 报错

# not in 判断某个对象是否在某个集合中 不在返回真 在返回假
print('岁岁' not in '岁岁平安') # False

身份运算符

  • 身份运算符也是 Python 的特色语法(全部都是小写字母)

注意:is 与 == 的区别

  • is 用于判断两个变量的引用是否为同一个内存地址 (可使用 id() 查看)
  • == 用于判断两个变量的值是否相等
1
2
3
4
5
6
7
8
9
10
11
12
13
name = '张三'
age = 20
# id () 查看对象内存地址
print(id(name))
# is 判断对象内存地址是否一致
print(id(age))
print(name is age) # False
print(name is not age) # True

a = 25
b = 25
print(a is b)
print(a == b)

三目运算符

python中的三目运算符表示方法:

看招:

  • a = 1,b = 2

  • 实现,当 a+b>3 执行 a+b,否则执行 b-a

1
2
3
4
5
6
7
8
9
10
11
# 表达式1 if 条件 else 表达式2
# 条件为真执行表达式1
# 条件为假执行表达式2

a = 1
b = 2
# print(a+b )if a+b>3 else print(b-a)
print(a+b if a+b > 3 else b-a)

# ** 高于*
print(2+2*3**2-8)

运算符优先级

  • 下表列出了从 最高到最低优先级 的所有运算符。

  • 优先级高的运算符优先计算或处理,同级别 的按从 左往右 的顺序计算(赋值运算符 除外,它是按从 右往左 的顺序)

封面图片

觉得该文章对您有帮助,可以在下方给博主留言(如有错误可以通过留言或者联系博主进行更改)

感谢您的观看,欢迎下次再见,再见