目录
一、
1、字符串拼接
1)直接
2)字符串格式化
2、输入输出
3、运算符
1)算术运算符
2)赋值运算符
3)比较运算符
4)赋值运算符
4、流程控制语句
1)条件判断
a、if条件
b、match...case模式匹配
2)循环语句
a、while循环
b、for循环
c、案例
d、关键字break和continue
二、数据容器
1、list列表
2、str
1)如何判断某个子串是否在字符串中
2)如何将字符串反转
3、元组(tuple)
组包与解包
例子
案例
4、集合(set)
运算符
1、运算符 &
2、运算符 -
3、运算符 |
将多个set合并
1、成一个列表
2、成一个集合
5、字典(dict)
遍历
案例
6、数据容器总结对比
7、综合案例
python官网地址:python.org
pycharm官网:www.jetbrains.com
一、
1、字符串拼接
1)直接
用+ :字符串常量和字符串变量都可以用+进行拼接
str():将整形转化成字符串,就可以与字符串拼接了
int():其他类型转为int
float():其他类型转为float
bool():其他类型转为bool
print 时,输出不同内容可以用逗号连接,但输出结果中间会存在空格
2)字符串格式化
通过%占位符(%表示要占位,s表示将变量转为字符串放入占位的位置)
a,b = 8,9 #将变量转为字符串放入占位的位置 print("大家好,我是%s"%a) #有几个占位符,就要跟几个变量 print("大家好,我是%s,欢迎%s"%(a,b))通过f"内容{变量/表达式}",大括号内可以写算术表达式
a,b = 8,9 #占位符是{} print(f"大家好,我是{a}") #有几个占位符,就要跟几个变量 print(f"大家好,我是{a},欢迎{b}")2、输入输出
input语句获取键盘输入,s = input(提示信息),要注意从键盘中获取到的都是字符串,无论输入什么
print将数据输出到控制台,print(数据),print默认以“\n”结束,如果想让他输出不换行,要指定end参数,来指定每次print以什么结束
注意:如果想一次性输入多个变量,由于input() 返回的是一个字符串,是一个整体,不能自动拆分,所以要使用split()函数,将字符串用空格分开或指定其他分隔符
# 错误写法 × name, price, num = input("请输入商品名称、价格、数量") #正确写法 √ name, price, num = input("请输入商品名称、价格、数量").split()3、运算符
1)算术运算符
特别的,除法运算的结果是小数
优先级:(** )>(* / // % )>(+ -)
精度损失问题,可以用decimal模块来解决
#修改前 x=float(input())#0.5 y=float(input())#0.4 print("x-y=",x-y) #输出为0.999999998,这是二进制float无法精确表示所有小数 #修改后 from decimal import Decimal x = Decimal(input()) #0.5 y = Decimal(input()) #0.4 print("x-y =", x - y) #正确输出0.1小数想要四舍五入保留精度,可以使用round()函数,
语法是round(数字,保留精度位数小数点后几位)
2)赋值运算符
3)比较运算符
4)赋值运算符
4、流程控制语句
1)条件判断
a、if条件
"""案例:三角形类型判断""" a = int(input("请输入第一个边长")) b = int(input("请输入第2个边长")) c = int(input("请输入第3个边长")) if a+b > c and a+c>b and b+c>a: if a == b == c: print(f"{a} {b} {c}等边") elif a == b or a == c or b == c: print(f"{a} {b} {c}等腰") else: print(f"{a} {b} {c}普通") else: print("不能构成三角形")b、match...case模式匹配
case语句后面可以加条件判断语句
"""计算器""" a = float(input("请输入第一个运算数")) b = float(input("请输入第二个运算数")) opre = input("输入运算符") match opre: case "+": print(f"{a}+{b}={a+b}") case "-": print(f"{a}-{b}={a-b}") case "*": print(f"{a}*{b}={a*b}") case "/" if b != 0: print(f"{a}/{b}={a/b}") case _: #匹配其他所有情况 print("错误")2)循环语句
a、while循环
"""计算1-100之间所有偶数的累加之和""" a = 1 sum = 0 while a <= 100: if a % 2 == 0: sum += a a += 1 # else这段逻辑可有可无 else: print(f"结果为{sum},正常结束")b、for循环
与c语言中不太一样,for的本质是遍历一个数据集中的所有元素
"""计算1-100之间所有奇数的累加之和""" sum1 = 0 for i in range(1, 101, 2): sum1 += i #用逗号连接输出会有空格 print("1-100之间所有奇数的累加之和为",sum1) """计算100-500之间所有3的倍数之和""" sum2 = 0 for i in range(100, 501): if i % 3 == 0: sum2 += i #没空格 print(f"100-500之间所有3的倍数之和为{sum2}")c、案例
"""打印99乘法表""" for i in range(1, 10): for j in range(1, i+1): print(f"{j} × {i} = {i*j}", end="\t") print()d、关键字break和continue
break只能用于循环中,跳出当前循环
continue用于略过后面的执行体,进入下一次循环
"""用户登录""" while True: admin = input("请输入用户名") password = input("请输入密码") if admin == "" or password == "": print("用户名和密码不能为空!") continue else: if (admin == "admin" and password == "666888") or (admin == "zhangsan" and password == "123456") or (admin == "taoge" and password == "888666"): print("登陆成功") break else: print("用户名或密码错误")二、数据容器
1、list列表
2、str
1)如何判断某个子串是否在字符串中
# 1、count()方法、find()方法 s = "wer@123.com" if s.find('.') and s.count('@') == 1: print("邮箱格式正确") else: print("邮箱格式错误") # 2、in运算符 s = "wer@123.com" if '.' in s and s.count('@') == 1: print("邮箱格式正确") else: print("邮箱格式错误")2)如何将字符串反转
#利用字符串切片 s = "asdfgh" ss = s[::-1]判断字符串是否是回文串
s = input() ss = s[::-1] if s == ss: print("是回文串") else: print("不是回文串")3、元组(tuple)
注意:如果元组中只有一个元素,单个元素之后必须要加逗号,例如(100,)
组包与解包
基础解包的变量数量要与容器的元素个数一致
解包用*会收集成列表便于后续处理
例子
# 将a b c数据交换 a, c = 1, 3 b = 2 a, b, c = c, a, b print(a, b, c)案例
grad = ( ("S001", "王林", 85, 92, 78), ("S002", "李慕婉", 92, 88, 95), ("S003", "十三", 78, 85, 82), ("S004", "曾牛", 88, 79, 91), ("S005", "周轶", 95, 96, 89), ("S006", "王卓", 76, 82, 77), ("S007", "红蝶", 89, 91, 94), ("S008", "徐立国", 75, 69, 82), ("S009", "许木", 86, 89, 98), ("S010", "遁天", 66, 59, 72), ) # 1 每个学生计算总分、各科平均分 print("学号\t\t总分\t\t平均分") # 方式一 """for g in grad: all_score = g[-1] + g[-2] + g[-3] average_score = all_score / 3 print(f"{g[0]}\t{all_score}\t\t{average_score:.1f}")""" # 方式二 基于解包,可读性高 for id, name, chinese, math, english in grad: all_score = chinese + math + english average_score = all_score / 3 print(f"{id}\t{all_score}\t\t{average_score:.1f}") # 2 各科成绩的 chinese_scores = [s[2] for s in grad] math_scores = [s[3] for s in grad] english_scores = [s[4] for s in grad] print(f"语文最低分{min(chinese_scores)},最高分{max(chinese_scores)},平均分{sum(chinese_scores)/len(chinese_scores)}") print(f"数学最低分{min(math_scores)},最高分{max(math_scores)},平均分{sum(math_scores)/len(math_scores)}") print(f"英语最低分{min(english_scores)},最高分{max(english_scores)},平均分{sum(english_scores)/len(english_scores)}") # 3 查找成绩优秀的学生 """for g in grad: all_score = g[-1] + g[-2] + g[-3] average_score = all_score / 3 if average_score > 90: print(f"{g[0]}同学成绩优秀,平均分大于90")""" for id, name, chinese, math, english in grad: all_score = chinese + math + english average_score = all_score / 3 if average_score > 90: print(f"{id}同学成绩优秀,平均分大于90")4、集合(set)
运算符
1、运算符 &
可以实现和intersection一样的效果
set1.intersection(set2) 等价于 set1 &set2
2、运算符 -
可以实现和difference一样的效果
set1.difference(set2) 等价于 set1 - set2
还可以用集合推导式语法:{要往集合中添加的数据 for s in set1 if 条件}
set3 = { s for s in set1 if s not in set2 }
3、运算符 |
可以实现和union一样的效果
set1.union(set2) 等价于 set1 | set2
将多个set合并
1、成一个列表
使用解包,可以用于计算多个集合中每个元素一共出现多少次
all_list = [*set1 , *set2 , *set3]
2、成一个集合
使用union或者|,可以用于去重
5、字典(dict)
如果键重复,后面的值会覆盖前面的值
添加和修改的语法一样,如果字典中已经存在这个key,就会修改,否则添加
遍历
for k in dict.keys(): print(f"{k} : {dict[k]}") for item in dict.items(): print(f"{item[0]} : {item[1]}") for k, v in dict.items(): print(f"{k} : {v}") #注意如果想遍历键值对,不能直接遍历dict,因为默认遍历的是键 #以下是错误的 for k in dict1: print(k)案例
print("欢迎使用购物车") shop_car = dict() while 1: instruct = input("请选择要进行的操作:\n1、添加\n2、修改\n3、删除\n4、查询\n5、退出") match instruct: case "1": name, price, num = input("请输入商品名称、价格、数量").split() if name in shop_car: print("该商品已存在,添加失败") else: shop_car[name] = [price, num] print("添加成功") case "2": name, price, num = input("请输入商品名称、价格、数量").split() if name not in shop_car: print("不存在该商品,请核实") else: shop_car[name] = [price, num] print("修改成功") case "3": name = input("请输入商品名称") if name not in shop_car: print("商品不存在,删除失败") else: del shop_car[name] print("删除成功") case "4": for k, v in shop_car.items(): print(f"商品名称{k},商品价格{v[0]},商品数量{v[1]}") case "5": print("已退出") break case _: print("非法操作,请重新输入")6、数据容器总结对比
7、综合案例
print("欢迎使用教务管理系统") menu = """ ####################### 1、添加学生信息 2、修改学生信息 3、删除学生信息 4、查询学生信息 5、列出所有学生 6、统计班级成绩 7、退出系统 ####################### """ students = {} while 1: print(menu) order = input("请选择\n") match order: case "1": name = input("请输入学生姓名:") if name in students: print("添加失败,已经存在该学生!") continue chinese = float(input("请输入语文成绩:")) math = float(input("请输入数学成绩:")) english = float(input("请输入英语成绩:")) students[name] = {"chinese": chinese, "math": math, "english": english} case "2": name = input("请输入学生姓名:") if name not in students: print("修改失败,未找到该学生!") continue chinese = float(input("请输入语文成绩:")) math = float(input("请输入数学成绩:")) english = float(input("请输入英语成绩:")) students[name] = {"chinese": chinese, "math": math, "english": english} case "3": name = input("请输入学生姓名:") if name not in students: print("删除失败,未找到该学生!") continue students.pop(name) case "4": name = input("请输入学生姓名:") if name not in students: print("查找失败,未找到该学生!") continue print(f"学生姓名:{name},语文成绩:{students[name]['chinese']}," f"数学成绩:{students[name]['math']},英语成绩:{students[name]['english']}") case "5": for name in students: print(f"学生姓名:{name},语文成绩:{students[name]['chinese']}," f"数学成绩:{students[name]['math']},英语成绩:{students[name]['english']}") case "6": chinese_score = [students[name]['chinese'] for name in students] math_score = [students[name]['math'] for name in students] english_score = [students[name]['english'] for name in students] print(f"语文最高分:{max(chinese_score)},最低分:{min(chinese_score)},平均分{sum(chinese_score)/len(chinese_score)}") print(f"数学最高分:{max(math_score)},最低分:{min(math_score)},平均分{sum(math_score) / len(math_score)}") print(f"英语最高分:{max(english_score)},最低分:{min(english_score)},平均分{sum(english_score) / len(english_score)}") case "7": print("bye!") break case _: print("error!")