文章目录
今日习题
python
复制代码
1.如何实现多版本Python解释器共存
2.如何修改默认Python解释器版本
3.什么是变量,什么是常量。各有什么特点。
4.变量的三大特性有哪些,如何查看
5.八大基本数据类型有哪些各有什么特点
昨日内容回顾
python
复制代码
# 【零】多版本Python解释器共存
# 电脑上面安装了多个版本的 Python 解释器
# 想要使用特定版本的解释器的时候 python
# 解决方案:复制原本的 Python 执行文件 ---> 改革名字
# 如何确定当前系统默认的Python解释器版本
# 看自己的系统环境变量中不同版本解释器的环境顺序
# 【零】Python知识补充
# 【1】PIP换源
# 我们使用的 Python解释器是国外的大佬写的,有很多大佬开发的第三方模块,模块库在国外,所以下载速度很慢,所以我们需要换源
# 于是各大名校和机构就在自己的场地内建立了一个公共的平台
# 全局换 : pip set global_index 源地址
# 局部换 : pip install 模块名 -i 源地址
# 【2】系统环境和虚拟环境
# 系统环境就是安装在我们电脑上面的解释器环境
# 虚拟环境是单独为某个项目创建的系统解析器的副本
# 为什么要使用虚拟环境
# 为了让不同项目之间的环境进行隔离
# 【3】如何创建虚拟环境
# (1)方案一:通过Python自带的虚拟环境工具 venv
# python310 -m venv 虚拟环境名称
# python38 -m venv 虚拟环境名称
# 激活虚拟环境:进入到创建的虚拟环境的文件加中 ---> scripts 文件加 ---> activate.bat
# 退出虚拟环境:在虚拟环境中打开cmd ---> 输入deactivate
# (2)方案二:借助第三方模块 virtualenv # pip install virtualenv
# 创建虚拟环境:virtualenv 虚拟环境名称 默认是根据计算机的默认解释器版本
# 创建不同解析器版本的虚拟环境 , 就要加上解析器版本
# virtualenv -p python310 虚拟环境名称
# 激活虚拟环境:进入到创建的虚拟环境的文件加中 ---> scripts 文件加 ---> activate.bat
# 退出虚拟环境:在虚拟环境中打开cmd ---> 输入deactivate
# (3)方案三:直接使用Pycharm
# 【零】Pycharm安装
# 【1】打开官网下载安装包
# 一路下一步 : 安装路径不建议选择C盘路径
# 【2】社区版和专业版
# 社区版 : 免费,功能少
# 专业版 : 收费,功能多
# 【一】注释
# 为什么要添加注释:为了解释代码的含义
# 注释语法
# 单行注释 : # + 注释内容
# 多行注释 : 三个单引号或者三个双引号包裹起来的内容
# 【二】变量
# 变量就是存储计算机运行过程中产生的动态变化的量
# 【1】变量命名规则:
# 可以用字母+数字+下划线任意组合
# 数字不能作为变量名的开头
# 变量名不能是关键字 (打出来带橙色的代码)
# 【2】变量的命名风格
# 驼峰体 :
# 大驼峰 每一个单词的首字母都大写
# 小驼峰 第一个单词的首字母小写 其他首字母大写
# 字母+下划线组合 :字母+数字+下划线任意组合
# 【3】变量的定义和调用
# 定义:变量名 = 变量值
# = : 赋值符号
# 调用:直接使用变量名即可找到对应的变量值
# 原理:开辟一块内容空间 , 在这块空间里存储变量值 , 然后用变量名指向这个变量值
# 【4】变量的三大特性
# 变量值 : 变量原本的值
# 直接打印变量名即可获取到变量值
# 变量内存空间地址 : 开辟内存空间存储变量值的位置
# 借助 id 去查看当前变量值所在的内存空间地址
# 变量值的类型 : 不同的类型
# 借助 type 去查看当前变量值的类型
# 【三】常量
# 常量其实是一种特殊的变量
# 常量就是在程序运行过程中不会轻易发生改变的量
# 在Python中常量定义后可以被改变,但是在其他语言常量是不允许修改的
# 【四】PEP8编码规范
# 对Python相关的代码进行了约束
# 大家大多人不遵循协议
【一】八大基本数据类型
python
复制代码
# 【一】学习变量的目的
# 为了在程序运行过程中,能够保存一些数据供后续的代码使用
# 【二】学习基本数据类型的目的
# 基本数据类型是Python中最基本的
# 也是最重要的数据类型
# 【三】八大基本数据类型
# 【1】数字类型
# 整数类型 int
# 浮点数类型 float
# 【2】字符串类型 str
# 【3】列表类型 list
# 【4】字典类型 dict
# 【5】元组类型 tuple
# 【6】布尔类型 bool
# 【7】集合类型 set
# 【一】数字类型
# 【1】整数类型 int
# 语法:变量名 = 整数值
age = 18
print(age, type(age)) # 18 <class 'int'>
# 主要功能:进行算数运算
# 【2】浮点数类型
# 语法:变量名 = 浮点数值(小数值)
salary = 100.23
print(salary, type(salary)) # 100.23 <class 'float'>
# 主要功能:为了更加精确的表示某个数据,可以进行算数运算
# 浮点数和整数可以运算但是精确度会发生变化
# print(3.11 + 1)
# 4.109999999999999
# 【二】字符串类型
# 用来表示一些常用的文本信息
# 名字 住址 ...
name = "dream"
print(name, type(name)) # dream <class 'str'>
# 语法:四种
# 一 单引号包裹的字符
# 二 双引号包裹的字符
# 三 三个双引号包裹的字符
# 四 三个单引号包裹的字符
# 【1】可以索引取值
# 字符串的每一个元素都有自己的索引下表
# 正向索引 : 从 0 开始 从左向右
# 反向索引 : 从 -1 开始 从右向左
# 字符串[索引下标]
# 【2】数学运算
# 字符串 + 字符串 = 字符串首尾拼接
# 字符串 * 数字 = 字符串重复出现数字次数
# 【3】字符串的格式化输出语法
# (1) %s 站位
# "my name is %s" % ("dream")
# %s 表示任意的文本类型 如果不是文本类型也可以被转换为文本
# %d 表示站位的是整数
# %f 表示站位的是浮点数
# %x 表示站位的是十六进制
# (2)format格式化输出
# "my name is {}".format("dream")
# 上面只能按照位置传递参数
# 可以按照关键字传递参数
# "my name is {name}".format(name="dream")
# (3) f" {name} "
# 在字符串的最前面 + f 在字符串的里面用 大括号站住位置 放变量名
# 【三】列表类型
# 当我们需要存储多个学生名字的时候,如果用字符串 字符串不好讲每一个名字取出来
# 列表里面可以存储多个相同类型的变量值或者不同类型也可以
# 语法:变量名 = [元素1, 元素2, 元素3, ...]
# 【1】索引取值
# 列表的每一个元素都有自己的索引下表
# 正向索引 : 从 0 开始 从左向右
# 反向索引 : 从 -1 开始 从右向左
# 列表[索引下标]
# 列表如果嵌套了很多层,只需要清楚地知道么一个元素的下表按下表不断取值即可
# 【四】字典类型
# 上面的列表 可以放多个值但是 这些值 没有标志
# 为每一个值增加上必要的说明
# 语法 : 在大括号{} 中以键值对的方式存储的变量名和变量值
# {"key":"value"}
# key : 一般是对 value的描述性信息 建议大家 键 都是用字符串类型或者是数字类型
# value 是对键的补充 真正的数据
# {"name":"dream","age":18}
# 字典可以索引取值吗?
num_list = [1, 2, 3]
print(num_list[0])
data = {
"name": "dream",
"age": 18
}
# 字典[值] 按照键去字典中取值 字典中如果没有这个件就会报错
# 字典.get(键) 按照键去字典中取值 字典中如果没有这个键 就会返回 None
# print(data[0])
info = {
'name': 'Dream',
'addr': {
'国家': '中国',
'info': [666, 999, {'编号': 466722, 'hobby': ['read', 'study', 'music']}]
}
}
print(f'''
my name is {info.get("name")}
my 国家 is {info.get("addr").get("国家")}
my luck_num is {info.get("addr").get("info")[0], info.get("addr").get("info")[1]}
''')
# 【五】布尔类型
# 布尔类型 只有两个值 True 和 False
# 就是用来表示逻辑的对与错的两个值
# 用于判断 / 循环 ...
# 语法 变量名 = True / False
# 在Python中为真 True
# 除了假的情况以外的其他情况都是真的
# 1.数字1
# 2.True
# 3.非空的字符串 ...
print(bool(1))
print(bool(True))
print(bool(" "))
# 在Python中为假 False
# 1.False
# 2.0
# 3.空的变量 (空的字符串 / 空的 列表 / 空的字典 ... )
print(bool(False))
print(bool(0))
print(bool(""))
print(bool([]))
print(bool({}))
# 字符串中有空格 也被算作是 真
print(bool(" ")) # True
# 【六】元组类型
num_list = [1, 2, 3]
print(num_list[0])
num_list[0] = 999
print(num_list)
# ● 元组(tuple)是一种不可变的序列类型,类似于列表,用于存储多个有序元素。
# ● 元组与列表的主要区别在于元组的元素不能被修改、删除或添加,是不可变的数据类型。
# ● 元组通常用于存储相关联的数据,保持数据的完整性。
# num_tuple = (1,2,3)
# num_tuple[0] = 999 # 'tuple' object does not support item assignment
# 字符串 如果后面加了一个 ,
name = "dream",
name_tuple = ("dream")
name_tuple = (1)
print(name, type(name)) # ('dream',) <class 'tuple'>
print(name_tuple, type(name_tuple)) # dream <class 'str'>
# 总结
# 当元组中只有一个元素的时候要加 ,
# 如果是字符串或者整数类型的时候加上 , 就变成了元组类型
# 元祖按照位置解包
name_age = ("dream", 18)
name, age = ("dream", 18)
print(name, age)
# 【七】集合类型
# 集合(set)是一种无序且不重复的数据类型
# 用于存储多个无序且不重复的元素。
# 语法:以单个元素的形式在大括号中存储数据
num_set = {1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1}
print(num_set, type(num_set)) # {1, 2, 3} <class 'set'>
dream_set = {"d", "r", "e", "a", "m"}
print(dream_set)
# 当集合中的类型是数字类型的时候顺序一般不会被打乱
# 但是如果集合中的类型是字符串 就会被打乱
# 集合里面不能放 列表 或者 元祖 和 字典
set_list = {True}
# 集合运算:并交叉补
# 并集:将两个集合中的元素都放到一个集合中
# 交集: 两个集合共有的元素放到一个集合中
# 差集: 两个集合中独有的元素放到一个集合中
# 补集: 两个集合中独有的元素放到一个集合中
# 【1】向集合中添加元素
print("--------")
name_set = {"dream", "opp"}
name_set.add("oppp")
# 【2】集合中删除元素
# 按照指定的值删除指定元素
name_set.remove("opp")
# 【3】集合运算
set_a = {1, 2, 3, 4, 5, 6}
set_b = {4, 5, 6, 7, 8, 9}
# (1)并集
print(set_a.union(set_b))
# (2)交集
print(set_a.intersection(set_b))
# (3)差集
print(set_a.difference(set_b))
print(name_set)
【二】程序与用户交互
python
复制代码
# 【一】什么是程序要与用户交互
# 就是人向代码中输入内容
# 代码运行结果输出内容
# 【二】为什么要交互
# 登陆某个网站的时候需要输入用户名和密码
# 代码如何知道你的用户名和密码正确与否 ---> 经过逻辑认证
# 程序向我们反馈登陆的结果
# 【三】如何交互
# 【1】用户输入内容
# input : 在 输入框内提示需要用户输入的信息
# username = input("username :>>>> ") # 1
# password = input("password :>>>> ") # 2
# 通过 input 语句输入的内容获取到的结果是字符串类型
'''
print(username, type(username)) # 1 <class 'str'>
print(password, type(password))
result = username + password # 1 + 2 = 3
print(result) # 12
'''
# 既然得到的事字符串的 1 ---> 转换成 数字类型的 1
# 数字类型 int 类型
# 只能转换符合整数类型的字符串
'''
username = int(username)
password = int(password)
result = username + password # 1 + 2 = 3
print(result)
'''
# 【2】输出
# 就是 print 语句
print("Hello World")
# 打印变量
name = "dream"
print(name)
# 有一个默认参数 end="\n" \n 表示换行
print("dre\nam")
print(1,end="*")
print(2)
print(3)
【三】基本运算符
python
复制代码
# 算数运算符
# 逻辑运算符
# 比较运算符
# 增量运算符
# ...
# 【一】算数运算符
# 进行算数运算的运算符
# + - * / % ** //
a = 10
b = 3
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a % b) # 取余数
print(a ** b) # 幂次方
print(a // b) # 取模
# 【二】比较运算符
# > >= < <= == !=
a = 10
b = 3
print(a > b)
print(a >= b)
print(a < b)
print(a <= b)
print(a == b)
print(a != b)
# 【三】赋值运算符
# = += -= *= /= %= //= **=
a = 10
b = 3
a += b
# a = a + b
print(a) # 13
a -= b
# a = a - b
print(a) # 10
a *= b
# a = a * b
print(a) # 30
a /= b # 30 / 10
print(a) # 10.0
a %= b
# a = a % b
# 10.0 % 3 = 1.0
print(a)
a //= b #
# a = a // b
# 1.0 // 3
print(a) # 0.0
# 【1】链式赋值
a = b = c = d = 99
# 【2】交叉赋值
a = 10
b = 3
print(a)
print(b)
a, b = b, a
print(a)
print(b)
# 【3】解压赋值
# 可以将列表 / 元组 / 集合 能够索引取值的类型中的每一个元素按照位置获取出来
num_list = [1, 2, 3]
a, b, c = num_list
# a,b,c = [1, 2, 3]
print(a)
print(b)
print(c)
# 列表中的元素个数不够前面的变量解压的时候就会报错
# a, b, c, d = num_list
# print(d)
# not enough values to unpack (expected 4, got 3)
# 如果列表中的元素多余位置变量的时候也会报错
# a, b = num_list
# print(a)
# print(b) # too many values to unpack (expected 2)
# 可以用下划线来存储不需要的变量值
# a, b, _ = num_list
# print(a)
# print(b)
# 【四】逻辑运算符
# 与或非
# 与 : 两者都必须 and
# 或 : 两者任一 or
# 非 : 取反 not
a = 10
b = -10
print(a > 0 and b < 0)
print(a > 0 and b > 0)
print(a > 0 or b < 0)
print(a > 0 or b > 0)
# a < 0 False not False ==> True
print(not a < 0)
# 连续多个and
print(10 > 0 and 5 > 0 and 3 < 0) # False
print(10 > 0 and 5 > 0 or 3 < 0) # True
print(10 > 0 or 5 > 0 or 3 < 0) # True
# 提高运算的优先级 对优先的部分加 ()
# 运算优先级 : not > and > or
print(3 > 4 and 4 > 3 or 1 == 3 and 'x' == 'x' or 3 > 3)
# 假 and 真 or 假 and 真 or 假
# 假 or 假 or 假
print(3 > 4 and (4 > 3 or 1 == 3) and ('x' == 'x' or 3 > 3))
# 假 and 真 or 假 and 真 or 假
# 假 and 真 and 真
# 假
# 【五】成员运算
# 判断某个成员在某个成员里面
# in / not in
num_list = [1, 2, 3]
print(1 in num_list)
print(6 in num_list)
print(6 not in num_list)
# 【六】身份运算
# 判断这这个值是否是另一个值
a = 1
b = "1"
print(a == b) # 比较值 # False
print(a != b) # True
print(a is b) # False
print(a is not b) # True
# 【== 和 is 的区别】
# == 比较的是值 两个值是否相等
# is 比较的是值 和 内存地址是否相等
name = "dream"
name_one = "dream"
print(id(name))
print(id(name_one))
print(name == name_one) # True
print(name is name_one) # True
【四】流程控制语句
【1】什么是流程控制语句
python
复制代码
# 就是程序在运行过程中控制流程的语句
# 程序到了 10:00 发邮件通知上班
# 17:30 发邮件通知下班
【2】流程控制的三种方式
python
复制代码
# 顺序结构 ----> 按照顺序执行代码
# 分支结构 ----> 有条件约束,达到了某个条件才会执行代码
# 循环结构 ----> 循环执行代码
【3】顺序结构
python
复制代码
# 程序按照顺序依次执行代码,一句接一句的执行
# 我们平常写的代码都是顺序结构
print("a")
print("b")
print("c")
【4】分支结构
python
复制代码
# 【1】分支结构式程序在运行过程中达到某一条件才会执行代码的结构
# 【2】单分支结构
# 程序在运行过程中,如果达到了某个条件,就会执行该条件下的代码
'''
score = 89
if score >= 90:
print(f"优秀")
'''
# 【3】双分支结构
# 程序在运行过程中有两个条件 要么达到条件一 执行条件一的代码
# 要么达到条件二 执行条件二的代码
'''
if 条件1:
...
else:
...
'''
'''
score = 60
if score >= 90:
print(f"优秀")
else:
print(f"还需努力")
'''
# 【3】多分支结构
# 程序在运行过程中有多个条件进行约束和判断
# 当程序执行遇到某一个条件就执行当前条件下的代码
'''
if 条件一:
条件1执行的代码
elif 条件二:
条件2执行的代码
elif 条件三:
条件3执行的代码
else:
上面所有条件均不符合的代码
'''
'''
age = 20
if 28 >= age >= 18:
if age == 20:
print(f"请注意节制")
print(f"当前已成年可以看爱情动作片")
elif 38 >= age >= 28:
print(f"当前已成熟可以看 日本 爱情动作片")
elif 48 >= age >= 38:
print(f"当前已成熟可以看 韩国 爱情动作片")
elif 58 >= age >= 48:
print(f"当前已成熟可以看 大陆 爱情动作片")
else:
print(f"身体不行就别看了!好好休息!")
'''
python
复制代码
# true_username = "dream"
# true_password = "521"
# 登录注册练习
# 让用户输入 用户名和密码
# 比对用户名和密码是否正确
# 正确打印登陆成功
# 失败就打印登陆失败 并且告诉用户是用户名失败了还是密码失败了
true_username = "dream"
true_password = 521
username = input("请输入用户名:")
password = input("请输入密码:")
# 理想状态下 用户只输入数字
password = int(password)
if username != true_username:
print(f"当前输入的用户名错误")
elif password != true_password:
print(f"当前输入的用户名错误")
elif username != true_username and password != true_password:
print(f"当前输入的用户名和密码错误")
else:
print(f"登陆成功")
【5】循环结构
python
复制代码
python
复制代码
# 循环结构:重复执行代码直至代码达到某个条件才会终止
# 循环结构 while
'''
while 终止条件:
代码
# 让 while 里面的代码一直执行 执行到 符合 终止条件 的时候自动终止循环
#
'''
'''
count = 0
while count < 5:
print(count)
count += 1
'''
# 【1】关键字 range
# int 转换符合数字类型字符串
# (1)生成一个 指定区间的数字列表
print(range(1, 5)) # range(1, 5)
print(list(range(1, 5))) # [1, 2, 3, 4]
print(tuple(range(1, 5))) # (1, 2, 3, 4)
print(set(range(1, 5))) # {1, 2, 3, 4}
# (2)重复执行代码 执行次数
'''
print("你好")
print("你好")
print("你好")
'''
# range(起始数字,结束数字)
# range 结束的数字是取不到 顾头不顾尾
for i in range(0, 3):
print(i)
print("你好")
# range 如果第一个位置的参数不写 默认就是 0
for i in range(3):
print(i)
print("你好")
# 【2】continue
# 搭配 while 循环使用
# 在while循环内部 如果当前条件满足的时候不需要执行跳过即可
count = 0
while count < 5:
count += 1
# 当count = 3的时候不打印3 其他的打印
# continue : 让当前while循环跳出本次循环
if count == 3:
print(f"已跳出本次循环 {count}")
continue
else:
print(count)
# 【3】break关键字
# 当程序循环执行达到某一条件的时候就想结束整个程序
count = 0
while count < 5:
count += 1
# 当count = 3的时候不打印3 其他的打印
# continue : 让当前while循环跳出本次循环
if count == 3:
print(f"已跳出本次循环 {count}")
continue
elif count == 4:
# 当count = 4的时候 结束整个程序
print(f"已结束循环 {count}")
break
else:
print(count)
# 【标志位】
count = 0
tag = True
while tag:
count += 1
# 当count = 3的时候不打印3 其他的打印
# continue : 让当前while循环跳出本次循环
if count == 3:
print(f"已跳出本次循环 {count}")
continue
elif count == 4:
# 当count = 4的时候 结束整个程序
print(f"已结束循环 {count}")
# break
tag = False
else:
print(count)
# 【死循环】
# while 的循环条件一直为真的时候就会一直循环执行
# while 内部的代码
# 在写代码的时候应该避免出现死循环
while True:
print(1)
【五】作业
python
复制代码
# 猜年龄
# 提前给定一个确认的年龄 18
# 让用户输入年龄 ---> 和真的年龄比较 如果大了就提示大了 如果小了 就提示小了
# 错误的时候让用户重复尝试 3 次
# 3次全部错误再结束程序
# 进阶
# 3次结束以后让用户选择是否再继续猜
# 继续猜再给他 3 次机会