三、Python编程基础03
目录
- 一、debug 调试的使用
- 1. 打断点
- 2. 右键 Debug 运行代码
- 3. 单步执行代码,查看过程
- 二、字符串
- 1、定义与下标引用
- 2、切片
- 3、查找
- 4、去除空白字符
- 5、转换大小写与拆分
- 6、其他方法-替换、连接、是否为纯数字
- 7、登录案例优化
- 三、列表 list
- 1、列表基础操作
- 2、案例: 登录
- 三、字典
- 1、字典基础操作
- 2、遍历
- 3、登录案例优化
- 五、元组
一、debug 调试的使用
- debug 调试的作用是用来排查代码中的错误的.
- 我们学习 debug 的目的是 来查看代码的执行过程的,便于理解代码
1. 打断点
在 pycharm 中打断点只需要在代码和行号之间点击,出现的红色圆点,就是断点
再次点击红色圆点可以取消断点
在pycharm 中,如果第一行是注释,需要两个断点
断点的作用,是代码执行停留的地方
2. 右键 Debug 运行代码
3. 单步执行代码,查看过程
二、字符串
1、定义与下标引用
- 需求:
-
- str1 = ‘abcdefg’
-
- 打印字符串中第一个位置的字符
-
- 打印 字符串中最后一个位置的字符
-
- 打印字符串长度
-
- 分别使用 for 循环 和 while 循环对字符串进行遍历
-
# 1. str1 = 'abcdefg'
str1 = "abcdefg"
# 2. 打印字符串中第一个位置的字符
print(str1[0]) # a
2、切片
# 3. 打印 字符串中最后一个位置的字符
print(str1[-1]) # g
# 4. 打印字符串长度
print(len(str1)) # 7
print(str1[len(str1)-1]) # g 末尾元素的下标= 字符串长度 -1
# 5.1 使用 for循环对字符串进行遍历
print("*" * 80)
for i in str1:print(i)
# 5.2 使用 while循环对字符串进行遍历
print("*" * 80)
i = 0
while i < len(str1):print(str1[i])i += 1
2、切片
- 需求:
-
- 定义字符串str1 = ‘abcdefg’
-
- 使用切片打印输出’cde’
-
- 使用切片打印输出’abcde’
-
- 使用切片打印输出‘bcdefg’
-
- 使用切片打印输出‘abcdefg‘
-
- 使用切片打印输出’aceg‘
-
- 使用切片打印输出’abcdef‘
-
# 1. 定义字符串str1 = 'abcdefg'
str1 = "abcdefg"# 2. 使用切片打印输出’cde’
print(str1[2:5:1])
# 说明:步长默认为1(可以省略不写)
print(str1[2:5])# 3. 使用切片打印输出’abcde’
print(str1[0:5]) # 下标值从0开始计数(字符串起始位置)
print(str1[:5]) # 起始位置为0取值时,开始下标可以不写# 3. 使用切片打印输出‘bcdefg’
print(str1[1:7])
print(str1[1:]) # 取值范围到末尾时,结束下标可以不写# 4. 使用切片打印输出‘abcdefg‘
print(str1[:])# 5. 使用切片打印输出’aceg‘
print(str1[::2]) # 需要设置步长为2# 6. 使用切片打印输出’abcdef‘
print(str1[:-1])
3、查找
- 需求:
-
- 现有字符串数据: ‘itcast@qq.com’
-
- 请设计程序, 实现判断 “@” 符号是否存在于数据中
-
- 要求如果数据存在, 则输出数据所在位置; 否则打印输出"邮箱格式错误"
-
email = input("请输入你的邮箱:")
if email.find("@") != -1:print(email.find("@"))
# 语法:字符串.find(“要查找的内容”)
# 返回值:找到之后、返回对应数据的下标;找不到,返回-1
else:print("邮箱格式错误")
4、去除空白字符
- 需求:
-
- 现有字符串数据: ’ 15000000000 ’
-
- 请设计程序, 去除字符串两端的空白字符
-
str1 = input("请输入测试字符串内容:")
print("去除空格前:", str1)
print("去除空格后:", str1.strip())
5、转换大小写与拆分
- 字符串.lower() 将字符串转换为小写
- 字符串.upper() 将字符串转换为大写
- 字符串.split(sep) # 字符串 按照指定字符串 sep 进行切割
- sep, 指定按照什么字符串进行分隔,可以不写,默认是空白字符(空格, \n, \t)
- 返回: 返回的是列表,列表中的内容是分隔之后的字符串
需求:
-
- 数据常见操作: 增(insert)删(delete)改(update)查(select)
- 测试数据:
InSert into student values(001,“jack”, 18);
Delete from student where id=001;
UPDATE student set name=’rose’where id=001;
select * from student where id=001;
-
- 请设计程序实现:用户输入字符串为查询操作时,打印“显示查询结果”;
否则,提醒“当前进行的是是非查询操作,需要进行事务提交与回滚”。
- 请设计程序实现:用户输入字符串为查询操作时,打印“显示查询结果”;
# 接收一个字符串
# 测试数据:InSert into student values(001,“jack”, 18)
str1 = input("请输入sql语句:")# 取出空格之前的完整的单词(select/Select/SELECT) 、sql语句是不区分大小写str2 = str1.split()print(str2)print(str2[0])
#
# # 将输入的内容进行大小写转换str3 = str2[0].lower()str4 = str2[0].upper()# 判定输入的内容为select,打印“显示查询结果”
# if str2[0] == "select":
# if str3 == "select":
# if str4 == "SELECT":
if str1.split()[0].upper() == "SELECT":print("显示查询结果")
# 否则,提醒“当前进行的是非查询操作,需要进行事务提交与回滚”
else:print("当前进行的是非查询操作,需要进行事务提交与回滚")
6、其他方法-替换、连接、是否为纯数字
7、登录案例优化
- 需求:
用户名、密码、验证码去除两端空格
验证码统一转换为小写进行判断
增加手机号的判断验证 – 长度的判断、非数字的判断 - 要求:
1、手机号非数字,提示“手机号格式错误”
2、手机号长度问题,提示“请输入11位数字”
3、手机号正确后,判定密码及验证码
4、手机号为13488888888、密码为123456、验证码为‘admin123456’时,输出“登录成功”
5、否则输出”密码错误”或”验证码错误”
username = input("请输入用户民:").strip()
password = input("请输入密码:").strip()
verify_code = input("请输入验证码:").strip()# 判断手机号为11位数字
if username.isdigit() and len(username) == 11:# 登录成功if username == "13488888888" and password == "123456" and
verify_code.lower() == "admin123456":print("登录成功")else:print("登录失败,密码或验证码错误")
else:print("手机号非11位数字")
# 用户输入手机号、密码、验证码
# 对于输入的手机号、密码、验证码去除两端空格
username = input("请输入手机号:").strip()
password = input("请输入密码:").strip()
code = input("请输入验证码:").strip()# 手机号为空时,提示“手机号不能为空”
if username == '':print("手机号不能为空")# 密码为空时,提示“密码不能为空”
if len(password) == 0:print("密码不能为空")# 验证码为空时,提示“验证码不能为空”
if len(code) == 0:print("验证码不能为空")# 手机号错误时,提示“手机号格式错误,请输入11位数字”
if not username.isdigit() or len(username) != 11:print("手机号格式错误,请输入11位数字")# 密码错误时,提示“密码与账号不匹配”
if password != "123456":print("密码与账号不匹配")# 验证码统一转换为小写进行判断,验证码错误、提示“验证码与图片内容不一致”
if code.lower() != "8888":print("验证码与图片内容不一致")# 手机号为”13488888888”、密码为”123456”、验证码为”8888”时,输出“登录成功”
if username == "13488888888" and password == "123456" and code == "8888":print("登录成功")
三、列表 list
1, 列表 list, 可以用来存储一组(多个)数据
2, 列表中的多个数据之间使用 逗号隔开
3, 列表 表现形式为 []
4, 列表中可以存储任意类型的数据
1、列表基础操作
- 技术点:列表操作
- 定义:
- ① 列表名 = []
- ② 列表名 = [字符串, 整型, 浮点数, 布尔型, 列表[], 字典{}, 元组()]
- 操作:
- ① 新增数据:列表名.append(数据)
- ② 删除数据:列表名.pop(下标)
- ③ 修改数据:列表名[下标] = 新数据
- ④ 查询数据:列表名、列表名[下标]
list1 = []
list2 = [18, 176.6, True, "jack"]
print(list1, type(list1))
print(list2, type(list2))# 追加数据
list2.append("rose")
print(list2)# 删除数据
# 删除末尾数据
list2.pop(-1)
print(list2)# 删除第一个数据
list2.pop(0)
print(list2)# 删除指定下标的数据
list2.pop(1)
print(list2)# # 下标越界错误
# print("-" * 80)
# list2.pop(100)
# print(list2) # pop index out of range# 修改数据
list2[-1] = "rose"
print(list2)
2、案例: 登录
- 需求:
- 定义列表存储测试账号
- 遍历列表数据进行测试账号校验
- 当手机号为”13488888888”,输出“账号成功”;否则“账号错误”。
# 定义列表
list1 = ["13488888888", "aaaaaabbbbb", "1341234567", "", "13566666666"]# 遍历列表数据
for i in list1:print(i)if i == "13488888888":print("账号正确")else:print("账号错误")
三、字典
1、字典基础操作
1, 字典 dict, 是由键(key)值(value)对组成, 表现为{键: 值, 键: 值, … }
2, 字典的键值对之间使用逗号隔开,一个键值对表示一个数据
3, 字典的键一般为 字符串, 可以是数字
4, 字典的值 可以是任意类型
5, 在一个字典中, 键(key)是不能重复的
6, 字典中没有下标
# 定义字典
dict1 = {}
# 字典key是字符串类型数据,具有唯一性
dict2 = {"name": "jack","age": 18
}
print(dict1, type(dict1))
print(dict2, type(dict2))# 新增数据
# 语法:字典名称[“key键”] = 数据
dict2["high"] = 176.5
print(dict2)# 删除数据
# 删除存在key对应数据
dict2.pop("high")
print(dict2)# # 删除数据时key不存在
# print("-" * 80)
# dict2.pop("sex") # KeyError
# print(dict2)# 修改数据
dict2["age"] = 20
print(dict2)# 查询数据
# 使用key
print(dict2["age"])# 使用get方法
print(dict2.get("age"))# 思考:字典名["key"] 和 字典名.get("key")的区别?
2、遍历
- 遍历: 将容器中的数据逐个取出.
- 字典是由键值对组成的, 字典的遍历分为三种
-
- 遍历字典的键(key)
-
- 遍历字典的值(value)
-
- 遍历字典的(key)和值(value)
-
- 遍历字典的键(key)
for 变量 in 字典: # 变量就是字典的键pass
for 变量 in 字典.keys(): # 字典.keys() 可以获取字典中所有的键(key)pass
- 遍历字典的值(value) 使用最多
for 变量 in 字典.values(): # 字典.values() 可以获取字典中所有的值(value)pass
- 遍历字典的键(key)和值(value)
# 字典.items() 可以获取字典中所有的键值对,每个键值对组成元组
# 变量1 是键(key) 变量2 是值(value)
for 变量1, 变量2 in 字典.items():pass
# 定义字典
dict1 = {"name": "jack","age": 18,"data": ["rose", "jack", "tom"],"data2": {"sex": 1}
}# 遍历字典key
for key in dict1.keys():print(key)# 遍历字典value *****
print("-" * 80)
for value in dict1.values():print(value)# 遍历字典 key和value
print("-" * 80)
for key, value in dict1.items():print(f"key={key} value={value}")# 需求1:打印输出sex字段值
print("-" * 80)
print(dict1.get("data2").get("sex"))# 需求2:打印tom(data列表数据的最后一项)
print(dict1.get("data")[-1])
3、登录案例优化
需求:
- 1、定义字典存储测试数据,包含账号和密码
- 提示:
[{“username”: “13488888888”, “password”: “123456”},
{“username”: “”, “password”: “123456”}]
- 提示:
- 2、遍历数据进行测试账号和密码校验
- 3、当手机号为”13488888888”且密码为“123456”时,输出“登录成功”;否则“错误或密码错误”。
test_data = [{"username": "13488888888","password": "123456"},{"username": "","password": "123456"},{"username": "13488888888","password": ""},
]
for i in test_data:if i.get("username") == "13488888888" and i.get("password") == "123456":print("登录成功")else:print("账号或密码错误")
五、元组
# 定义元组
tuple1 = ("jack", 18, 176.5, {"age": 20}, [1, 2, 3])# 打印元组及元组类型
print(tuple1, type(tuple1))# 打印元组指定数据:通过下标获取
print(tuple1[2])# 使用元组交换两个变量的值
num1 = 100
num2 = 200
num2, num1 = num1, num2
print(num1)
print(num2)# 定义元组存储测试账号
print("-" * 80)
tuple2 = ("13488888888", "", "aaaaaabbbbb", "1341234567", "13612345678")# 遍历元组数据进行测试账号校验
for i in tuple2:# 当手机号为”13488888888”,输出“账号成功”;否则“账号错误”if i == "13488888888":print("账号正确")else:print("账号错误")