数据类型
总结
python中有7种数据类型,其中包括
- number类型
- string类型
- bool类型
- 列表类型
- 字典类型
- 集合类型
- 元组类型
- number类型包括int类型、float类型、复数类型。int类型就是用来定义整数的类型,float类型就是浮点数类型就是小数,复数类型就是非实数。
- string类型就是单引号和双引号引起来的数据类型,其中就是可以引用中文也可以引用英文。
- bool类型就是分为true和false,true就相当于机器语言1,false就相当于机器语言0.常用与循环条件的判断。
- 列表数据里面的存放的数据是python中的全部数据类型都可以,也允许里面的数据相互重复,可以根据索引进行访问和修改,相较于c中的数组有更大的自由度,同样也用【】进行标识
- 元组数据类型里面存储的元素类型是持所有 Python 数据类型,同样也允许里面的数据相互重复,可以根据索引进行访问和修改,相较于列表数据类型,就是元组是不可改变的,用()进行标识
- 集合数据类型里面存储的只能是不可变类型,不允许重复,可以进行修改,没有索引,用大括号进行标识
- 字典类型数据类型,包括键值:value模式,键值类型只能用不可变类型进行标识,value字段则可以是全部的数据类型,键值唯一,但vale是可重复的。
情景题:
# 提示输入原价
print("请输入您购买的物品的原价")
# 关键修改1:将输入的字符串转换为浮点数(支持小数价格)
original_price = float(input())
discount = 0.8 # 8折
print("您的折扣为8折")
tax_rate = 0.09 # 9%税率
print("您的税率为0.09")
# 计算最终价格(修正变量名拼写)
final_price = (original_price * 0.8) * (1 + 0.09)
# 关键修改2:用格式化字符串拼接,避免类型错误
print(f"您的最终价格为 {final_price:.2f} 元") # .2f 保留2位小数,符合价格显示习惯
user_info = "姓名:张三,年龄:25,手机号:13812345678,地址:北京市朝阳区"
name = user_info.split(",")[0].split(":")[1]
age = user_info.split(",")[1].split(":")[1]
tem = user_info.split(",")[2].split(":")[1]
add = user_info.split(",")[3].split(":")[1]
result = f"【用户信息】姓名:{name},年龄:{age}岁,手机号:{tem}"
print(result)
print("请输入你的个人信息(按提示格式输入)")
# 1. 处理消费金额(带异常处理,确保输入是数字)
while True:
try:
consume = float(input("消费金额(请输入数字,如1000):"))
break # 输入正确则退出循环
except ValueError:
print("输入错误!请输入数字(如1000),重新输入")
# 2. 处理注册时长(带异常处理)
while True:
try:
register_month = int(input("注册时长(月数,如15):"))
break
except ValueError:
print("输入错误!请输入整数(如15),重新输入")
# 3. 处理是否为临时会员(规范输入并转换为布尔值)
while True:
is_temp_input = input("是否是临时会员(请输入 是/否):").strip()
if is_temp_input in ["是", "否"]:
is_temp = (is_temp_input == "是") # 输入"是"则is_temp=True,否则False
break
else:
print("输入错误!请输入 是 或 否,重新输入")
# 4. 判断三个条件
cond1 = consume >= 500 # 条件1:消费金额≥500
cond2 = register_month >= 12 # 条件2:注册时长≥12个月
cond3 = not is_temp # 条件3:不是临时会员
# 5. 计算满足的条件数(布尔值在求和时,True=1,False=0)
satisfied = sum([cond1, cond2, cond3])
can_discount = satisfied >= 2 # 满足至少2个条件即可打折
# 6. 输出结果(优化提示语,更易懂)
print("\n=== 优惠判断结果 ===")
print(f"是否享受8折优惠:{can_discount}({'是' if can_discount else '否'})")
print(f"满足的条件数:{satisfied}(共3个条件)")
print(f"原因:{'消费金额达标' if cond1 else '消费金额不达标'}、"
f"{'注册时长达标' if cond2 else '注册时长不达标'}、"
f"{'非临时会员' if cond3 else '是临时会员'}")
grade = [85, 92, 78, 90, 85, 88]
print("请添加一个成绩")
score = int(input())
grade.append(score)
print("删除重复的成绩")
grade = set(grade)
grade = list(grade)
grade.sort()
print(grade)
print("计算平均分")
grade1=sum(grade)/len(grade)
print(grade1)
print("计算最大值和最小值")
max_score=max(grade)
min_score=min(grade)
print(max_score)
print(min_score)
inventory = {"苹果": 50, "香蕉": 30, "橙子": 40}
a = 1
while a==1:
print("请输入您要添加的水果")
name = input()
print("请输入水果的价格")
count = int(input())
inventory[name] = count
print("请输入是否要继续")
a = int(input())
inventory["香蕉"] -= 5
inventory["橙子"] = 0
for i in list(inventory.keys()):
if inventory[i] == 0:
del inventory[i]
for goods,prince in inventory.items():
print(goods)
print(prince)
class1 = {"张三", "李四", "王五", "赵六"}
class2 = {"李四", "王五", "钱七", "孙八"}
common = class1 & class2
all_students = class1 | class2
only_class1 = class1 - class2
has_zhangsan = "张三" in class2
class2.add("周九")
class2.add("周九")
print(f"两个班共同学生:{common}")
print(f"所有学生:{all_students}")
print(f"一班独有学生:{only_class1}")
print(f"张三是否在二班:{has_zhangsan}")
print(f"二班最终学生:{class2}")
# 1. 定义矩形顶点坐标元组
rect_points = ( (0,0), (0,5), (8,5), (8,0) )
# 2. 提取坐标
first_x = rect_points[0][0]
second_y = rect_points[1][1]
print(f"第一个顶点x坐标:{first_x},第二个顶点y坐标:{second_y}")
# 3. 尝试修改元组(捕获异常)
try:
rect_points[0] = (1,1) # 试图修改元组元素
except TypeError as e:
print(f"修改元组失败:{e}(元组不可变)")
# 4. 元组作为字典键存储面积
rect_info = {rect_points: 40}
print(f"矩形面积:{rect_info[rect_points]}")
# 5. 函数返回元组(长和宽)
def get_rect_size():
width = 8
height = 5
return (width, height) # 元组返回多值
# 接收返回值并计算面积
w, h = get_rect_size()
area = w * h
print(f"函数计算的矩形面积:{area}")
循环语句和判断语句
总结
- 判断语句
- 循环语句
- 推导式
- 迭代器与生成器
- 判断语句是分为if语句、if嵌套、match case 语句,整体上跟C语言差不多
- 循环语句分为while循环,for循环、range函数
- 推导式分为 列表(list)推导式 字典(dict)推导式 集合(set)推导式 元组(tuple)推导式
- 迭代器和生成器迭代器和生成器的本质都是:不一次性拿出所有东西,而是用的时候再拿一个,用完再拿下一个(专业说法叫 “惰性取值”),核心目的是节省内存(比如处理 100 万条数据,不用一次性加载到内存里)。
场景题
user_db = {
"admin": "123456",
"user": "654321"
}
username = input("请输入您的用户名")
password = input("请输入您的密码")
if username in user_db:
if user_db[username] == password:
match username:
case "admin":
print("管理员登陆成功")
case "user":
print("普通用户登陆成功")
else:
print("密码错误")
else:
print("账号不存在")
import random
target = random.randint(1, 100)
for change in range(5):
remind = 4 - change
guess = int(input(f"第{change + 1}次猜数字(1-100):"))
if guess > target:
print(f"猜大了!剩余{remind}次机会")
elif guess < target:
print(f"猜小了!剩余{remind}次机会")
else:
print(f"恭喜!猜对了,正确数字是{target}")
break
else:
# 循环正常结束(没break)→ 5次用完
print(f"游戏结束!5次机会已用完,正确数字是{target}")
# 原始数据
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 1. 列表推导式:偶数的平方
list_comp = [x**2 for x in nums if x % 2 == 0]
# 2. 字典推导式:数字: 是否是奇数
dict_comp = {x: x % 2 == 1 for x in nums}
# 3. 集合推导式:奇数的两倍(去重)
set_comp = {x*2 for x in nums if x % 2 == 1}
# 4. 元组推导式:大于5的数字(生成器表达式转元组)
tuple_comp = tuple(x for x in nums if x > 5)
# 输出结果
print("列表推导式(偶数平方):", list_comp)
print("字典推导式(数字: 是否奇数):", dict_comp)
print("集合推导式(奇数两倍):", set_comp)
print("元组推导式(大于5的数字):", tuple_comp)
函数
总结
- 函数
- lambda匿名函数
- 装饰器
- 数据结构
- 函数的三要素:参数、函数体、返回值。
- lambda 参数: 表达式 作为高阶函数(sorted/map/filter)的参数,简化代码
- 装饰器本质上是一个接收函数作为输入并返回一个新的包装过后的函数的对象。
- 用python构造数据结构、线性表、链式表、栈、数组、队列、二叉树、图
场景题
def cal_goods_price(name,bace_price,*num,discount=0.95,reduce_money=0):
if not num: # 处理未传购买数量的边界情况
buy_num = 1 # 默认购买1件
else:
buy_num = sum(num) # 可变长参数求和,支持多批数量传入
total_original = bace_price * buy_num
total_discount = total_original * discount
final_price = max(total_discount-reduce_money,0)
return {
"商品名": name,
"总原价": round(total_original, 2),
"折后价": round(total_discount, 2),
"最终价": round(final_price, 2)
}
res1 = cal_goods_price("Python实战教程", 59.9)
print("场景1结果:", res1)
res4 = cal_goods_price("Python实战教程", 59.9, 10, discount=0.8, reduce_money=50)
print("场景4结果:", res4)
employees = [
{"name": "张三", "dept": "技术部", "salary": 15000, "work_years": 5},
{"name": "李四", "dept": "市场部", "salary": 8000, "work_years": 3},
{"name": "王五", "dept": "技术部", "salary": 9500, "work_years": 4},
{"name": "赵六", "dept": "技术部", "salary": 20000, "work_years": 5},
{"name": "孙七", "dept": "人事部", "salary": 7000, "work_years": 2}
]
name_salary = list(map(lambda x: (x["name"], x["salary"]), employees))
print("需求1结果(姓名+薪资):", name_salary)
tech_high_sal = list(filter(lambda x: x["dept"] == "技术部" and x["salary"] >= 10000, employees))
print("需求2结果(技术部高薪员工):", tech_high_sal)
sorted_emp = sorted(employees, key=lambda x: (-x["work_years"], x["salary"]))
print("需求3结果(多条件排序后):", sorted_emp)