设置方式:
按1 + 空格 回车会自动延续条目,再次回车结束条目,tab键就会形成条目嵌套
如果回车结束不了 ctrl + / 会看到内容前面有 .的标记 把.删除 再次ctrl + / 回归编辑状态
就是按 - + 空格
一对反引号包含【在tab键上方 一定要使用英文输入法 ``】
设置方式:
工具栏 — 段落 — 代码块
快捷方式 三个反引号+回车
print(‘hello World’)
设置方式
在表格上右键就可以编辑表格
设置方式
Pycharm的偏好设置:
程序员写代码的时候,不被计算机识别,供程序员解读代码的文字注解
注释的方式有两种的:
解释器解释代码,让计算机在控制台输出相应的数据
代码的书写是 print(数据)
变量与数据类型
变量
Python程序中如何定义一个变量,方式有:
从程序角度解读定义格式:
先在内存中开辟一块空间,将数据存储在空间中, =是赋值运算符,CPU将数据存储的空间的地址赋值给了变量名, 当我们使用变量名的时候,CPU会拿到空间地址定位到内存位置,获取到该空间的数据
变量使用的时候的注意事项:
在使用之前 变量必须被定义出来 并且赋予初始值
类型就是类。根据数据的特征对数据进行归类, Python中的基本数据类型:
将所有的整数归类在一起,就是整型
将所有的小数归类在一起,统称为浮点型
对逻辑状态的结果进行归类,由于逻辑结构只有两种,所以布尔类型的数据只有两个,分别是True和False
对文本数据的归类描述,文本特点是不需要计算机计算其中公式内容,怎么写的怎么存储,怎么把数据标记成字符串类型的,就是在数据外层加对引号【单双引号都可以】
这个类型的数据就只有一个,就是None [空] — 什么都没有
定义一个数据不知道赋予什么值时,就可以赋值为None
描述学生的信息:姓名、年龄、性别、成绩
name = '王小二'
age = 21
gender = '不详'
score = 88.5
获取变量的类型,操作 type(数据/变量名)
Python是一门动态类型的语言【特点:变量的具体的类型是根据值来决定的】
根据数据的特征对数据进行归类,就形成了类,类只是抽象名词
对象:该类下具体存在的实体数据,称为对象
比如 整型 — 类 10 20 1 2 这些都是对象
在编写程序的时候,经常会遇到自己定义名字的场景,自己定义的名字就是标识符,定义名字是有规则的
变量名命名的硬性规则:
变量名的非硬性规则:
见名知意
运算符 描述
+ | 两个数据进行相加 |
---|---|
- | 两个数据进行相减 |
* | 两个数据进行相乘 |
/ | 两个数据相除 结果是浮点类型 |
// | 两个数相除,结果对商进行向下取整【整数类型的】 [shift+回车 单元格中换行] 向下取整:小于或者等于商且最接近于商的整数 |
% | 两个数相除之后的余数 |
** | 两数求幂数 x**y y是N的话,就是求的x的N次方,如果y是(1/N),表示对x开N次方,注意的是开方的结果是浮点型的 |
() | 提高表达式的优先级 |
算术运算符中 **优先级别是最高的 比正负逗号
布尔类型的数据与整数或者小数参与算术运算时,True被当做1,False被当做0
字符串类型的数据也可以使用算术运算符中的一些符号,比如+, *, %
+: 在字符串中完成的是字符串的拼接,形成一个新的字符串 【注意事项:只能字符串与字符串类型数据进行拼接】
*:将字符串对象乘以的一个正整数N,将字符串的内容重复N次,形成一个新的字符串
%:格式化字符串,已知一段文本的内容格式,但是内容中有不确定的数据需要填充,我们可以在字符串中使用%s,%d,%f在未知的位置进行占位, 然后对字符串进行%运算,在%后面填充数据,前面有几个占位符,就填充几个数据。【%s可以填充任意类型的数据,%d填充整型数据 ,%f填充的是一个浮点型数据】
%.nf 表示填充的数据要保留n位小数
%0nd 按照n位数来格式化数据,不足n位数 前面补0
运算符 概述
= 变量名 = 数据值 将等号右边的数据赋值给等号左边的变量名
+= | 先计算表达式的值,再对变量名进行复合运算符中的算术运算,进而将结果再次赋值给变量名 |
---|---|
x = 19 y = 3 x %= y + 5 计算流程 1. y+5得出结果8 2.将x%8计算出结果为3 3.将结果3赋值给x 用赋值运算符来表达的话 是 x = x % (y + 5) |
-=
*=
/=
//=
%=
**=
python3.8中新增赋值表达式
:=
作用是定义一个变量的同时,让变量再参与其他运算
结果是布尔类型的
运算符 描述
判断前者是否大于后者
= 判断前者是否大于或者等于后者
< 判断前者是否小于后者
<= 判断前者是否小于或者等于后者
== 判断两者是否相等
!= 判断前者是否不等于后者
逻辑运算符
查看两个表达式的逻辑结果的
运算符 描述
and 逻辑与,连接的表达式之间是并且的关系,也就是需要两个表达式同时成立,结果才是成立的,有一句总结是 一假则全假
False and False = False
False and True = False
True and False = False
True and True = True
根据总结,逻辑与有短路原则:左边表达式为假,右边表达式不参与运算
这个短路只针对与and有效,后面有其他的逻辑表达式还是会执行的
or 逻辑或,连接的表达式之间是或者的关系,也就是其中一个表达式成立,结果就是成立的,有一句总结是 一真则全真
False or False = False
False or True = True
True or False = True
True or True = True
根据总结,逻辑或有短路原则:左边表达式为真,右边表达式不参与运算
这个短路是真短路,后面所有的表达式都不会执行了
not 逻辑非,对逻辑结果取反的,真变假,假变真
not False = True
not True = False
优先级别比and和or高
算术运算符 高于 比较运算符 高于 逻辑运算符 高于赋值运算符
针对于容器型数据的,判断一个数据是否为容器中的内部元素
运算符 描述
in 数据 in 容器型数据 把数据当做一个整体 检查是否在容器型数据中
not in 数据 not in 容器型数据 把数据当做一个整体 检查是否不在容器型数据中
简单介绍一下容器型数据
字符串(str): 元素是字符, 空字符串 ‘’
**列表(list):**存储多个数据的一个有序容器,元素之间是用逗号分开的 [19, 27, 33, 51, 68], 空列表 []
元组(tuple):类似于列表的,列表的元素可以发生变化,但是元组不可以,元素也是用逗号分开的 (19, 27, 33, 51, 47), 空元组()
**字典(dict):**存储具有关联性的数据 {key:value, key1:value1} 只有一对 {} 是字典
集合(set):无序序列, 存储的是元素是唯一的 {数据1, 数据2, 数据3}, 空集合是 set()
判断两个数据的在内存中的地址是否是一样的, id(数据)获取数据的地址
运算符 描述
is 判断两个数据的地址是否一致
is not 判断两个数据的地址是否不一致
针对于二进制数据来做运算的
二进制的数据是有三种形态的,分别是原码、反码、补码
计算机运算的时候是以二进制的补码形态进行运算的,我们之前讲的把数据转换成二进制的格式获取的是二进制原码的形态【二进制数据所表达的十进制数据的话,也是需要通过原码来查看的】
对于正数来说:原码、反码、补码格式都是一样的
针对于负数来说,原码、反码、补码的形态是不一样的
- 原码: 是在正数原码的基础上,将最高位置为1 【最高位是一个符号位 0表示正数 1表示负数】
- 反码: 在负数原码的基础上,除了最高位,其余位按位取反,就是0变1, 1变0
- 补码: 在负数反码的基础上加1
数据存储的时候,开辟的存储单位是字节,一个字节是8位,特殊点:【Python中的整数可以是任意大的数据】
Java 整数类型 byte【开辟数据就占1个字节 8位】 int【4个字节】 long【8个字节】
1个字节来说 看一下数字的范围
0000 0000 数据是有正负之分 最高位表示的是符号位
正数的最大值 0111 1111 【127】
0111 1110
0111 1101
...
0000 0000 【0】
1111 1111 【-127】
1000 0000 【-0】 就把规定成了负数的最小的 -128
一个字节的数据的范围是 【-128, 127】 总共256个数据
0111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111
2**63 - 1
所以将位运算符的时候 就以1个字节8位为例给大家演示:
78 = 64 + 8 + 4 + 2
原码0b0100 1110
反码0b0100 1110
补码0b0100 1110
-78
原码0b1100 1110
反码0b1011 0001
补码0b1011 0010
-5 + 2 = -3
原码:
0000 0010
1000 0101
---------
1000 0111 ----> -7 [错误]
反码
0000 0010
1111 1010
---------
1111 1100 【反码】 ---> 1000 0011 (-3)
-3 + 5 = 2 1000 0011
0000 0101
1111 1100
---------
1【溢出 舍去】 0000 0001 -----> 1 【错误】
补码
0000 0101
1111 1101
---------
1【溢出舍去】 0000 0010 ----> 2
-5 + 2
0000 0010
1111 1011
---------
1111 1101【补码】----> 1111 1100【反码】 ----> 1000 0011【原码】 -3
12 + (-8)
1000 1000 --- -8的原码
1111 0111 --- -8的反码
1111 1000 --- -8的补码
0000 1100 --- 12的补码
----------
1【溢出】 0000 0100 ----> 4
-11 + 7
1000 1011【原码】 ----> 1111 0100【反码】 ----> 1111 0101【补码】
补码计算
1111 0101
0000 0111
---------
1111 1100【负数的补码与原码不同】----> 1111 1011【反码】----> 1000 0100【原码】得 -4
运算符 描述
& 按位与,相同位置的数据有一个为0,该位置的结果为0
6&7
0000 0110
0000 0111
0000 0110 【6】
| 按位或, 相同位置的数据有一个为1,该位置结果为1
6|7
0000 0110
0000 0111
0000 0111 【7】
^ 按位异或, 同一位置的数据相同 该位置为0,数据不同该位置为1
6 ^ 7
0000 0110
0000 0111
0000 0001 【1】
1 ^ 7 【可以写成 6 ^ 7 ^ 7】
0000 0001
0000 0111
0000 0110 【6】
结论:一个数与相同的数异或两次 结果是其本身
~ 按位取反,该位置上的数据0变1, 1变0 【包含符号位】
~7
0000 0111
结果为 1111 1000 【补码】 —> 1111 0111 【反码】 -----> 1000 1000 【原码】 结果是 -8
>> 按位右移,将二进制数据向右移动指定位数,左边空出,正数补0,负数补1
48 >> 1
0011 0000 ------> 0001 1000 【24】
48 >> 2
0011 0000 ------> 0000 1100 【12】
48 >> 3
0011 0000 -------> 0000 0110 【6】
结论:结果为 数据 // (2 ** 移动位数)
-48 >> 1 【原码:1011 0000 反码:1100 1111 补码:1101 0000】
1101 0000 ------> 1110 1000 【补码 —> 反码:1110 0111 —> 原码:1001 1000】 -24
<< 按位左移,将二进制数据向左移动指定位数,右边空出补0
3 << 1
0000 0011 -----> 0000 0110 【6】
3 << 2
0000 0011 -----> 0000 1100 【12】
结论:结果为 数据 * (2 ** 移动位数)
假设位数就是8位 3 << 6
0000 0011 -----> 1100 0000 【补码 —> 反码:1011 1111 —> 原码: 1100 0000】 结果为 -64
3 << 7
0000 0011 ----> 1000 0000 【补码 —> 反码: 1000 0000 ----> 原码:1000 0000】 结果就是-128
按位异或设计到一个面试题 【交换两个变量的值】
‘’’
a = 10
b = 20
通过一系列操作 让a持有20 b持有10
‘’’
- 借助第三方变量 【其他编程语言中】
c = a # 先保存a的原有数据
a = b # 将a的值修改为b的数据 a = 20
b = c # 将b的值修改为a原有的数据 b = 10- 不借助第三方变量 去交换 【肯定会修改一方 因为不能让数据丢失 所以我们修改一方的时候 应该让这一方持有两者的数据】
2.1 按位异或
a = a ^ b # a = 10 ^ 20
b = a ^ b # b = 10 ^ 20 ^ 20 = 10
a = a ^ b # a = 10 ^ 20 ^ 10 = 20
2.2 距离差与距离和
a = a + b # a = 10 + 20
b = a - b # b = 10 + 20 - 20 = 10
a = a - b # a = 10 + 20 - 10 = 20
3. Python特有的交换方式
a, b = b, a # a, b = 20, 10
在控制台输入数据,将数据传递到程序中,与print是一个相反的过程
操作:变量名 = input(提示语)
在控制台根据提示语输入对应的信息,回车结束输入,把数据传递到程序中赋值给变量名
注意事项:不管输入的是什么格式的数据,传递到程序中都是字符串类型的
- 对浮点数取整数部分
- 将字符串格式的整数数据转化为整数类型
要求:字符串中数据的格式是要满足十进制数据整数要求 【不满足就会报错】
如果字符串的内容格式是其他进制的 要转换为十进制 该如何操作????
不满足十进制格式会报错的原因是因为功能内部是按照十进制数据集在解析数据,相关转换其他进制的数据的,需要设置一下解析数据时的进制方式即可, 修改操作 int(‘数据’, base=进制数)
就是将字符串格式的数据转换为小数 【要求:字符串的内容必须得满足数学中正常数的要求】
可以把任意类型的数据转化为字符串类型,结果就是在原数据的外层加一个引号的衣服
str(10) ----> ‘10’
str([12, 34, 56]) -----> ‘[12, 34, 56]’
可以任意类型的数据转化为布尔类型,但是不同的数据有不同的转换规则:
- 对于整型和浮点型数据来说,规则是 非0即为True
- 对于容器型数据来说,规则是 非空容器即为True
空容器:数据对象是存在的,但是里面没有元素, 比如 ‘’, [], (), {}, set()- 空对象None就是False
空对象和空容器不是一个意思, None 【连个对象都没有】, 空容器是有对象 但是是个空壳子
这些规则长被应用在逻辑中将非布尔类型的数据做隐式转换
隐式转换:把数据当做True或者False 参与逻辑运算 但是数据本身没有发生变化
总结一下逻辑与和逻辑或的运算规则:
逻辑与【一假则全假 左边为假 右边不参与运算】:
1. 左边表达式不成立,结果就是左边**表达式的值**
逻辑或【一真则全真 左边成立 右边不参与运算】:
1. 左边表达式成立, 结果就是左边**表达式的值**
把其他进制的数据转化为二进制
操作 bin(其他进制的数据)
把其他进制的数据转化为八进制
操作 oct(其他进制的数据)
把其他进制的数据转化为十六进制
操作 hex(其他进制的数据)
按照编码标准获取字符对应的十进制数据
操作 ord(字符)
按照编码标准获取十进制数据对应的字符
操作 chr(数据)
执行流程从上到下逐行解释执行每行代码,但是顺序语句不能满足所有的场景,因此出现了分支语句和循环语句
分支的情况是根据不同的需求,出现不同的操作行为。
Python提供处理分支的机制是 if语句, 在python3.10的时候提供了另一种分支结构 match-case
通过三个关键字来完成分支操作的, 三个关键字分别是if、elif、 else, 通过这三个关键字形成了三种不同的分支结构
结构语法:
if 条件判断:
满足条件执行的操作
在Python中,代码块是由: + 缩进形成的, 平级的代码缩进是一样的,必须得是纵向齐平
缩进的语法要求是及其严格的
缩进按照编码规范是4个空格, 可以设置编辑器的tab键缩进,让其代表4个空格
设置方式:File | Settings | Editor | Code Style | Python
语法结构
if 条件判断:
满足条件执行的操作
else:
不满足条件执行的操作
语法结构
if 条件判断:
满足条件判断执行的操作
elif 条件判断1:
不满足条件判断 但是满足条件判断1执行的操作
elif 条件判断2:
不满足条件判断 也不满足条件判断1, 但是满足条件判断2执行的操作
…
else:
以上条件都不满足执行的操作
else 可以省略
elif — else if
如果和否则之间只会执行1个
在满足某种需求的情况下,又对需求分情况
需求:百分制成绩,录入一个成绩 输出这个成绩是否及格