1 🍑常量和表达式🍑
我们可以把 Python 当成一个计算器, 来进行一些算术运算:
print(1 + 2 - 3)
print(1 + 2 * 3)
print(1 + 2 / 3)
注意:在 Python 中不会使用;
来分割语句,这点有异与C/C++。
从结果我们也不难看出,Python能够自动的推导变量的类型进行输出。
注意:
print
是一个 Python 内置的 函数, 这个稍后详细介绍。- 可以使用
+ - * / ( )
等运算符进行算术运算,先算乘除,后算加减。 - 运算符和数字之间, 可以没有空格, 也可以有多个空格,但是一般习惯上写一个空格(比较美观)。
形如 1 + 2 - 3 这样是算式, 在编程语言中称为 表达式, 算式的运算结果, 称为 表达式的返回值。其中 1 , 2 , 3 这种称为 字面值常量, + - * /
这种称为 运算符 或者 操作符。
熟悉 C / C++ 的同学可能认为, 2 / 3 结果为 0 (小数部分被截断)。但是在 Python 中得到的结果则是一个小数,更符合日常使用的直觉。
2 🍑变量和类型🍑
有的时候, 我们需要进行的计算可能更复杂一些, 需要把一些计算的中间结果保存起来,这个时候就需要用到 变量。
比如:
avg = (67.5 + 89.0 + 12.9 + 32.2) / 4
total = (67.5 - avg) ** 2 + (89.0 - avg) ** 2 + (12.9 - avg) ** 2 + (32.2 - avg) ** 2
result = total / 3
print(result)
注意:
- avg, total, result 均为变量。
**
在 Python 中表示乘方运算,**
2 即为求平方。
2.1 🍎定义变量🍎
a = 10
创建变量的语句非常简单, 其中:
a
为变量名. 当我们创建很多个变量的时候, 就可以用名字来进行区分。=
为赋值运算符, 表示把 = 右侧的数据放到 = 左侧的空间中。
注意: 变量的名字要遵守下面的规则:
- 变量名由数字/字母/下划线构成
- 数字不能开头
- 变量名不能和 “关键字” 重复
- 变量名大小写敏感,num 和 Num是两个不同的变量名
2.2 🍎使用变量🍎
读取变量的值:
a = 10
print(a)
修改变量的值:
a = 20
print(a)
2.3 🍎变量的类型🍎
变量里面存储的不仅仅是数字, 还可以存储其它种类的数据。为了区分不同种类的数据, 我们引入了 “类型” 这样的概念。
注意: 和 C / C++ 等语言不同, Python 变量的类型不需要显式指定, 而是在赋值的时候确定的。
2.3.1 🍋整数🍋
a = 10
print(type(a))
PS: type
和 print 类似
, 也是 python 内置的函数. 可以使用 type
来查看一个变量的类型。
注意: 和 C / C++ 等语言不同, Python 的
int
类型变量, 表示的数据范围是没有上限的. 只要内存足够大, 理论上就可以表示无限大小的数据。
2.3.2 🍋浮点数(小数)🍋
a = 0.5
print(type(a))
注意: 和 C / C++ 等语言不同, Python 的小数只有
float
一种类型, 没有 double 类型,但是实际上
Python 的 float 就相当于 C / C++ 的 double, 表示双精度浮点数。
2.3.3 🍋字符串🍋
a = 'hello'
print(type(a))
使用' '
或者" "
引起来的, 称为 字符串,可以用来表示文本。
注意: 在 Python 中, 单引号构成的字符串和双引号构成的字符串, 没有区别。 'hello'
和 "hello"
是完全等价的。
可以使用 len
函数来获取字符串的长度:
a = 'hello'
print(len(a))
可以使用 +
针对两个字符串进行拼接:
a = 'hello'
b = 'world'
print(a + b)
此处是两个字符串相加,不能拿字符串和整数/浮点数相加。
字符串作为开发中最常用到的数据类型, 支持的操作方式也是非常丰富的,此处暂时不详细展开。
2.3.4 🍋布尔🍋
布尔类型是一个特殊的类型, 取值只有两种, True
(真) 和 False
(假)。
a = True
print(type(a))
b = False
print(type(b))
2.3.5 🍋其他🍋
除了上述类型之外, Python 中还有 list
, tuple
, dict
, 自定义类型 等等,我们后续再介绍。
2.3.6 🍋动态类型特性🍋
在 Python 中, 一个变量是什么类型, 是可以在"程序运行"过程中发生变化的,这个特性称为"动态类型"。
比如:
a = 10
print(type(a))
a = 'hello'
print(type(a))
运行:
我们惊讶的发现程序是可以正常运行的,在程序执行过程中, a 的类型刚开始是 int, 后面变成了 str。
但是在C/C++ 这样的语言则不允许这样的操作,一个变量定义后类型就是固定的了,这种特性则称为 “静态类型”。
动态类型特性是一把双刃剑:
- 对于中小型程序, 可以大大的解约代码量(比如写一段代码就可以同时支持多种类型)。
- 对于大型程序, 则提高了模块之间的交互成本。
3 🍑注释🍑
Python 中有两种风格的注释。
3.1 🍎注释行🍎
使用 #
开头的行都是注释 。
# 这是一行注释
3.2 🍎文档字符串🍎
使用三引号引起来的称为 “文档字符串”, 也可以视为是一种注释。
- 可以包含多行内容。
- 一般放在 文件/函数/类 的开头。
"""
或者'''
均可 (等价)。
"""
这是文档字符串
这是文档字符串
"""
4 🍑输入输出🍑
4.1 🍎通过控制台输出🍎
print('hello')
更多的时候, 我们希望能够输出的内容是混合了字符串和变量的。
num = 10
print(f'num = {num}')
注意:
- 使用
f
作为前缀的字符串, 称为f-string
。 - 里面可以使用
{ }
来内嵌一个其他的变量/表达式。
Python 中还支持其他的格式化字符串的方法,咱们此处只了解这个最简单的即可,其他的暂时不做介绍。
4.2 🍎通过控制台输入🍎
python 使用 input
函数, 从控制台读取用户的输入。
num = 0
num = input('请输入一个整数: ')
print(f'你输入的整数是 {num}')
注意:
input
的参数相当于一个 “提示信息”, 也可以没有。input
的返回值就是用户输入的内容,是字符串类型。
再来看一个例子:
a = input('请输入第一个整数: ')
b = input('请输入第二个整数: ')
print(f'a + b = {a + b}')
此处的结果是字符串拼接, 不是算术运算,如果要想进行算术运算, 需要先转换类型。
比如:
a = input('请输入第一个整数: ')
b = input('请输入第二个整数: ')
a = int(a)
b = int(b)
print(f'a + b = {a + b}')
通过 int( )
把变量转成了 int 类型,类似的, 使用 float( )
, bool( )
, str( )
等可以完成对应的类型转换。
5 🍑运算符🍑
5.1 🍎算术运算符🍎
像 +
-
*
/
%
**
//
这种进行算术运算的运算符, 称为 算术运算符。
-
注意1:
/
和/
中不能用0
作为除数. 否则会 抛出异常:
-
注意2: 整数
/
整数 结果可能是小数,而不会截断。
这个前面说过了的。 -
注意3:
%
不是 “百分数”, 而是求余数。 -
注意4:
**
是求乘方,不光能算整数次方, 还能算小数次方:
print(4 ** 2)
print(4 ** 0.5)
- 注意5:
//
是取整除法(也叫地板除),整数除以整数, 结果还是整数(舍弃小数部分, 并向下取整,不是四舍五入。
print(7 // 2)
print(-7 // 2)
5.2 🍎关系运算符🍎
像 <
<=
>
>=
==
!=
这一系列的运算符称为 关系运算符,它们是在比较操作数之间的关系,类似于C/C++。
其中:
>=
是 “大于等于”
==
是 “等于”
!=
是 “不等于”
<=
是 “小于等于”
- 如果关系符合, 则表达式返回 True. 如果关系不符合, 则表达式返回 False:
a = 10
b = 20
print(a < b)
print(a <= b)
print(a > b)
- 关系运算符不光针对整数/浮点数进行比较, 还能针对字符串进行比较:
a = 'hello'
b = 'world'
print(a < b)
print(a <= b)
print(a > b)
注意:
-
直接使用
==
或者!=
即可对字符串内容判定相等。 (这一点和 C 语言不同,C++支持运算符重载可以这么比较) -
字符串比较大小, 规则是 “字典序”。
-
对于浮点数来说, 不要使用
==
判定相等:
print(0.1 + 0.2 == 0.3)
浮点数在计算机中的表示并不是精确的,在计算过程中, 就容易出现非常小的误差。
- 正确的比较方式,不再严格比较相等了, 而是判定差值小于允许的误差范围:
a = 0.1 + 0.2
b = 0.3
print(-0.000001 < (a - b) < 0.000001)
实际工程实践中, 误差在所难免, 只要保证误差在合理范围内即可。
5.3 🍎逻辑运算符🍎
像 and
or
not
这一系列的运算符称为逻辑运算符.。
and
并且。两侧操作数均为 True, 最终结果为 True,否则为 False。 (一假则假,类似于C/C++中的&&
)or
或者。两侧操作数均为False, 最终结果为 False,否则为 True。 (一真则真,类似于C/C++中的||
)not
逻辑取反。操作数本身为 True, 则返回False,本身为 False, 则返回 True。(类似于C/C++中的!
)
一种特殊写法:
a < b and b < c
这个操作等价于 a < b < c
这个设定和大部分编程语言都不相同。
关于短路求值,和其他编程语言类似, Python 也存在短路求值的规则:
- 对于
and
,如果左侧表达式为 False, 则整体一定为 False, 右侧表达式不再执行。 - 对于
or
, 如果左侧表达式为 True, 则整体一定为 True, 右侧表达式不再执行。
这个与C/C++类似,很简单就不再赘述了。
5.4 🍎赋值运算符🍎
链式赋值:
a = b = 10
多元赋值:
a, b = 10, 20
复合赋值运算符:
Python 还有一些 复合赋值运算符. 例如 +=
-=
*=
/=
%=
等。类似于C/C++。
注意: 像 C / C++ 中, 存在 ++
--
这样的自增/自减运算符,Python 中则不支持这种运算,如果需要使用,,则直接使用 += 1
或者 -= 1
。
++ --
最大的问题就是容易分不清前置和后置的区别,这一点 Python 语法在设计的时候就进行了规避, 避免出现这种不直观, 并且容易混淆的语法。
5.5 🍎其他🍎
除了上述之外, Python 中还有一些运算符, 比如 身份运算符 (is
, is not
), 成员运算符 (in
, not in
), 位运算符 ( &
|
~
^
<<
>>
) 等。
起始位运算类似于C/C++,其他的此处咱们暂时不介绍。
6 🍑顺序语句🍑
默认情况下, Python 的代码执行顺序是按照从上到下的顺序, 依次执行的。
print("1")
print("2")
print("3")
执行结果一定为 “123”,而不会出现 “321” 或者 “132” 等. 这种按照顺序执行的代码, 我们称为 顺序语句。
7 🍑条件语句🍑
7.1 🍎语法格式🍎
Python 中使用 if
else
关键字表示条件语句。
if
:
if expression:
do_something1
do_something2
next_something
- 如果 expression 值为 True, 则执行 do_something1, do_something2, next_something
- 如果 expression 值为 False, 则只执行 next_something, 不执行 do_something1, do_something2
if
- else
:
if expression:
do_something1
else:
do_something2
如果 expression 值为 True, 则执行 do_something1
如果 expression 值为 False, 则执行 do_something2
if
- elif
- else
:
if expression1:
do_something1
elif expression2:
do_something2
else:
do_something3
如果 expression1 值为 True, 则执行 do_something1
如果 expression1 值为 False, 并且 expression2 为 True 则执行 do_something2
如果 expression1 值为 False, 并且 expression2 为 False 则执行 do_something3
注意: Python中的条件语句写法,和很多编程语言不太一样:
if
后面的条件表达式, 没有( )
, 使用:
作为结尾。if / else
命中条件后要执行的 “语句块”, 使用缩进
(通常是 4 个空格或者 1 个 tab)来表示, 而不是{ }
。- 对于多条件分支, 不是写作
else if
, 而是elif
(合体了)
例子1:
a = input("请输入一个整数: ")
if a == "1":
print("hello")
print("world")
例子2:
a = input("请输入一个整数: ")
if a == "1":
print("hello")
print("world")
Python使用了缩进来替代了C/C++中的{}
,所以我们在写Python代码时一定要注意缩进规范。
7.2 🍎空语句 pass🍎
代码示例: 输入一个数字, 如果数字为 1, 则打印 hello。
a = int(input("请输入一个整数:"))
if a != 1:
pass
else:
print("hello")
其中 pass 表示 空语句,并不会对程序的执行有任何影响,只是占个位置, 保持 Python 语法格式符合要求。
如果代码写作:
程序是不符合 Python 语法的, 会直接报错。
8 🍑循环语句🍑
8.1 🍎while 循环🍎
基本语法格式:
while 条件:
循环体
条件为真则执行循环体。
条件为假就退出循环。
代码示例:计算1-100的和
sum = 0
num = 1
while num <= 100:
sum += num
num += 1
print(sum)
8.2 🍎for 循环🍎
基本语法格式:
for 循环变量 in 可迭代对象:
循环体
注意:
- python 的
for
和其他语言不同, 没有 “初始化语句”, “循环条件判定语句”, “循环变量更新语句”, 而是更加简单。 - 所谓的 “可迭代对象”, 指的是 “内部包含多个元素, 能一个一个把元素取出来的特殊变量”。
代码示例: 打印 2, 4, 6, 8, 10
for i in range(2, 12, 2):
print(i)
使用 range
函数, 能够生成一个可迭代对象. 生成的范围是 [2, 12), 也就是 [2, 11]。
通过 range
的第三个参数, 可以指定迭代时候的 “步长”,也就是一次让循环变量加几。
代码示例: 求 1 - 100 的和:
sum = 0
for i in range(1, 101):
sum += i
print(sum)
8.3 🍎continue和break🍎
continue
表示结束这次循环, 进入下次循环,break
表示结束整个循环,类似于C/C++。
sum = 0
count = 0
while True:
num = input("请输入数字:")
if num == ';':
break
num = float(num)
sum += num
count += 1
print(sum / count)