昨日内容回顾
# 【一】三元表达式
# 为真的结果 if 判断条件 else 为假的结果
# 三元表达式只适用于简短的逻辑运算
# ()[判断表达式] ---> 判断表达式 ---> 真或假 ---> 1 / 0 ---> ()[1/0]
# {}[判断表达式] ---> 判断表达式 ---> 真或假 ---> True / False ---> {}[1/0]
# 【二】数据类型的内置方法
# 【1】整数类型的内置方法
# 可以将符合整数格式的字符串强制转换为整数
# 整数就是运来进行数学运算的
# 进制转换
# bin 十进制转二进制
# oct 十进制转八进制
# hex 十进制转十六进制
# print(bin(999)) # 0b1111100111
# print(oct(999)) # 0o1747
# print(hex(999)) # 0x3e7
# int 进行进制转换 能将其他进制的结果转换为十进制
# 【2】浮点数类型的内置方法
# 强制类型转换
# 可以将符合浮点数格式的字符串强制转换为浮点数
# 补充一个方法:判断当前字符串是否符合整数类型格式
# isdigit() ---> True / False
# 【三】字符串类型
# 强制类型转换 ---> 将其他类型转换为字符串类型
# 【1】必须掌握的内置方法
# 字符串拼接 + / ''.join(可迭代类型) 可迭代类型可以for循环遍历的类型
# 索引取值 正向索引 / 负向索引 ---> 字符串可以被索引取值但是不能被索引修改值
# 切片 [起始索引:结束索引:步长] 默认步长是 1 ---> 顾头不顾尾 [::-1] 字符串翻转
# 计算长度 len()
# 成员运算 判断某个字符是否在某个字符串中 in / not in
# 去除特殊字符 只能去除首尾两端的特殊字符 .strip() 默认去除两段的空格或者换行 .lstrip() 去除左侧 rstrip() 去除右侧
# 切分字符串 按照指定字符切分字符传 切分的字符会消失 默认按照空格切 .split("|") 切完之后的结果是一个列表
# 遍历字符串 for while
'''
data_str = "dream"
count = 0
while count < len(data_str):
print(data_str[count])
count += 1
for i in data_str:
print(i)
'''
# 字符串重复 字符串 * 数字 让指定字符重复出现指定次数 并且 每一个字符首尾相连
# 大小写转换 将英文字符串转换为纯大写或纯小写的字符串 upper() lower()
# 首尾字符判断 判断某个字符是否以指定字符开头或结尾 .startswith() .endswith()
# 字符串格式化输出语法 %s '{}'.format() f"{}"
# 字符替换 用指定字符替换字符串中的某个字符 ''.replace(需要被替换的字符,替换进去的字符)
# 判断是否是整数格式的字符串 .isdigit()
# 【2】了解即可的内置方法
# find 查找指定字符在当前字符串中所在的索引位置 默认从左向右找 找到就返回索引找不到就返回 -1 只能照一次
# rfind 查找指定字符在当前字符串中所在的索引位置 默认从右向左找 找到就返回索引找不到就返回 -1 只能照一次
# index 查找指定字符在当前字符串中所在的索引位置 默认从左向右找 找到就返回索引找不到就报错
# rindex 查找指定字符在当前字符串中所在的索引位置 默认从右向左找 找到就返回索引找不到就报错
# count 统计指定字符在当前字符串中出现的次数
# center(基于原本字符串的长度,添加的字符) 居中显示 默认居中显示 并且 字符串的两侧会填充指定字符 如果是偶数 填充两侧相等 如果是奇数 默认以右侧优先填充
'''
data_str = "L"
print(data_str.center(len(data_str) + 2, '*')) # *L*
print(data_str.center(len(data_str) + 3, '*')) # *L**
print(data_str.center(len(data_str) + 3, '-')) # -L--
'''
# ljust(基于原本字符串的长度,添加的字符) 左对齐显示 默认左对齐显示 并且 字符串的右侧会填充指定字符
# print("d".ljust(1+2, '*')) # d**
# rjust(基于原本字符串的长度,添加的字符) 右对齐显示 默认右对齐显示 并且 字符串的左侧会填充指定字符
# print("d".rjust(1+2, '*')) # **d
# zfill(基于原本字符串的长度) 以0填充至指定长度
# capitalize 首字母大写 一句英文短句的第一个单词的开头首字母大写
# title 首字母大写 一句英文短句的每一个单词的开头首字母大写
# swapcase 大小写翻转 让英文单词里面的大写转小写 小写转大写
昨日作业
# 给定一个正确的年龄
# 让用户输入年龄
# 比对年龄
# 判断年龄是否正确并且给错误次数
# 分析流程
# 用户名和密码多次登录验证
# 【1】定义一个正确的用户名和密码、
# 【2】让用户输入用户名和密码
# 【3】比对用户输入的用户名和密码和原本的用户名和密码是否一致
# 【4】如果一致 提示登陆成功
# 【5】如果不一致 提示用户名或密码错误 并记录错误次数
# 【6】判断错误次数是否小于 3 次
# 【7】尝试第三次也失败的时候让用户选择是否继续输入
# 【8】如果继续输入就再给他三次 如果不继续 就结束整个流程
'''
# 【1】定义一个正确的用户名和密码
true_username_password = "dream|521"
# 【2】让用户输入用户名和密码
username = input("请输入用户名 :>>>> ").strip()
password = input("请输入密码(数字) :>>>> ").strip()
# 【3】比对用户输入的用户名和密码和原本的用户名和密码是否一致
# (1)对正确的用户名和密码进行切分
true_username, true_password = true_username_password.split("|")
# (2)判断当前密码是数字格式
if not password.isdigit():
print(f"当前密码 {password} 格式不正确!")
# (3)判断用户名是否存在
if username != true_username:
print(f"当前用户名 {username} 不存在!")
# (4)判断密码是否正确
elif int(password) != int(true_password):
print(f"当前密码 {password} 不正确!")
# (5)用户名和密码正确登录成功
else:
print(f"当前用户登录成功!")
# 【4】如果一致 提示登陆成功
# 【5】如果不一致 提示用户名或密码错误 并记录错误次数
# 【6】判断错误次数是否小于 3 次
# 【7】尝试第三次也失败的时候让用户选择是否继续输入
# 【8】如果继续输入就再给他三次 如果不继续 就结束整个流程
'''
# 【1】定义一个正确的用户名和密码
true_username_password = "dream|521"
try_count = 0
try_choices = 0
# 判断错误次数是否小于 3 次
while try_count < 4:
# 如果不一致 提示用户名或密码错误 并记录错误次数
try_count += 1
if try_count == 4 and try_choices == 3:
break
# 尝试第三次也失败的时候让用户选择是否继续输入
if try_count == 4:
is_continue = input("请选择是否继续尝试 (y/n) :>>>> ").strip()
# 如果继续输入就再 给他三次
if is_continue.lower() == "y":
try_count = 0
try_choices += 3
continue
# 如果不继续 就结束整个流程
else:
print(f"欢迎大爷下次来玩 ~~~ ")
break
# 【2】让用户输入用户名和密码
username = input("请输入用户名 :>>>> ").strip()
password = input("请输入密码(数字) :>>>> ").strip()
# 【3】比对用户输入的用户名和密码和原本的用户名和密码是否一致
# (1)对正确的用户名和密码进行切分
true_username, true_password = true_username_password.split("|")
# (2)判断当前密码是数字格式
if not password.isdigit():
print(f"当前密码 {password} 格式不正确!")
continue
# (3)判断用户名是否存在
if username != true_username:
print(f"当前用户名 {username} 不存在!")
continue
# (4)判断密码是否正确
elif int(password) != int(true_password):
print(f"当前密码 {password} 不正确!")
continue
# (5)用户名和密码正确登录成功
# 如果一致 提示登陆成功
print(f"当前用户登录成功!")
break
【一】列表的内置方法
# 【一】列表的语法
# 变量名 = [元素1, 元素2, 元素3, ...]
# 【二】优先掌握的内置方法
# 【1】强制类型转换
# 可以将可迭代类型转换为 列表类型
print(list("dream"))
print(list((1, 2, 3, 4)))
print(list({1, 2, 3}))
# 列表在强制转换字典的时候默认转换出来的是字典的键
print(list({"name": "dream", "age": 18}))
# 强调 : 列表转换成字符串以后再转换会列表是没办法转回列表的!
data_list = [1, 2, 3]
data_str = str(data_list)
print(data_str) # [1, 2, 3]
data_str_list = list(data_str)
print(data_str_list) # ['[', '1', ',', ' ', '2', ',', ' ', '3', ']']
# 【2】索引取值
# 正向索引 / 负向索引
# 【3】切片
# 顾头不顾尾 字符串一样
# 列表[起始索引:终止索引:步长]
num_list = [1, 2, 3, 4, 5]
print(num_list[0:3])
print(num_list[0:3:2])
print(num_list[::-1])
# 【4】计算长度 len
# 【5】成员运算 in / not in
# 判断某个元素是否在当前列表中
print(1 in num_list)
# 【6】向列表中添加元素
# (1)方式一 : 直接追加在结尾
num_list_one = [1, 2, 3]
num_list_one.append(4)
print(num_list_one) # [1, 2, 3, 4]
# (2)方式二:插入到指定的索引位置
num_list_one.insert(0, 999)
print(num_list_one) # [999, 1, 2, 3, 4]
# (3)方式三:直接将整个合并到一起 扩展列表
'''
num_list_two = [4, 5, 6]
for i in num_list_two:
num_list_one.append(i)
print(num_list_one)
'''
num_list_two = [4, 5, 6]
num_list_one.extend(num_list_two)
print(num_list_one) # [999, 1, 2, 3, 4, 4, 5, 6]
# 【7】删除列表中的元素
# (1)方式一:直接按照指定的值删除指定的元素
print(num_list_one.remove(999)) # None
print(num_list_one) # [1, 2, 3, 4, 4, 5, 6]
# (2)方式二:弹出指定元素
print(num_list_one) # [1, 2, 3, 4, 4, 5, 6]
# 默认弹出最后一个元素
print(num_list_one.pop()) # 6
# 默认弹出最后一个元素
print(num_list_one) # [1, 2, 3, 4, 4, 5]
# 指定弹出指定索引对应的元素
print(num_list_one.pop(0)) # 1
print(num_list_one) # [2, 3, 4, 4, 5]
# (3)方式三:删除指定索引对应的元素
del num_list_one[0] # 没有返回值
print(num_list_one) # [3, 4, 4, 5]
# (4)方式四:直接将列表清空
num_list_one.clear()
print(num_list_one) # []
# 【8】颠倒元素 reverse 颠倒列表中的元素 并且影响到的是原本的列表
num_list_one = [1, 2, 3, 4, 5, 6]
print(num_list_one[::-1]) # [6, 5, 4, 3, 2, 1]
print(num_list_one) # [1, 2, 3, 4, 5, 6]
print(num_list_one.reverse()) # None
print(num_list_one) # [6, 5, 4, 3, 2, 1]
# 【9】对列表中的元素进行排序 让列表中的元素排序 影响到的是原本的列表
num_list_three = [1, 4, 2, 8, 6, 4, 3, 9, 8]
# 默认的排序方式是正序
# print(num_list_three.sort()) # None
# print(num_list_three)
# 排序方式是倒序
# num_list_three.reverse()
# print(num_list_three)
# num_list_three.sort(reverse=True)
# print(num_list_three)
# 补充方法:sorted(列表)
print(num_list_three) # [1, 4, 2, 8, 6, 4, 3, 9, 8]
print(sorted(num_list_three)) # [1, 2, 3, 4, 4, 6, 8, 8, 9]
print(num_list_three) # [1, 4, 2, 8, 6, 4, 3, 9, 8]
# 总结:
# sort ---> 列表.sort() --> 没有返回值 影响到的是原来的列表
# sorted ---> sorted(列表) --> 有返回值 不会影响到的是原来的列表
# 【10】列表遍历循环
'''
# for 循环
for i in num_list_three:
print(i)
# while 循环
'''
【二】元组的内置方法
# 元组定义
# 变量民 = (元素1, 元素2, 元素3, ...)
# 强调:
# 一个元素的元组也要加 ,
num_tuple = (1)
print(num_tuple, type(num_tuple)) # 1 <class 'int'>
num_tuple = (1,)
print(num_tuple, type(num_tuple)) # 1 (1,) <class 'tuple'>
# 在定义字符串或者其他数据类型的时候不要闲着没事加一个 ,
name_str = "dream",
print(name_str, type(name_str)) # ('dream',) <class 'tuple'>
# 【1】类型强制转换
# 可以将可迭代类型转换为元祖
print(tuple("dream"))
print(tuple([1, 2, 4, 3]))
print(tuple({1, 2, 4, 3}))
print(tuple({"name": "dream", "age": 18}))
# print(tuple(1)) # 'int' object is not iterable
# 【2】索引取值
num_tuple = (1, 2, 3, 4, 5, 6)
print(num_tuple[0])
# 可以索引取值 但是不能索引修改值
# num_tuple[0]= 999 # 'tuple' object does not support item assignment
# 【3】可以切片
# [起始索引:结束索引:步长]
print(num_tuple[1:3])
print(num_tuple[0:3:2])
print(num_tuple[::-1])
# sort 是列表的排序方法 不是元组的
# num_tuple.sort()
# 【4】计算长度 len
# 【5】成员运算 in / not in
# 【6】遍历循环
# for 循环 + while 循环
# 【7】元组拼接
num_tuple_one = (1, 2, 3)
num_tuple_two = (4, 5, 6)
# 元组.__add__(元组) ---> 返回一个新的元组不会影响到原来的元组
print(num_tuple_one.__add__((1,)))
# 方式一 直接将两个元祖进行 __add__
num_tuple_one = num_tuple_one.__add__(num_tuple_two)
print(num_tuple_one) # (1, 2, 3, 4, 5, 6)
# 方式二 使用 + 进行拼接
print(num_tuple_one + num_tuple_two) # (1, 2, 3, 4, 5, 6, 4, 5, 6)
# 【8】元组可以重复
# 元祖 * 数字 ----> 将当前元祖内的所有元素 重复 指定次数并添加到新的列表中
print(num_tuple_two * 3)
# 【9】元组不支持索引修改元素和删除元祖中的元素
# num_tuple_two[0] = 999 # 'tuple' object does not support item assignment
# del num_tuple_two[0] # 'tuple' object doesn't support item deletion
# print(num_tuple_two)
【三】布尔的内置方法
# 布尔类型 真或假 True 或 False
# 强制类型转换 bool()
# 在Python中为假的情况
# 1.布尔值False
# 2.数字0
# 3.空的其他类型
print(bool(False))
print(bool(0))
print(bool(''))
print(bool([]))
print(bool(()))
print(bool({}))
# 其他情况均为真
# 1.布尔值 True
# 2.数字1
# 3.有值的其他类型 字符串即使是一个空格也算有值
print(bool(" "))
print(bool(1))
print(bool([1]))
【四】字典的内置方法
# 字典语法
# {"key":"value"} 以键值对存储数据
# ○ 字典中的数据是无序的,不能通过索引来访问,而是通过键来访问。
# ○ 字典中的键必须是不可变的,通常使用字符串、数字或布尔值作为键。
# ○ 字典中的值可以是任意类型,包括数字、字符串、列表、字典等
data_dict = {
"name": "dream",
"age": 18,
"gender": "male"
}
# 【1】取值
# (1)按照键中扩号取值 字典[key]
print(data_dict["name"])
# 字典中没有的键 如果[]取值就会报错 键不存在
# (2)字典.get(键) 取值
print(data_dict.get("name"))
# 字典.get(键) 取值 如果字典中没有当前键对应的值 返回的就是None
print(data_dict.get("hobby")) # None
# 取不到的时候指定默认值
print(data_dict.get("hobby", "music")) # music
# 【2】计算长度:计算当前字典中的键值对个数
print(len(data_dict)) # 3
# 【3】成员运算:判断某个键是否在字典中
# 某个键而不是某个值
print("name" in data_dict) # True
print("dream" in data_dict) # False
# 【4】增加
# 向字典中添加数据 因为字典是键值对数据 所以纪要添加键又要添加值
# 字典最大的特性 是 有则添加 无则修改
data_dict = {
"name": "dream",
"age": 18,
"gender": "male"
}
# (1)方式一:字典[key] = value
print(data_dict["name"]) # dream
data_dict["name"] = "opp"
print(data_dict["name"]) # opp
data_dict["hobby"] = "music"
print(data_dict) # {'name': 'opp', 'age': 18, 'gender': 'male', 'hobby': 'music'}
# (2)方式二:字典.update({key:value})
data_dict_detail = {
"phone": "12563639696",
"addr": "中国上海",
"id": "001"
}
# 遍历新字典 添加到旧字典中
'''
for i in data_dict_detail:
# print(i)
# print(data_dict_detail[i])
data_dict[i] = data_dict_detail[i]
print(data_dict)
'''
# 字典.update(键=值)
# 如果是遍历循环 键不会随着遍历而改变 一直是同一个
'''
for i in data_dict_detail:
# print(i)
# print(data_dict_detail[i])
data_dict.update(key=data_dict_detail[i])
print(data_dict)
'''
# 字典.update(字典)
# data_dict.update(data_dict_detail)
# print( data_dict) # {'name': 'opp', 'age': 18, 'gender': 'male', 'hobby': 'music', 'phone': '12563639696', 'addr': '中国上海', 'id': '001'}
# setdefault(key,value) # 向字典中设置当前键 所对应的默认值
print(data_dict)
for i in data_dict_detail:
data_dict.setdefault(i, data_dict_detail[i])
print(data_dict)
# 【5】删除
data_dict_detail = {
"phone": "12563639696",
"addr": "中国上海",
"id": "001"
}
# 方式一:del 字典[key] 按照键删除字典中对应的键值对
print(data_dict_detail)
del data_dict_detail["phone"]
print(data_dict_detail)
# 方式二:字典.pop(key) 按照键删除字典中对应的键值对弹出
res = data_dict_detail.pop("addr")
print(res)
print(data_dict_detail)
# 方式三:清空字典
data_dict_detail.clear()
print(data_dict_detail) # {}
# 方式四:弹出默认的最后一个位置的键值对
data_dict_detail = {
"phone": "12563639696",
"addr": "中国上海",
"id": "001"
}
print("-----")
res = data_dict_detail.popitem()
print(res) # ('id', '001')
print(data_dict_detail)
# 【6】补充方法
# (1)取出字典中所有的键对
print(data_dict_detail.keys(), type(data_dict_detail.keys()))
print("name" in data_dict_detail.keys())
print(list(data_dict_detail.keys()))
# (2)获取字典中的值对
print(data_dict_detail.values())
# (3)获取字典中的键值对
print(data_dict_detail.items())
for key, value in data_dict_detail.items():
print(f"key :>>>> {key}")
print(f"value :>>>> {value}")
# 【7】可以for循环遍历
【五】集合的内置方法
# 集合的特点是无序且去重
# 集合 变量名 = {元素1,元素2, 元素3, ...}
# 【1】支持类型强制转换
# 可以将其他类型转换为 集合
print(set("dreammmmm"))
print(set(list("dreammmmm")))
print(set(tuple("dreammmmm")))
print(set({"a": "1", "b": 2, "c": 3, "c": 4}))
# 【2】添加元素
num_set = {1, 2, 3, 4, 5}
# 添加单个元素
print(num_set.add(6)) # None
print(num_set) # {1, 2, 3, 4, 5, 6}
# 一次性添加多个元素
num_set.update([11, 22, 33])
print(num_set)
# 【3】删除元素
num_set.remove(11) # {1, 2, 3, 4, 5, 6, 11, 22, 33}
print(num_set) # {1, 2, 3, 4, 5, 6, 22, 33}
# 集合 的 pop 是默认弹出第一个元素 而列表的pop默认是弹出最后一个位置的元素
num_set = set("dream")
print(num_set) # {'e', 'd', 'r', 'a', 'm'}
print(num_set.pop()) # e 索引为0的位置
print(num_set) # {'d', 'r', 'a', 'm'}
# 删除指定的元素 discard 如果元素不存在不会报错
num_set.discard("m")
print(num_set)
# 【公用方法】
# 计算长度 len
# 遍历循环 for
# 成员运算 in / not in
# remove : 删除指定值数据 如果数据不存在就会报错 如果存在就会直接删除
num_set.remove(11)
【六】大作业
# 【一】多用户登录注册
# 【1】用户可以注册
# 校验当前用户是否注册过 如果注册过就让他去登录
# 如果当前听用户没有注册过就允许注册
# 【2】用户可以登陆
# 先校验用户是否存在
# 如果存在就允许登陆
# 否则就提示让用户去注册
# 【提供思路】
# 想要校验用户是否存在 ---> 需要知道原来的用户有哪些
'''
data_info = [
{"username": "dream", "password": "521"},
{"username": "ze", "password": "521"},
{"username": "meng", "password": "521"}
]
username = input(":>>>")
name_list = []
for i in data_info:
# i : {"username": "dream", "password": "521"},
name_list.append(i["username"])
if username in name_list:
...
'''
'''
data_list = [
"dream|521", "opp|666", "poo|888"
]
name_list = []
for i in data_list:
username,password = i.split("|")
name_list.append(username)
if username in name_list:
...
'''
'''
data_info = {
"dream": {
"username": "dream",
"password": "521"
}
}
username = input(":>>>")
data_info.get(username)
'''
# 【二】作业做一个简易的员工管理系统
# 有一个数据来存储所有的员工信息
data_info = {
"00001": {
"name": "dream",
"age": 18,
"hobby": ["music", "run"]
},
"00002": {
"name": "dream",
"age": 18,
"hobby": ["music", "run"]
},
"00003": {
"name": "dream",
"age": 18,
"hobby": ["music", "run"],
"role": "admin"
}
}
# 【1】添加员工 ---> 加一个权限 只有管理员才能添加员工
# 【2】查看员工信息
# (1)查看所有员工信息
# (2)查看指定员工的员工信息 让用户输入ID 找用户 / 让用户输入用户名找 用户
# 【3】删除员工信息
# (1)删除所有员工信息
# (2)删除指定员工的员工信息
# 【4】修改员工信息
# 管理员才能修改员工信息