文章目录
- 1.变量的语法
- 2.变量的类型
- 3.注释
-
- [3.1 注释行](#3.1 注释行)
- [3.2 文档字符串](#3.2 文档字符串)
- [3.3 如何批量注释](#3.3 如何批量注释)
- 4.输入输出
-
- [4.1 和用户交互](#4.1 和用户交互)
- [4.2 通过控制台输出](#4.2 通过控制台输出)
- [4.3 通过控制台输入](#4.3 通过控制台输入)
- 5.运算符
-
- [5.1 算术运算符](#5.1 算术运算符)
- [5.2 关系运算符](#5.2 关系运算符)
- [5.3 逻辑运算符](#5.3 逻辑运算符)
- [5.4 赋值运算符](#5.4 赋值运算符)
- [5.5 其他](#5.5 其他)
- [6. 练习](#6. 练习)
1.变量的语法
1.1定义变量
1.1.1硬性规则(务必遵守)
- 变量名由数字字母下划线构成
- 数字不能开头
- 变量名不能和 "关键字" 重复
- 变量名大小写敏感.
num
和Num
是两个不同的变量名
1.1.2软性规则(建议遵守)
- 给变量命名的时候,尽量使用描述性的单词来表示,尽量通过名字来表现出变量的左右
- 当我们使用一个单词描述不清楚的时候,可以使用多个单词来命名,不怕变量名字长,而怕变量的含义表达的不清楚
- 当变量名包含多个单词的时候, 建议使用 "驼峰命名法". 形如
totalCount , personInfo
这种, 除了首个单词外, 剩余单词首字母大写
当包含多个单词的时候,命名有多种规范:
驼峰命名:除了第一个单词的首字母,后续每个字母的首字母都大写
例如:
totalCount
蛇形命名:单词之间使用下划线来进行分割
例如:
total_count
1.2使用变量
读取变量的值
python
a = 10#首次使用=对a进行设置值,这个过程是创建变量(初始化)
b = a
print(b)#当然, 也可以用一个变量的值赋给另外一个变量.
打印:
cpp
10
修改变量的值
python
a = 10#首次使用=对a进行设置值,这个过程是创建变量(初始化)
b = a
print(b)
a = 20#后续对a使用=操作,相当于修改了a的内容(赋值)
print(a)
打印:
cpp
10
20
注意: 在 Python
中, 修改变量也是使用 =
运算, 看起来和定义变量没有明显区别.
2.变量的类型
变量里面存储的不仅仅是数字, 还可以存储其它种类的数据. 为了区分不同种类的数据, 我们引入了 "
类型
" 这样的概念.和
C++ / Java
等语言不同,Python
变量的类型不需要显式指定, 而是在赋值的时候确定的.
type
和python
内置的函数. 我们可以通过type
关键字来查看变量的类型。
2.1整型
打印:
cpp
<class 'int'>
注意: 和 C++ / Java
等语言不同, Python
的 int
类型变量, 表示的数据范围是没有上限的。只要内存足够大, 理论上就可以表示无限大小的数据。因此,python
中就没有long
这样的类型了,像byte
,short
这些类型在python
中也不存在。
2.2浮点型
打印:
cpp
<class 'float'>
注意: 和 C++ / Java
等语言不同, Python
的小数只有 float
一种类型, 没有 double
类型. 但是实际上 Python
的 float
就相当于 C++ / Java
的 double
, 表示双精度浮点数。
2.3 字符串类型
使用 ' '
或者 " "
引起来的, 称为 字符串. 可以用来表示文本.
打印:
cpp
<class 'str'>
注意: 在 Python
中, 单引号构成的字符串和双引号构成的字符串, 没有区别.。'hello'
和 "hello"
是完全等价的.。
这个单引号和双引号看似没用,实际上是有用的。
比如想打印一个句子:My name is 'YDK'
如果只用单引号或者双引号的话是无法实现的。
python
里面还有一种三引号,来适用下面这种情况:
将错误语句注释后,运行。
打印:
cpp
My 'name' is "YDK"
可以使用 len
函数来获取字符串的长度.
打印:
cpp
<class 'str'>
5
helloworld
10
在
python
中 ,报错有两种情况:
- 语法错误:在程序运行之前,
python
解释器就能把错误识别出来- 运行错误:在程序运行之前,识别不了的。必须要执行到对应的代码才能发现问题
2.4布尔类型
布尔类型是一个特殊的类型, 取值只有两种, True
(真) 和 False
(假)
打印:
cpp
<class 'bool'>
<class 'bool'>
布尔类型在后续进行逻辑判断的时候, 是非常有用的
2.5其他类型
除了上述类型之外, Python
中还有 list, tuple, dict,
自定义类型 等等。后续再介绍。
为什么要有这么多类型?
(1) 类型决定了数据在内存中占据多大空间.
例如
float
类型在内存中占据 8 个字节.计算机里面使用二进制来表示数据. 也就是每个位只能表示
0
或者1
1
个二进制位, 就称为是一个 "比特",8
个二进制位, 就称为一个 "字节" (Byte
)一个float
变量在内存中占据8
个字节空间, 也就是64
个二进制位。(2) 类型其实约定了能对这个变量做什么样的操作.
例如
int / float
类型的变量, 可以进行+ - * /
等操作而
str
类型的变量, 只能进行+
(并且行为是字符串拼接), 不能进行- * /
, 但是还能使用len
等其他操作.类型系统其实是在对变量进行 "归类"。 相同类型的变量(数据) 往往具有类似的特性和使用规则。
2.6 动态类型特性
在 Python
中, 一个变量是什么类型, 是可以在 "程序运行" 过程中发生变化的。这个特性称为 "动态类型" 。
打印:
cpp
<class 'int'>
<class 'str'>
<class 'bool'>
在程序执行过程中, a
的类型刚开始是 int
, 后面变成了 str
,最后变成了bool
C++/Java
这样的语言则不允许这样的操作. 一个变量定义后类型就是固定的了. 这种特性则称为 "静态类型".
这个是类型声明,方便程序员读程序的时候,更好的去理解,也方便开发工具更好的去解析。
动态类型特性是一把双刃剑:
对于中小型程序, 可以大大的解约代码量(比如写一段代码就可以同时支持多种类型)
对于大型程序, 则提高了模块之间的交互成本. (程序猿
A
提供的代码难以被B
理解)
3.注释
Python
中有两种风格的注释
3.1 注释行
使用 # 开头的行都是注释
python
# 这是一行注释
3.2 文档字符串
使用三引号引起来的称为 "文档字符串", 也可以视为是一种注释.
可以包含多行内容
一般放在 文件/函数/类 的开头
""" 或者 ''' 均可 (等价)
python
"""
这是文档字符串
这是文档字符串
"""
3.3 如何批量注释
选中想要注释的代码,然后同时按Ctrl和/
这两个键,即可完成批量注释。
3.4注释的规范
- 内容准确: 注释内容要和代码一致, 匹配, 并在代码修改时及时更新.
- 篇幅合理: 注释既不应该太精简, 也不应该长篇大论.
- 使用中文: 一般中国公司都要求使用中文写注释, 外企另当别论.
- 积极向上: 注释中不要包含负能量(例如 领导
SB
等).
4.输入输出
4.1 和用户交互
程序需要和用户进行交互.
用户把信息传递给程序的过程, 称为 "输入".
程序把结果展示给用户的过程, 称为 "输出".
输入输出的最基本的方法就是控制台. 用户通过控制台输入一些字符串, 程序再通过控制台打印出一些字符串。
PyCharm
运行程序, 下方弹出的窗口就可以视为是控制台.
windows
自带的 cmd
程序, 也可以视为是控制台.
输入输出的最常见方法是图形化界面. 如我们平时用到的 QQ
, 浏览器, steam
等, 都不需要用户输入命令, 而只是通过鼠标点击窗口点击按钮的方式来操作
4.2 通过控制台输出
Python
使用 print
函数输出到控制台
不仅能输出一个字符串, 还可以输出一个其他类型的变量
打印:
cpp
10
True
更多的时候, 我们希望能够输出的内容是混合了字符串和变量的
例如:输出 num = 10
打印:
cpp
num = 10
注意:
使用
f
作为前缀的字符串, 称为f-string
里面可以使用
{ }
来内嵌一个其他的 变量/
表达式
打印:
cpp
num = 10
num = 20
4.3 通过控制台输入
python 使用 input 函数, 从控制台读取用户的输入
打印:
cpp
请输入一个整数: 1
你输入的整数是 1
注意:
input
的参数相当于一个 "提示信息", 也可以没有
input
的返回值就是用户输入的内容是字符串类型
打印:
cpp
请输入第一个整数: 1
请输入第二个整数: 2
a + b = 12
此处的结果是字符串拼接, 不是算术运算. 如果要想进行算术运算, 需要先转换类型。
打印:
cpp
请输入第一个整数: 1
请输入第二个整数: 2
a + b = 3
通过
int( )
把变量转成了int
类型类似的, 使用
float( ), bool( ), str( )
等可以完成对应的类型转换
5.运算符
5.1 算术运算符
像 + - * / % ** //
这种进行算术运算的运算符, 称为 算术运算符
注意1:
/
中不能用0
作为除数。否则会抛出异常
打印:
这种运行时出现的错误,也叫做抛出异常。如果程序运行过程中抛出异常,程序直接就中止了。异常后面的代码也就不会执行到了。
图中的ZeroDivisionError
是除0
异常。
异常是编程语言中的一种常见机制, 表示程序运行过程中, 出现了一些 "意外情况", 导致程序不能继续往下执行了。
打印:
有些编程语言中,/整数0 也会抛出异常;/浮点数0 会得到无穷大。
注意2: 整数
/
整数 结果可能是小数,而不会截断
打印:
cpp
0.5
注意3:
%
不是 "百分数", 而是求余数
打印:
cpp
1
注意4:
**
是求乘方,不光能算整数次方, 还能算小数次方
打印:
cpp
16
2.0
注意5:
//
是取整除法(也叫地板除)。整数除以整数, 结果还是整数(舍弃小数部分, 并
向下取整
,不是四舍五入)
打印:
cpp
3
-4
5.2 关系运算符
像
<, <=, >, >=, ==, !=
这一系列的运算符称为 关系运算符, 它们是在比较操作数之间的关系。其中:
<=
是 "小于等于"
=
是 "大于等于"
==
是 "等于"
!=
是 "不等于"
- 如果关系符合, 则表达式返回
True
。如果关系不符合, 则表达式返回False
。
打印:
cpp
True
True
False
False
False
True
- 关系运算符不光针对整数/浮点数进行比较, 还能针对字符串进行比较。
打印:
cpp
True
True
False
False
False
True
注意:
直接使用
==
或者!=
即可对字符串内容判定相等。(这一点和C / Java
不同)字符串比较大小, 规则是 "字典序"
关于字典序:想象一个英文词典, 上面的单词都是按照字母顺序排列。如果首个字母相同, 就比较第二个字母。(就比如著名单词
abandon
)我们认为一个单词在词典上越靠前, 就越小。 越靠后, 就越大。
- 对于浮点数来说, 不要使用
==
判定相等
打印:
cpp
False
注意: 浮点数在计算机中的表示并不是精确的! 在计算过程中, 就容易出现非常小的误差。
打印:
cpp
0.1
0.2
0.3
0.30000000000000004
不止是
Python
如此, 主流编程语言都是如此。这个是IEEE754
标准规定的浮点数格式所引入的问题
正确的比较方式: 不再严格比较相等了, 而是判定差值小于允许的误差范围
打印:
cpp
True
5.3 逻辑运算符
像
and or not
这一系列的运算符称为 逻辑运算符。
and
并且
- 两侧操作数均为
True
, 最终结果为True
。 否则为False
。 (一假则假)
or
或者
- 两侧操作数均为
False
, 最终结果为False
。否则为True
。 (一真则真)
not
逻辑取反
- 操作数本身为
True
, 则返回False
。本身为False
, 则返回True
。
打印:
cpp
True
False
False
True
False
True
一种特殊写法:
a < b and b < c
这个操作等价于a < b < c
。这个设定和大部分编程语言都不相同。
关于短路求值和其他编程语言类似,
Python
也存在短路求值的规则.对于
and
, 如果左侧表达式为False
, 则整体一定为False
, 右侧表达式不再执行。对于
or
, 如果左侧表达式为True
, 则整体一定为True
, 右侧表达式不再执行。
打印:
cpp
False
True
上述代码没有抛出异常, 说明右侧的除以
0
操作没有真正执行。
5.4 赋值运算符
=
的使用
=
表示赋值. 这个我们已经用过很多次了。注意和 ==
区分。
=
除了基本的用法之外, 还可以同时针对多个变量进行赋值。
链式赋值:
cpp
a = b = 10
先把10
赋值给b
,然后把b
赋值给a
。
多元赋值:
cpp
a, b = 10, 20
把10
赋值给a
,把20
赋值给b
。
代码实例: 交换两个变量
1.基础写法
cpp
a = 10
b = 20
tmp = a
a = b
b = tmp
2.基于多元赋值
cpp
a = 10
b = 20
a, b = b, a
- 复合赋值运算符
Python
还有一些 复合赋值运算符。例如+= -= *= /= %=
其中
a += 1
等价于a = a + 1
。 其他复合赋值运算符也是同理。
cpp
a = 10
a = a + 1
print(a)
b = 10
b += 1
print(b)
注意:
像
C++ / Java
中, 存在++ --
这样的自增/自减运算符。Python 中则不支持这种运算。如果需要使用, 则直接使用
+= 1
或者-= 1
++ --
最大的问题就是容易分不清前置和后置的区别。 这一点 Python 语法在设计的时候就进行了规避, 避免出现这种不直观, 并且容易混淆的语法。
5.5 其他
除了上述之外, Python
中还有一些运算符, 比如 身份运算符 (is, is not)
, 成员运算符 (in, not in),
位运算符 ( & | ~ ^ << >>)
等。
6. 练习
(1) [多选] 以下关于变量之间加法运算的说法, 正确的是:
A. Python 中的字符串之间够能相加.
B. Python 中的字符串可以和整数相加.
C. Python 中的整数可以和浮点数相加.
D. Python 中的整数可以和布尔值相加.
答案:A,C,D
(2) [单选] 以下关于类型的说法, 正确的是:
A. Python 中既有字符串类型, 也有字符类型.
B. Python 中既有 float, 也有 double.
C. Python 中既有 int, 也有 long
D. Python 中的整数表示范围无上限.
答案:D
python
里面只有字符串类型,没有字符类型。
python
中只有float
python
里面只有int
(3) [单选] 以下 Python 代码, 合法的是
A. int a = 10
B. a = 10;
C. a = true
D. a = 'aaa' + 10
答案:B
A里面指定类型写法是:a:int = 10
B里面的;
通常情况下是不加的,但是加了也没错。如果多个语句写一行就要加 ;
了,但是这种写法不推荐。
C里面应该是True
D里面也是错误的