typora的下载安装
* 这是一款火热的编辑器 是需要收费的 但是也有免费的
文件的路径
* 相对路径;不需要指引,直接可以找到相关文件
* 绝对路径:需要指引 但是不会那么容易就能找到 得一个一个看
计算机的五大组成部分详解
* 控制器:控制计算机的各个硬件的工作
* 运算器:数学运算 逻辑运算 控制器+运算器=cpu(中央处理器)
* 存储器:用于存储数据
内存:依赖电的工丢失数工作存储数据的速度非常快,但是断电就会丢失。
外存:不依赖电的工作,但是存储数据比较慢 但是可以永久的保存数据。
* 输出设备:显示屏 打印机
* 输入设备:键盘 鼠标
计算机的本质
* 计算机的本质就是一个工具 将人类想的东西用代码的方式表达出来 也可以和人类的大脑相提并论
* 计算机只能读懂0和1
计算机的三大核心硬件
* cpu:计算机的最主要的物件 相当于人的大脑中枢神经 程序想运行起来必须要有cpu的参与
* 内存;需要配合cpu 相辅相成的工作 存取速度非常的快
* 硬盘:能够长久的保存数据
环境变量配置
在cmd窗口内查找资源的时候
1.先在当前路径查找
2.如果没有 则去系统环境变量中查找
3.还没有 则会提示报错
修改环境变量之后需要使用新的cmd窗口
多版本共存:
拷贝解释器中的python.exe文件
然后给拷贝之后的文件命名(独一无二)
运行解释器的三种方式
1.cmd直接编写运行:适用于较短 临时执行的代码
2.解释器命令运行:可以编写较长的代码 并且可以长久保存
3.利用IDE工具编写并运行:IDE开发者工具 自动提示 携带各种功能插件 编写代码效率更高更快
sublime对小白不友好
vscode对小白不友好
pycharm功能强大 对小白友好
python语法注释
* 注释就是对一段代码的解释说明 相当于学习英文的时候后面有中文解释一样
* 编写注释有三种方式
方式1:在前面加上 # 也可以快捷方式 Ctrl+? # 单行注释
方式2:回车左边的按键敲连续三下
'''
多行注释
'''
方式3:回车键左边的英文输入法下+shift 连续三下
"""
多行注释
"""
python常量和变量
变量与常量就是为了让程序具备记录人记录事务状态的能力
* 变量就是记录经常改变的事务状态 年龄 薪资
* 常量就是记录固定不经常改变的事务状态 圆周率
* 变量使用的语法结构与底层原理
name=‘kevin’
变量名 赋值符号 数据值
一旦看到赋值符号就一定先看符号的右侧
先是在内存空间中申请一块内存空间存储数据值 再给数据值绑定一个变量名 以后我们需要调用的时候就可以通过变量名访问到数据值
* 注意事项
1 同一个数据值可以绑定多个变量名
2 赋值符号的右边也可能是变量名 如果是就先找这个变量名绑定的数据值
3 一个变量名同一时间只能绑定一个数据值
name='kevin'
name1=name
name2=name1
* 变量名的命名规范
1.中文是可以用作变量名的 但是不建议使用 太low了 并且容易报错
2.汉语拼音也是可以作为变量名的 但是不建议使用 太low了
3.变量名只能出现字母、数字、下划线
4.数字不能开头
5.变量名尽量做到见名知意
6.变量名不能与关键字冲突
* 变量名的命名风格
1.下划线式 python推荐使用
变量名中单词很多 彼此使用下划线隔开
name_from_mysql_db1_userinfo = 'jason'
2.驼峰体式 JS推荐使用
大驼峰
NameFromMysqlDb1Userinfo = 'jason'
小驼峰
nameFromMysqlDb1Userinfo = 'jason'
在同一个编程语言中尽量固定使用一种 不要随意切换
常量的基本使用
* 在python中没有真正意义上的常量 所有的名字都是变量,将纯大写的变量名看成是常量。
* 2.在其他编程语言中存在真正意义上的常量,绑定了关系就不能再修改。
* 常量其他特性与变量一致
数据类型
* 数据类型在日常生活中的表现形式多种多样 在程序中也是如此
* 在后期我们也要针对不同的数据采用的数据类型来表示出该数据的价值
* 我们可以通过type(数据值)/type(变量名)查看数据值的数据类型
数据类型之整型int
就是整数 对应的是 年龄 年份 人数
age= 18 year = 2022
数据类型之浮点型float
就是小数 对应的是体重 身高
height=1.75 weight=64.8
数据类型之字符串str
* 就是文本类型的数据 用引号引起来的部分就是字符串
对应的有 姓名 地址 爱好
name=‘kevin’ addr=‘上海’ hobby=‘ball’
* 定义字符串有四种方式
name = 'kevin'
name1 = "kevin"
name2 = '''kevin'''
name3 = """kevin"""
* 为什么定义字符串需要那么多种方式
我们在字符串中编写文本也可能使用到引号 为了避免冲突 有了很多方式
* 如何区分三引号是字符串还是注释
关注左侧是否含有赋值符号和变量名 如果有就是字符串 没有就是注释
数据类型之列表list
* 列表的意思就是可以存储多个数据值的类型并且可以非常方便的取
应用在存储多个数据值 并且将来可能需要单独去其中一些
代码实现:name=['jason','tony','kevin']
* 列表的文字描述
中括号括起来 内部可以存放多个数据值 数据值与数据值之间逗号隔开 数据值可以是任意数据类型
l1 = [11, 11.11, 'jason',[11, 22]]
* 2.索引取值:起始数字是从0开始
l1[索引值]
数据类型之字典dict
* 能够非常清晰精确的存储和数据值的含义
代码实现
* 字典的文字描述
大括号括起来 内部可以存放多个数据 数据的组织形式是K:V键值对
键值对与键值对之间逗号隔开
K是对V的描述性性质的信息(解释说明) 一般都是字符串类型
V是真正的数据值 可以是任意数据类型
* 2.按K取值
字典只能按K取值 因为字典是无序的 没有索引的概念
info_dict['username']
基本数据类型布尔值bool
* 用来判断事物的对错,是否可行,主要用于流程控制中
* 只有两种状态:
True 对的 真的 可行的
False 错的 假的 不可行的
* python中所有的数据都有自带的布尔值
布尔值为False的数据有:0 None ‘’ {} []
布尔值为True的数据有: 除了上述的都是True
* 存储布尔值的变量名一般推荐使用is开头
is_delete = False
is_alive = True
基本数据类型元组tuple
- 元组也被称为不可变的列表 元组内索引绑定的内存地址不能修改
- 小括号括起来 内部存放多个数据值 数据值与数据值之间逗号隔开 数据值可以是任何数据类型
- 代码实现 t1 = (11,22,‘jason’)
- 元组与列表对比
- 元组内如果只有一个数据值
在以后使用可以存放多个数据值的数据类型时 如果里面只有一个数据值 那么建议加上逗号
基本数据类型 之集合set
- 集合只能用于去重和关系运算
- 集合内数据只能是不可变类型
- 大括号括起来 内部可以存放多个数据值 数据值与数据值之间逗号隔开 数据值不是K:V键值对
- 代码实现:s1={1, 2, 3, 4, 5, 6}
- 定义空集合与字典 {} 默认是字典 set 定义空集合需要加上关键字
与用户交互
获取用户输入 input
获取用户输入 username=input('请输入您的用户名>>>:')
1 先执行赋值符号的右边input 获取用户输入
2 将输入的数据绑给变量名username
3以后的程序中可以使用变量名反复调用用户数据
- input获取到的数据都会统一处理成字符串类型
输出内部信息 print
- 括号内可以放数据值也可以放变量名 并且支持多个 逗号隔开就可以
- print自带换行符 常见的换行符有 \r\n \n(斜杠与字母组合到一起可能产生特殊的含义)
- print也可以切换结束符 print(数据,end=‘默认是\n’)
格式化输出
- 提前定义好一些内容 将未来需要使用的时候可以局部修改 比如奖状 录取通知书 合同
- 代码实现: 在现实生活中大部分情况下使用下划线提示别人填写内容 但是在程序中需要使用占位符:%s %d
单个占位符
多个占位符
有几个占位符就需要几个数据值
不同占位符的区别
流程控制理论
流程控制>>>:控制事物的执行流程
事物执行流程总共可以分为三种
1.顺序结构:从上往下依次执行 我们之前所编写的代码都属于该结构
2.分支结构:事物的执行会根据条件的不同做出不同的执行策略
3.循环结构:事物的执行会根据某个条件出现重复
在代码的世界里 很多时候可能会出现三者混合
作为小白 在学习流程控制的时候 建议做到代码和图形的结合
流程控制必备知识
- python中使用代码的缩进表示代码的从属关系 从属关系: 缩进的子代码是否执行取决于上面没有缩进的
- 并不是所有的代码都可以拥有缩进的子代码 看到if关键字
- 如果有多行子代码属于同一个父代码 那么这些子代码需要保证相同的缩进量
- python中针对缩进量没有具体的要求 但是推荐使用四个空格(windows中tab键)
- 当某一行代码需要编写子代码的时候 那么这一行代码的结尾肯定需要冒号
- 相同缩进量的代码彼此之间平起平坐 按照顺序结构依次执行
分支结构
* 单if分支结构
if 条件:条件成立后才会执行的代码块
username = input('username>>>:')
if username == 'jason':
print('老师好')
* if...else..分支结构
if条件:
条件成立之后执行的子代码
else:
条件不成立执行的子代码
username = input('username>>>:')
if username == 'jason':
print('老师好')
else:
print('去你妹的')
* if...elif...else
if 条件1:
条件1成立之后执行的子代码
elif 条件2:
条件1不成立 条件2成立执行的子代码
elif 条件3:
条件1和2都不成立 条件3成立执行的子代码
else:
上述条件都不成立 执行的子代码
ps:中间的elif可以写多个、上述子代码永远只会走一个
score = input('请输入学生成绩>>>:')
score = int(score) 将字符串的整数转换成整型的整数
if score >= 90:
print('优秀')
elif score >= 80:
print('良好')
elif score >= 70:
print('一般')
elif score >= 60:
print('及格')
else:
print('挂科 交钱重修')
* if的嵌套使用
age = 28
height = 170
weight = 110
is_beautiful = True
is_success = False
username = 'tony'
if username == 'tony':
print('tony发现目标')
if age < 30 and height > 160 and weight < 150 and is_beautiful:
print('大妹纸 手机掏出来 让我加微信')
if is_success:
print('吃饭 看电影 天黑了...')
else:
print('去你妹的 流氓!!!')
else:
print('不好意思 认错人了')
else:
print('不是tony做不出来这件事')
循环结构
* 就是想要一些代码反复的执行
while 条件:
条件成立之后执行的子代码(循环体代码)
1.先判断条件是否成立
2.如果成立则执行循环体代码
3.循环体代码执行完毕后再次回到条件判断处 判断条件是否成立
4.如果成立 则继续执行循环体代码
5.按照上述规律依次执行 直到条件不成立才会结束循环体代码的执行
break 强行结束循环
while循环体代码一旦执行到break会直接结束循环
continue 直接跳到条件判断处
while循环体代码一旦执行到continue会结束本次循环 开始下一次循环
while 条件:
循环体代码
else:
循环体代码没有被强制结束的情况下 执行完毕就会执行else子代码.
while循环补充说明
* 死循环:真正的死循环一旦执行 cpu功耗会急速上升 直到系统采取紧急措施 最好不要让cpu长时间不断运算
* 嵌套及全局标志位
一个break只能结束他所在的那一层循环
有几个while的嵌套如果想一次性结束 就要写几个break
如果不想反复写break 可以使用全局标志位
流程控制之for循环
for循环能够做到的事情while都可以做到 只不过for循环在一些场景下使用更简单
- 主要场景为:循环获取多个数据内部数据值
- 实际案例:
for 循环语法结构
for 变量名 in 待遍历的数据
for循环体代码
for循环的特点
1 擅长遍历取值
2 不需要结束条件直接结束
for循环要遍历的数据类型有 字符串 列表 元组 集合
for循环语法结构中的变量名如何命名
1.见名知意
2.如果遍历出来的数据值没有具体的含义 可以使用常用的 i j k item v
for循环体代码中如果执行到break也会直接结束整个for循环
for循环体代码中如果执行到continue也会结束当前循环直接开始下一次循环
for 变量名 in 待遍历的数据:
for循环体代码
else:
for循环体代码没有被break强制结束的情况下运行完毕之后 运行
range方法
range可以简单的理解为是帮我们产生一个内部含有多个数字数据
数据类型内置方法理论
* 在我们之前所学的每一种数据类型本身都是含有一系列的操作方法,内置方法是其中最多的(自带的功能)
* 在python中数据类型调用内置方法的统一句式为:句点符
* 'name'. 字符串内置方法
绑定字符串的变量名.字符串内置方法
str.字符串内置方法
* 数据类型的内置方法比较多 如果想要掌握 不要光靠死记硬背 需要花时间运用到代码中 熟能生巧
整型内置方法与操作
* 类型转换(将其他数据类型转换成整型)
int(其他数据类型)
浮点型可以直接转 字符串必须满足内部是纯数字才可以
* 进制数转换
十进制转其他进制
print(bin(100)) 0b1100100
print(oct(100)) 0o144
print(hex(100)) 0x64
数字的开头如果是0b则为二进制 0o则为八进制 0x则为十六进制
其他进制转十进制
print(int(0b1100100))
print(int(0o144))
print(int(0x64))
print(int("0b1100100", 2))
print(int("0o144", 8))
print(int("0x64", 16))
* python自身对数字的敏感度较低(精确度低)
python这门语言其实真的一点都不厉害 主要是因为它背后有太多大佬
如果需要精准的计算需要借助于模块numpy.....
浮点型内置方法与操作
* 类型转换 float (其他数据类型)
字符串里面可以允许出现一个小数点 其他都必须是纯数字
字符串内置方法与操作
* 类型转换 str(其他数据类型)
可以转换任意数据类型(只需要在前后加引号即可)
* 必须要掌握的方法
1 索引取值(起始位置0开始 超出范围加引号即可)
2 切片操作
3 修改切片方向
4 统计字符串首尾指定的字符
5 移除字符串首尾指定的字符
6 切割字符串指定的字符
7 字符串格式化输出
* 字符串需要了解的方法
1大小写相关
包括获取用户输入的验证码 将用户输入的验证码和当初产生的验证码统一转换或小写在比对
2 判断字符串中是否纯数字
3 替换字符串中指定的内容
4 字符串的拼接
5统计指定字符串出现的次数
6 判断字符串的开头或者结尾
7其他方法补充
列表内置方法及操作
* 类型转换list(其他数据类型)
* 能够被for循环的数据类型都可以转成列表
print(list('hello'))
print(list({'name': 'kevin', 'pwd': 123}))
print(list((1, 2, 3, 4)))
print(list({1, 2, 3, 4, 5}))
* 需要掌握的方法
11 = [111, 222, 333, 444, 555, 666, 777, 888]
1 索引取值 正负数
2 切片操作
3 间隔数 方向
4 统计列表中数据值的个数
5数据值的修改
6列表添加数据值
方式1:尾部追加数据值
方式2:任意位置插入数据值
方式3:扩展列表 合并列表
* 删除列表数据
方式1:通用的删除关键字del
方式2:remove
方式3:pop
* 排序
ss = [54, 99, 55, 76, 12, 43, 76, 88, 99, 100, 33]
* 统计列表中某个数据值出现的次数
* 颠倒列表顺序
可变类型与不可变类型
字符串在调用内置方法之后并不会修改自己 而是产生了一个新的结果 如何查看调用方法有没有新的结果 可以在调用该方法的左侧添加变量名和赋值符号
res = s1.strip('$')
列表在调用内置方法之后修改就是自身 并没有产生一个新的结果
- 可变类型:值改变 内存地址不改变
- 不可变类型:值改变 内存地址肯定变