Python学习笔记
课程笔记参考B站视频: Python全栈开发教程。
第二站 七十二变
1. 二进制与字符编码
为了在计算机上存储英文字母等常见的符号,人们开发出ASCII码表。但是里面没有中文等其他国家的文字,于是下面给出字符编码演进的过程:
- GB2312在1980年推出,可以表示简体中文7445个字符。
- GBK在1995年推出,不仅可以表示简体中文,还可以表示繁体中文。
- GB18030在2000年推出,可以表示27484个字符,将少数民族的字符也纳入考量,并规定每个字符可以由1/2/4个字节组成。
- Unicode几乎包含了全世界的字符,规定所有字符都使用两个字节表示。可以参考Unicode汉字编码表。
- UTF-8规定英文用1个字节表示,中文用3个字节表示。
代码演示:
print(chr(0b0100111000000001)) #0b表示二进制
print(ord('丁')) #输出字符的十进制Unicode表示
- 运行结果:
丁
19969
2. Python中的标识符与保留字
保留字指的是一些单词被我赋予了特定的意义,这些单词在给任何对象起名字的时候都不能用。执行下面的代码可以查看所有的保留字:
import keyword
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']
#注:原来输出的只有一行。
标识符则是你给变量、函数、类、模块和其它对象所起的名字。一般有如下规则:
只能包含字母、数字、下划线_
不能以数字开头
不能是保留字
严格区分大小写
3. Python中的变量
Python中的变量本身存储的是对象的引用(标识),而这个对象则包含了三部分:
- 标识:表示对象所存储的内存地址,使用内置函数
id(obj)
来获取。- 类型:表示的是对象的数据类型,使用内置函数
type(obj)
来获取。- 值:表示对象所存储的具体数据,使用
print(obj)
可以将值进行打印输出。
并且当变量多次赋值之后,变量名会指向新的空间。(个人感觉:下面的代码示例中没有指向新的地址,是因为解释器的内存分配机制非常强大)。
演示代码:
name = "哈利路亚"
print("标识:\t",id(name))
print("类型:\t",type(name))
print("值:\t\t",name)
name = "德玛西亚"
print("标识:\t",id(name))
print("类型:\t",type(name))
print("值:\t\t",name)
- 运行结果:
标识: 1611584986064
类型: <class 'str'>
值: 哈利路亚
标识: 1611585140464
类型: <class 'str'>
值: 德玛西亚
4.Python中的数据类型
常见类型 | 代码表示 | 示例 |
---|---|---|
整数类型 | int | 98 |
浮点数类型 | float | 3.14159 |
布尔类型 | bool | True, False |
字符串类型 | str | ’人生苦短,我用Python’ |
本节主要介绍Python中的数据类型(参考上表),下面来依次进行介绍:
1. 整数类型
英文为integer,简写为int,可以表示正数、负数和零,下面是一些说明:
进制 | 基本数 | 表示形式 | 举例 |
---|---|---|---|
十进制 | 0,1,2,3,4,5,6,7,8,9 | 默认的进制 | 118 |
二进制 | 0,1 | 以0b开头 | 0b1110110 |
八进制 | 0,1,2,3,4,5,6,7,8 | 以0o开头 | 0o166 |
十六进制 | 0,1,2…,D,E,F | 以0x开头 | 0x76 |
下面是代码示例:
# 可以表示整数、负数、0
n1 = 90
n2 = -76
n3 = 0
print(n1, type(n1))
print(n2, type(n2))
print(n3, type(n3))
# 整数可以表示为二进制、十进制、八进制、十六进制
print('十进制:', 118)
print('二进制:', 0b1111)
print('八进制:', 0o12) # “欧”一般小写,否则会与零混淆
print('十六进制:', 0xff)
- 运行结果
90 <class 'int'>
-76 <class 'int'>
0 <class 'int'>
十进制: 118
二进制: 15
八进制: 10
十六进制: 255
可以注意到:
- Python中不需要自己定义数据的类型(自己定义反而会报错)。
print()
打印的两个元素之间会有一个空格。
2. 浮点类型
浮点数整数部分和小数部分组成,由符号位、阶码、尾数三部分构成,可以参考百度百科 “单精度浮点数”、“双精度浮点数”。然而,浮点数存储不精确性,使用浮点数进行计算时,可能会出现小数位数不确定的情况。
下面是代码示例:
# 浮点数定义演示
a = 3.14159
print(a, type(a))
# 浮点数的输出不精确
print(1.1 + 2.1)
print(1.1 + 2.2)
# 解决浮点数计算不精确的办法
from decimal import Decimal # 导入decimal
print(Decimal('1.1') + Decimal('2.2'))
- 运行结果
3.14159 <class 'float'>
3.2
3.3000000000000003
3.3
可以看到,Python中导入decimal模块可以解决浮点数计算不精确的问题。
3. 布尔类型
布尔类型用来表示真或假的值,True表示真(1),False表示假(0),布尔值也可以转化为整数进行计算。
下面是代码示例:
# 布尔类型展示
b1 = True
b2 = False
print(b1, type(b1))
print(b2, type(b2))
# 布尔类型可以转化成整数计算
print(b1 + 1)
print(b2 + 1)
- 运行结果
True <class 'bool'>
False <class 'bool'>
2
1
4. 字符串类型
字符串又被称为不可变的字符序列,可以使用单引号’’
、 双引号” ”
、三引号’’’ ’’’
或””” ”””
来定义。单引号和双引号定义的字符串必须在一行,三引号定义的字符串可以分布在连续的多行。
下面是代码示例:
str1 = '去码头整点薯条' # 单引号
str2 = "去码头整点薯条" # 双引号
str3 = '''去码头整点薯条''' # 三引号
str4 = '''去码头
整点薯条''' # 三引号可以换行
print(str1, type(str1))
print(str2, type(str2))
print(str3, type(str3))
print(str4, type(str4))
- 运行结果
去码头整点薯条 <class 'str'>
去码头整点薯条 <class 'str'>
去码头整点薯条 <class 'str'>
去码头
整点薯条 <class 'str'>
5. 数据类型转换
将不同数据类型的数据拼接在一起,需要进行数据类型转换。下面是代码示例:
name = 'Cheems'
age = 2022
print(type(name), type(age))
print('my name is', name, '. my age is', age,'.')
# print('my name is '+name+'. my age is'+age+'.') # 会报错
print('my name is '+name+'. my age is '+str(age)+'.') # 类型转换
- 运行结果
my name is Cheems . my age is 2022 .
my name is Cheems. my age is 2022.
注意到使用逗号会有多余的空格,而使用加号(称为连接符)就不会有多余的空格。
上图总结的Pyhton中的数据转换方式,具体为:
函数名 | 作用 | 注意事项 | 举例 |
---|---|---|---|
str() | 将其他数据类型转换成字符串 | 也可以直接用引号进行转换 | str(123) ‘123’ |
int() | 将其他数据类型转换成整数 | 1.文字类和小数类字符串,无法转化成整数 2.浮点数转化成整数会抹零取整 | int('1231) int(9.8) |
float() | 将其他数据类型转换成浮点数 | 1.文字类无法转成整数 2.整数转成浮点数,末尾为.0 | float(‘9.8’) float(9) |
下面是代码示例:
print('-----------------将其他数据类型转成str类型---')
a1 = 10
f1 = 19.8
b1 = True
print(type(a1), type(f1), type(b1))
print(str(a1), type(str(a1)))
print(str(f1), type(str(f1)))
print(str(b1), type(str(b1)))
print('-----------------将其他数据类型转成int类型---')
s1 = '128' # 整数字符串
s2 = '99.57' # 小数字符串
s3 = 'hello' # 普通字符串
print(type(s1), type(s2), type(s3), type(f1), type(b1))
print(int(s1), type(int(s1))) # 整数字符串可以转为int
# print(int(s2), type(int(s2))) # 会报错,小数字符串不能转为int
# print(int(s3), type(int(s3))) # 会报错,普通字符串不能转为int
print(int(f1), type(int(f1))) # 浮点数会自动去尾
print(int(b1), type(int(b1)))
print('-----------------将其他数据类型转成float类型---')
print(type(s1), type(s2), type(s3), type(a1), type(b1))
print(float(s1), type(float(s1)))
print(float(s2), type(float(s2)))
# print(float(s3), type(float(s3))) # 会报错,非数字串不能转换成浮点数
print(float(a1), type(float(a1))) # int型会加上.0
print(float(b1), type(float(b1))) # 布尔型也会加上.0
- 运行结果
-----------------将其他数据类型转成str类型---
<class 'int'> <class 'float'> <class 'bool'>
10 <class 'str'>
19.8 <class 'str'>
True <class 'str'>
-----------------将其他数据类型转成int类型---
<class 'str'> <class 'str'> <class 'str'> <class 'float'> <class 'bool'>
128 <class 'int'>
19 <class 'int'>
1 <class 'int'>
-----------------将其他数据类型转成float类型---
<class 'str'> <class 'str'> <class 'str'> <class 'int'> <class 'bool'>
128.0 <class 'float'>
99.57 <class 'float'>
10.0 <class 'float'>
1.0 <class 'float'>
5. Python中的注释
注释是在代码中对代码的功能进行解释说明的标注性文字,可以提高代码的可读性。注释的内容会被Python解释器忽略。通常包括以下三种注释类型:
注释类型 | 表示方法 |
---|---|
单行注释 | 以”#”开头,直到换行结束 |
多行注释 | 并没有单独的多行注释标记,将一对三引号之间的代码称为多行注释 |
中文编码声明注释 | 在文件第一、二行加上中文声明注释,用以指定源码文件的编码格式 |
下面是代码示例:
#coding:gbk
# 输出功能(单行注释)
print('hello')
# 多行注释
"""
嘿嘿,我是多行注释哦~
"""c
6. 本章作业
1. 输出杨老师出版的图书信息
示例:
关于命名的规范:变量名有多个单词使用下下划线;类名称首字母大写(驼峰式)。
本节使用变量+print()函数的方式输出,一些特殊符号从符号大全网址中直接复制:http://fhdq.net/
2. 输出《红楼梦》中的金陵十二钗前五位
示例:
下面是源码示例:
print('方法一:使用定义变量的方式输出'.center(25,'-'))
name1 = '林黛玉'
name2 = '薛宝钗'
name3 = '贾元春'
name4 = '贾探春'
name5 = '史湘云'
print('➊\t' + name1)
print('➋\t' + name2)
print('➌\t' + name3)
print('➍\t' + name4)
print('➎\t' + name5)
print('方法二:使用列表输出'.center(25,'-'))
lst_name = ['林黛玉', '薛宝钗', '贾元春', '贾探春', '史湘云']
lst_sig = ['➊', '➋', '➌', '➍', '➎']
for i in range(5):
print(lst_sig[i] + '\t' + lst_name[i])
print('方法三:使用列表+zip输出'.center(25,'-'))
for zip_sig,zip_name in zip(lst_sig,lst_name):
print(zip_sig + '\t' + zip_name)
print('方法四:使用字典输出'.center(25,'-'))
dic_name = {'➊':'林黛玉', '➋':'薛宝钗', '➌':'贾元春', '➍':'贾探春', '➎':'史湘云'}
for i in dic_name:
print(i + '\t' + dic_name[i])
- 运行结果:
-----方法一:使用定义变量的方式输出-----
➊ 林黛玉
➋ 薛宝钗
➌ 贾元春
➍ 贾探春
➎ 史湘云
--------方法二:使用列表输出-------
➊ 林黛玉
➋ 薛宝钗
➌ 贾元春
➍ 贾探春
➎ 史湘云
------方法三:使用列表+zip输出-----
➊ 林黛玉
➋ 薛宝钗
➌ 贾元春
➍ 贾探春
➎ 史湘云
--------方法四:使用字典输出-------
➊ 林黛玉
➋ 薛宝钗
➌ 贾元春
➍ 贾探春
➎ 史湘云
3. 输出图书音像勋章
示例:
本节的关键在与改变输出的颜色。关于一些格式说明和演示,可以参考博客园文章 “python_控制台输出带颜色的文字方法”
下面是代码示例:
print('\033[0;35m' + '图书音像输出'.center(20,'-') + '\033[m')
print('\033[0;35m' + '❀图书音像勋章\t✪专享活动' + '\033[m')
print('\033[0;35m' + '❤专属优惠\t\t☎优惠提醒' + '\033[m')
- 运行之后在控制台看到颜色的变化。
4. 输出你的身体指标
示例:
个人感觉这个项目的最大的难点在于如何避免用户的不规范输入,其他没了。下面是代码示例:
print('开始运行BMI计算器......')
while True:
height = input('请输入您的身高(cm):')
while not height.isnumeric():
height = input('输入错误!请输入您的身高(cm):')
weight = input('请输入您的体重(kg):')
while not weight.isnumeric():
weight = input('输入错误!请输入您的体重(kg):')
height = float(height)
weight = float(weight)
bmi = weight/((height/100)**2)
if bmi<18.5:
res = '消瘦'
elif 18.5<=bmi<25:
res = '正常'
elif 25<=bmi<28:
res = '超重'
elif 28<=bmi<32:
res = '肥胖'
elif bmi>=32:
res = '非常肥胖'
print('您的计算结果'.center(20,'-'))
print('身高:' , height, 'cm')
print('体重:' , weight, 'kg')
print('BMI指数:{:.2f} kg/m^2'.format(bmi))
print('您的体质为:' + res)
print(''.center(24,'-'))
con_judge = input('是否继续测算?y/n ')
while con_judge!='n' and con_judge!='N' and con_judge!='y' and con_judge!='Y':
con_judge = input('输入错误!是否继续测算?y/n ')
if con_judge=='n' or con_judge=='N':
break
else:
continue
- 运行结果:
开始运行BMI计算器......
请输入您的身高(cm):175.5
请输入您的体重(kg):79.5
-------您的计算结果-------
身高: 175.5 cm
体重: 79.5 kg
BMI指数:25.81 kg/m^2
您的体质为:超重
------------------------
是否继续测算?y/n n
感谢您的使用!