9.20总结
1. 往期作业回顾
-
进制转换
十进制转二进制: 19 = 16 + 2 + 1 = 0b10011 31 = 16 + 8 + 4 + 2 + 1 = 0b11111 62 = 32 + 16 + 8 + 4 + 2 = 0b111110 54.75 54 = 32 + 16 + 4 + 2 = 0b110110 64 32 8 4 2 1 0.5 0.25 0.125... 2^1 2^0 2^-1 2^-2 0.75 = 0.5 + 0.25 = 0b.11 又如: 0.2 -----二进制 0.2 * 2 = 0.4 ---0 0.4 * 2 = 0.8 ---0 0.8 * 2 = 1.6 ---1 0.6 * 2 = 1.2 ---1 (无限循环) 小数存储的时候会有精度损失问题 所以,应当避免小数进行比较
2.二进制转十进制
二进制转十进制: 0b101101 = 1 + 0 + 4 + 8 + 0 + 32 = 45 0b101110 = 0 + 2 + 4 + 8 + 0 + 32 = 46 二进制转八进制: 0b101 101 101 = 0o555 0b111 001 101 = 0o715 0b110 011 001 ≈ 0o631 二进制转十六进制 0b110 1100 1101 = 0xecd 0b1001 1101 1011 = 0x9db
6.二进制数加法运算的基本特点是“逢二进一”,即0+0=0,0+1=1,1+0=1,1+1=0并进位。运用这一基本法则和十进制运算的类似规律,得出二进制数加法运算1001+101的结果为( c) A. `1001` B. `1010` C. `1110` D. `1101 # 此题两种解法,一种将两个二进制转为十进制数字,相加,再二进制,另一种则直接相加
2.python的基本语法知识
2.1 代码初尝试
Python中输出功能为print(输出的数据)
-
数据如果是数字,直接写
print(10)
-
数据如果是文本, 书写的时候需要加引号[单双引号都可以]输出,`print(‘hello world’)
-
新建项目:
2.2编码规范
2.2.1语句和缩进
语句: 完成逻辑的表达式称为语句
在编程语言中习惯语句结束的时候使用分号标记[;] 在Python中不建议写分号,建议一条语句独占一行
如果写代码的时候,一行中有多条语句,语句之间必须使用分号隔开
空格缩进:在Python中是体现代码块包含的意思 【有些代码需要满足一定的条件才能执行,是需要被包含在一个条件内】,不能随便乱增加空格缩进
2.2注释
程序员为了更好的解读代码,给代表添加的标注,这个标注是不被计算机当做程序识别的,或者是有些代码功能暂时不被启动,需要将代码进行注释
注释分为两种
- 单行注释, 格式是
#空格
- 多行注释,格式三对引号包含,可以是三对双引号,也可以是三对单引号【编码规范中推荐使用的是三对双引号】
2.3print的使用
1.可将其置于背景:
"""
项目名称: 02_print与注释.py
用户名: liuyanan
创建日期: 2023-9-20
flag标语:键盘敲烂 月薪过万!!!!
"""
2.功能名称:
# print的使用 按住ctrl键 点击功能名称
# print()
# print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
"""
1.value, ..., 代表的是print可以一次性输出多个数据,书写的时候,数据之间使用逗号隔开
2.sep=' ' 代表的是print一次性输出多个数据展示结果时,数据之间的分隔符默认为空格
也可以进行修改, 为了避免print将设定的分割符识别成输出的数据,设置分割符的时候格式为
print(数据1, 数据2, 数据3, sep=分隔符)
3.end='\n' 代表的是print输出内容的结束符,这个结束符默认是换行
一个知识点: 转义符\,可以将某些特定的符号转变其他的含义
比如符号n 加上\就变成换行符 \n
符号t \t代表的是tab键 称为制表符 【四个空格】
符号u 转义符会把u后面的内容当做unicode编码 想去获取其对应的文字
4e00 ===> 一
()
因为end默认是换行 所以每个print打印的结果都是独占一行的
也可以对end进行修改 修改格式类似于sep
print(数据1, 数据2, 数据3, sep=分隔符, end=结束符)
4.file=sys.stdout 代表的内容输出的目的地 默认是控制台上输出
5.flush 冲洗刷新的意思
"""
-注意: | - |
---|---|
1.(\u打上报错原因是,把它当成Unicode转义了,需要用转义符让其保持原意) | |
2.注释本质也是字符串,也是会报错的。 |
3.tab的距离显示问题:
tab表示四个空格,但显示有时不一样
print('hellow') # 普通 hellow
print('hel\tlow') # 中间加\t hel low
print('\thellow') # \t前面 hellow
print('hel low') # 中甲加tab hel low
print(' hellow') # 前面加tab hellow
print('hel low') # 中间加空格 hel low
这里虽然tab显示的距离不同,但显示的还是4space,
# 在python中\t表示制表符,window系统下通常是占4个字符长度。
# 之所以长度或者看着空的距离不一样是系统计算的时候按照4个字符一组,
# 制表符只会填充这一组,如果\t在的那组字符长度不能被4整除,\t的长度也会不一样。
# 这就看出来,同样可能使用了\t作为对齐,但是显示的长度不同
4.示例:
print(10) # 10
print('hello world') # hello world
print(10, 20, 30, 40) # 10 20 30 40
# 打印的时候 分隔符没有使用sep指定 会被识别成多个数据中的一个进行打印输出
print(10, 20, 30, 40, '+') # 10 20 30 40 +
# 想要展示内容使用+分割 必须使用sep指定
print(10, 20, 30, 40, sep='+') # 10+20+30+40
# 转义符
print('and') # and
print('a\nd')
"""
a
d
"""
print('heath') # heath
print('hea\th') # hea h #此处为一个tab间距,即四个空格
print('\u4e00') # 一 # 用unicode编码了
# 报错 报错的原因是 把sers当做了unicode编码 但是sers没有对应的文字
# print('\Users')
# 修改结束符
print(10,end='-----')
print(20) # 10-----20
5.演示把内容输出到文件中
# 演示把内容输出到文件中
"""
目的:要在一个文件中写内容
如果使用文件系统图形化界面的形式 向文件中写入内容
1. 按照路径找到文件
2. 打开文件
3. 进行书写
4. 保存关闭
"""
# 如何使用Python代码按照路径打开文件
# open这个操作
# 格式: open(文件路径, 操作模式, encoding=文件存储编码形式)
"""
文件路径:
可以是绝对路径,也可以是相对路径
绝对路径 从盘开始一直到具体的文件
C:\WorkContent\各班代课\JYPython2304\day03_Python入门须知与运算符\笔记\语法笔记.md
相对路径:参照物
当前所在的路径使用.来表示
..表示的是上一级路径
举例:
现在路径是C:\WorkContent\各班代课\JYPython2304\day03_Python入门须知与运算符\代码\Day03
有一个路径 为 ./demo.py 这个文件就在现在的路径下
有一个路劲为 ../demo.py 这个文件在代码文件夹下
有一个路径为 ../../demo.py 这个文件在 day03_Python入门须知与运算符 这个文件夹下
有一个路径为 ../../笔记/demo.py
先回到 day03_Python入门须知与运算符这个文件夹 再进入到文件夹下的笔记文件夹中 有一个demo.py
操作模式
w -- write 代表的是写
如果路径对应的文件不存在 会先创建文件 再写入
如果文件存在,会清空文件 再写入
a -- append 代表的是写
如果路径对应的文件不存在 会先创建文件 再写入
如果文件存在,不会清空文件 在原本的基础上追加写
encoding 文件的编码形式
"""
# open的操作就相当于是将Python程序与文件建立联系
print('hello file', file=open('./hello.txt', 'w', encoding='utf-8'))
print('hello file', file=open('./hello1.txt', 'a', encoding='utf-8'))
2.4变量与数据类型
2.4.1变量
变量名词的定义来源于数学的,和数学中方程式的变量是一样的,只不过在计算机中定义格式不一样,变量也不仅仅数字,还可以是其他格式的数据
从数学角度回忆方程式
# 从实用需求到理论
今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?
解:设鸡有x只, 兔子有y只
x + y = 35 # x = 35 - y # x = 35 - 12
2x + 4y = 94 # 2(35 - y) + 4y = 94 # y = 12
使用某个标记名标记数据,这个标记名称为变量名
变量,从名字来进行判定,它标记的数据是可变化的,比如上面方程式中只要题目的需求发生一些变化,x和y持有的数据就会发生变化
在Python中定义变量的格式 变量名 = 数据值
, 这里的变量名起名的时候是要遵守一定的规则的,这个规则来源于标识符
变量定义的其他格式:
-
同时定义多个变量名赋予相同的值
[变量名1=变量名2=变量名3 = 数据值]
比如格式为
a = b = c = 10
-
同时定义多个变量,但是值不相同
[变量1, 变量名2, 变量名3 = 值1, 值2, 值3]
比如
a, b = 10, 20
a, a = 10, 20 print(a) # 20 覆盖了
注意: 变量在使用之前一定要定义并被初始化 【赋予初始值】
2.4.2标识符
计算机中自定义的名字称为标识符,比如自定义项目名称/python文件名称/变量名/函数名/类名等等
规则:
-
包含数字、字母、下划线其中的符号
字母:注意Python的编码是
UTF-8
,这个是国际编码标准,收录的世界语言在内的,这里的字母包含各国语言文字,换句话说各国语言文字统称为字母 【英文、汉字、韩文、日文…】虽然是各国语言都能进行定义,但是按照编写代码的规范建议还是使用英文字母
-
不能以数字开头
-
不能使用关键字与保留字
关键字:在Python中已经具有特殊含义的单词
print(keyword.kwlist) -- 用此查看关键字 # ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
保留字:在Python已经被使用定义的名字 【根据你的定义覆盖其原本的含义 所以不建议使用 初次定义提示出来的不要使用了】
不同内容的命名规范:
- 项目名称在满足标识符规则的基础上,定义的时候建议采用大驼峰命名格式【每个单词首字母大写,比如
PythonProject
】 - python文件名称/变量名/函数名在满足标识符规则的基础上,定义的时候英文字母都是小写的,单词和单词之间使用下划线隔开 【比如
max_value
】 - 尽量做到见名知意
2.4.3数据类型
计算机中能处理的数据不仅仅只有数字,还可以处理文本/图形/音频/视频/网页等等各种各样的数据,再做处理的时候按照数据的特征进行了归类
在Python中基本的数据类型有:
-
整型(
int
)整数类型,该类型的数据值全部都是整数。Python可以处理任意大小的整数[包括负整数],写法和数学的格式是一样的,比如
10
,-20
,100
等等 -
浮点型(
float
)小数类型,之所以叫浮点类型,是因为数字可以使用科学计数法表示,小数点是可以移动的,比如
1.23*10^9
====1.23e9
====12.3e8
-
布尔类型(
bool
)布尔值与布尔代数的表达形式是一样的,布尔值只有两个
True
和False
,这个值一般是来表达式逻辑表达式运行结果的 -
字符串类型(
str
)表达的是文本数据,是有单引号或者双引号包含起来的任意文本
比如
'hello world'
,我的年龄是18
注意
'0' 和 0 不是同一个内容
, 前者是一个字符串,是一个文本;后者是一个数字,可以算术运算提这个原因是在ASCII码中看到字符0对应的十进制数据是48,这个字符0是
'0'
, 不是数字0s = '0' num = 0 print (num + 20) # 20 数字和数字可以相加 print(s + num) # TypeError: can only concatenate str (not "int") to str 类型错误:只能将str(不是"int")连接到str #文本和数字不能相加
在内存中存储的时候
‘0’ ===> 48 ===> 11 0000
0 ====> 0000000000
```python
字符串是一个有序的不可变的容器型数据
字符串是有0个或者多个字符组合而成的,容器里面的数据元素就是字符
字符:长度为1的字符串就叫做字符
'a' 'b' ' ' '\n' '0'
当字符串是一对空引号称之为空字符串 【容器中什么符号都没有】
''
空字符串不等价于空值None
把容器理解成箱子
'abc' 箱子中有数据 a 数据b 数据c
'' 一个空箱子
None 就是连箱子都没有
- 空类型(
NoneType
)
有一个值就是None
,这个表示的是空值 【可以理解成空 什么都没有】
不能理解成0 【0还是有意义的数字】
获取数据的类型方式 type(数据)
Python属于动态类型的语言,变量的类型是由值来决定的,变量可以赋予任意类型的值
还有一种语言是静态类型的,特点是定义变量的时候必须指明变量的类型,而且给变量赋值的时候只能赋予指明类型的值,比如`Java
int age = 10;
age = 18;
s = ''
print(s) # 什么也没有
2.4.4类型转换
在有些场景下 需要把数据设置为相同类型的才能进行计算,这个就需要类型转换
-
把数据转化为整型,格式
int(数据)
场景:
- 对浮点数取整
# 1.取小数的整数部分 f = 7.897
value = int(f)
print(value) # 7
```
2. 把字符串转化为整型 【要求:字符串中的字符内容必须满足整数格式】
```python
# 键盘输入两个数 获取两个数的差
# 输入功能 input(提示器) ===>等价于网页上让你输入用户名和密码的操作
"""
注意:输入完成之后要把数据传递到程序中,需要变量接受数据值
结束输入的话,就是在内容后面加回车
"""
num11 = input('请输入一个整数:')
num12 = input('请输入第二个整数:')
print(num11 - num12)
print(type(num11),type(num12)) # <class 'str'> <class 'str'>
# TypeError: unsupported operand type(s) for -: 'str' and 'str'
# 字符串和字符串之间不能相减
# 为什么会出现字符串类型的数据?是因为input【不管输入什么格式,在程序中都是字符串类型的】
# 为了能够运算,需要把它们转变为整数类型
value1 = int(num11)
value2 = int(num12)
print(value1-value2)
# 注意:字符串在转换为整形时候,输入的数字一定本身就得是整形,如果输入的数字的浮点型等,会精度损失
例如:
value1 = int(15.999)
print(value1) # 15 精度损失
3. int 可以把其他进制转换为十进制
把其他进制转化为十进制【要求:解读数据的时候,数据是几进制的,就得按照几进制解读】
- 模式:
```python
-- 模式:
(这里什么进制) (这里按什么进制解)
int(其他进制的字符串数据,base=数据的进制模式)
```
- 例子:
```python
result = int('0b101010101', base=2)
print(result) # 341
result = int('0o765', base=8)
print(result) # 501
result =int('0xa5f', base=16)
print(result) # 2655
# 基于这一原理,可制作进制在转换器
oct_data = input('请输入一个八进制的数据:')
result = int(oct_data, base=8)
print('转化为十进制的结果是:', result)
# 把整型数据转化为二进制
# bin(整型数据)
value = bin(19) # 因为没有任何标记,所以是十进制数据
print(value) # 0b10011
value = bin('19') # 必须整型数据,不然报错
print(value)
TypeError: 'str' object cannot be interpreted as an integer
TypeError: 'str'对象不能被解释为整数
value = bin(0o713) # 八进制数据转二进制
print(value) # 0b111001011
value = bin(0xa97) # 十六进制转二进制
print(value) # 0b101010010111
```
- 整形转二进制
```python
# 把整型数据转化为二进制
# bin(整型数据)
value = bin(19) # 因为没有任何标记,所以是十进制数据
print(value) # 0b10011
value = bin('19') # 必须整型数据,不然报错
print(value)
TypeError: 'str' object cannot be interpreted as an integer
TypeError: 'str'对象不能被解释为整数
value = bin(0o713) # 八进制数据转二进制
print(value) # 0b111001011
value = bin(0xa97) # 十六进制转二进制
print(value) # 0b101010010111
```
- 把整型数据转为八进制
```python
# 把整型数据转为八进制
value = oct(18) # 什么标记也没有,为十进制
print(value) # 0o22
value = oct(0b110111011) # 二进制转八进制
print(value) # 0o673
value = oct(0xace4) # 十六进制转八进制
print(value) # 0o126344
```
- 把整形数转换为十六进制
```python
# 把整型数据转化为十六进制
print(hex(17)) 十六进制
print(hex(0b1101101010101110)) # 0xdaae 二进制转十六进制
print(hex(0o3562)) # 0x772 八进制转十六进制
```
- 注意:
###### python中与原本转换规则区别
###### 之前的规则是先转二进制,在转别的,python中是先转十进制,再转别的,程序中以十进制为介质,这是最大区别
-
把数据转化为浮点型, 格式
float(数据)
场景就是字符串格式的小数转换成浮点类型【要求: 字符串中的字符内容必须满足数字格式】
# 做一个计算器,两个任意数字的差
a1 = float(input('请输入一个数字:'))
a2 = float(input('请输入第二个数字:'))
print(a1 - a2) # 输入整数或者小数都行,输入整数也会自动加小数点;与int不同,int只能输入整数
-
把数据转化为布尔类型,格式
bool(数据)
可以把任意类型的数据转化为布尔类型,转换规则是
-
数字格式的数据,非0即为True
-
容器型数据,非空容器即为True
-
None空值为False
# 非0即为True print(bool(0), bool(-1), bool(35.9)) # False True True # 容器型数据,非空容器即为True print(bool(''), bool(' '), bool('a')) # False True True # None空值为False print(bool(None)) # False
这个规则要记住!!!! 因为后面的知识点中有逻辑判断,会使用到这个规则【把数据应用到逻辑中 结果为真还是假 应用的就是这个规则】
-
注:定义的时候,默认数据格式是十进制
value = 77
print(value) # 77
b = 0b1001 # 二进制
print(b) # 9 print打印时候自动转为十进制
o = 0o765 #八进制
print(o) # 501
x = 0off # 十六进制
print(x) # 255
2.4.5 编码查找
获取字符串对应的十进制数据{按照编码规则 UTF-8}
print(ord('a')) # 97 # ord 获取字符,进行查找
print(ord('A')) # 65
print(ord('一')) # 19968
print(hex(19968)) # 0x4e00 hex转成十六进制
获取编码规则获取十进制数据对应的字符 (与前者相反)
print(chr(48)) # 0
print(chr(19969)) # 丁
由此可写一套体系,将小写字母转换为大写:
'a' ---- 'A'
97 ------ 65
# 获取小写字母对应的十进制数据 减去 32 再将结果转为字符
ch = input('小写字母')
print(chr(ord(ch) - 32))
2.5运算符
分为一元运算符、二元运算符、三元运算符【Python中没有 其他语言条件语句?表达式1:表达式2
】
一元运算符是由一个数据参与运算,比如正负号 +78
-10
~19
[按位取反]
2.5.1算术运算符
加法 +
减法 -
乘法 *
除法
/ 结果是浮点类型的 除不尽 商会有小数
// 结果是整型的 对商进行向下取整
<=商且最接近于商的整数 称为向下取整
取余数
% A除以B除不尽 会余下数据 这个余下的数据就是余数
11除以3得3余2 这个2就是余数
11 % 3 = 2
求幂数
** 比如x**y,求x的y次方
y如果是正整数N 对x求幂数次方
y是1/N 小数格式 对x进行开方
x = 2
y = 3
x ** y = 2的3次方 = 8
x = 27
y = 1/3
x ** y = 27的三分之一次方
开方的时候结果是浮点型的 8**(1/2)
算术运算符的优先级别:
** > 负号 > *、/、//、% > 加减
提高表达式的优先级使用小括号()
包含
print(-2**2) # -4
print((-2)**2) # 4
错误集合
print(10)
IndentationError: unexpected indent
缩进错误 : 意外缩进
print('\Users')
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \UXXXXXXXX escape
# \u按照编码表去照后面的编码了没找到
0_num = 15
SyntaxError: invalid decimal literal
语法错误 无效的十进制文字
# 0不能打头,
print = 10
print(print)
TypeError: 'int' object is not callable # 保留字问题,会覆盖原本意思
类型错误:'int'对象不可调用
s = '0'
num = 0
print (num + 20) # 20 数字和数字可以相加
print(s + num)
# TypeError: can only concatenate str (not "int") to str
类型错误:只能将str(不是"int")连接到str #文本和数字不能相加
`python
print(-2**2) # -4
print((-2)**2) # 4
# 错误集合
```python
print(10)
IndentationError: unexpected indent
缩进错误 : 意外缩进
print('\Users')
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \UXXXXXXXX escape
# \u按照编码表去照后面的编码了没找到
0_num = 15
SyntaxError: invalid decimal literal
语法错误 无效的十进制文字
# 0不能打头,
print = 10
print(print)
TypeError: 'int' object is not callable # 保留字问题,会覆盖原本意思
类型错误:'int'对象不可调用
s = '0'
num = 0
print (num + 20) # 20 数字和数字可以相加
print(s + num)
# TypeError: can only concatenate str (not "int") to str
类型错误:只能将str(不是"int")连接到str #文本和数字不能相加