Python基础入门
文章目录
- Python基础入门
- 1 Python核心语法
- 1.1 数据存储与运算
- ==*字面量与变量*==
- ==*常见的数据类型*==
- ==*输入与输出*==
- ==*运算符*==
- 1.2 流程控制语句
- ==*条件判断*==
- ==*模式匹配*==
- ==*循环*==
- 1.3数据存储容器
- ==*列表list*==
- ==*字符串str*==
- ==*元组tuple*==
- ==*集合set*==
- ==*字典dict*==
- ==*总结*==
1 Python核心语法
1.1 数据存储与运算
字面量与变量
字面量:指程序中,直接书写的固定值(数据),就称为字面量。
#字面量的写法print(10)#整数(int)print(1.1)#浮点数(float)print(True)#布尔(bool)print(False)#布尔(bool)print("hello")#字符串(str)print(None)#空值(NoneType)#布尔类型本质也是整数类型(True - 1,False - 0)print(True+1)#2print(False-1)#-1变量:程序中用来存储单个数据的容器,通常会把经常发生变化的数据存储在变量中。
定义格式:变量名 = 变量值
# 变量 ---> Python是动态类型语言, 一个变量是可以存储不同类型的数据的 (但是项目开发中, 推荐变量只存储一种类型的数据)num=123.4print(num)num="ok"print(num)num=Trueprint(num)标识符:是程序员在代码中为变量、函数、类等元素所起的名字。
命名规则(规定):
1.只能包含字母(a-z,A-Z)、数字(0-9)、下划线(_)
2.不能以数字开头
3.不能使用关键字:True、False、None、and、or、if、else、elif、for、while等
4.严格区分大小写,比如:age,Age,AGE是三个变量
#标识符true=1print(true)name1="Python"print(name1)命名规范(变量):
1.见名知意
2.多个部分使用下划线连接
3.英文字母全小写
常见的数据类型
字符串
字符串的三种定义方式:
# 双引号定义s1="Hello"# 单引号定义s2='Python'# 三引号定义 (多行字符串)s3=""" Hello: 欢迎大家进入到Python的学习! 大家记得点赞哦 ~ """常见的转义字符:
\' (单引号)、\" (双引号)、\n (换行符)、\t (制表符)字符串的拼接:
# 字符串拼接(两种)s1="我喜欢""Python"print(s1)msg1="我喜欢"msg2="Python"print("龟叔说: "+msg1+" , "+msg2)案例:字符串的拼接
三种方式:
- 最常见的(但是只能拼接str型,str(age)强转str型)
# 案例: ---> str(int数字) ---> 将int类型的数字转为字符串name="涛哥"age=18pro="软件工程"hobby="Python、Java"print("大家好, 我是"+name+", 今年"+str(age)+"岁, 学习的专业是"+pro+", 爱好 "+hobby)- %占位符
# 字符串格式化 --> 方式一: %s 占位符name="涛哥"age=18pro="软件工程"hobby="Python、Java"print("大家好, 我是 %s , 今年 %s 岁, 学习的专业是 %s , 爱好 %s"%(name,age,pro,hobby))- f"内容{变量/表达式}" (推荐)
name="涛哥"age=18pro="软件工程"hobby="Python、Java"print(f"大家好, 我是{name}, 今年{age}岁, 学习的专业是{pro}, 爱好{hobby}")输入与输出
# 获取键盘上输入的数据 -- input(...)name=input("请输入你的名字:")age=input("请输入你的年龄:")print(f"你的姓名:{name},你的年龄:{age}")运算符
算术运算符
算术运算符是用于执行基本的数学运算的符号,作用于一个或多个操作数上,并产生一个计算结果。
# 算术运算符print("10 + 4 = ",10+4)# 加print("10 - 4 = ",10-4)# 减print("10 * 4 = ",10*4)# 乘print("10 / 4 = ",10/4)# 除 - 2.5print("10 // 4 = ",10//4)# 整除(结果为整数) - 2print("10 % 4 = ",10%4)# 取余/求模 - 2print("10 ** 4 = ",10**4)# 幂指数, 10的4次方 - 10000赋值运算符
赋值运算符是编程语言中用于将值(或表达式的结果)保存到变量中的运算符。(把右边的值,赋给左边的变量)
比较运算符
比较运算符,也称为关系运算符,用于比较两个值之间的关系。会计算运算符两边的表达式,然后返回一个布尔值作为结果(True – 表示比较关系成立;False – 表示比较关系不成立)。
逻辑运算符
逻辑运算符是用于连接多个条件(布尔)表达式(其值为“真”或“假”),并返回一个最终布尔结果的运算符。
案例:键盘输入一个整数, 判断这个数字是否在 10-20 之间 --> 在: True, 不在: False
n=int(input("请输入一个整数: "))print(f"{n}在10-20之间: ",n>=10andn<=20)# and连接的条件是并且的关系, 两个条件同时成立(True), 结果才是True; 否则, 就是False1.2 流程控制语句
条件判断
if语句:
只有满足指定条件,才会执行对应的代码逻辑
#if条件判断基本格式if要判断的条件:条件成立时,要执行对应的操作# if条件判断:如果分数超过680, 我就去清华读书score=600ifscore>680:print("欢迎你来清华读书")print("也恭喜你即将踏入精彩的大学生活")if-else语句:
if要判断的条件:条件成立时,执行对应的操作1else:条件不成立时,执行的操作2案例:
# if...else...案例:完成B站登录功能的实现# 正确的账号和密码ok_account="18888888888"ok_password="666888"# # 1. 接收用户输入的账号和密码account=input("请输入您的B站账号: ")password=input("请输入您的B站密码: ")# # 2. 判断账号和密码是否全部正确, 如果都正确, 则登录成功ifaccount==ok_accountandpassword==ok_password:print("登录成功 ~")print("进入B站首页 ~")else:print("登录失败 !")print("账号或密码错误 !")if-elif-else语句:
# if...elif...else结构if要判断的条件1:条件成立时,执行对应的操作1elif要判断的条件2:条件成立时,执行对应的操作2else:条件不成立时,执行的操作3# if...elif...else结构num=int(input("请输入数字:"))ifnum>0:print(f"{num}是 正数")elifnum<0:print(f"{num}是 负数")else:print(f"{num}是 0")模式匹配
match…case语句:
结构模式匹配就是用一个清晰的 模板 去精准的匹配数据的结构和内容,匹配成功则执行响应的操作。
循环
while循环语句
for循环语句
while循环是通过条件表达式来控制是否要进行下一次循环的。而for循环,本质是一种轮询遍历机制,对一批内容进行逐个处理。
else可写可不写,只要for语句执行完自己会退出
# for循环: 遍历输入的字符串msg=input("请输入需要遍历的字符串: ")forsinmsg:# s 表示遍历出来的元素 ; msg 表示需要遍历的数据print(f"元素:{s}")else:print("遍历结束!")range语句:
作用:生成指定规则的数字序列
- 用法1:range(end) -> 获取一个从0开始,到end结束的数字序列(不含end本身)
range(5)获取的数据就是 0,1,2,3,4 - 用法2:range(start,end) -> 获取一个从start开始,到end结束的数字序列(不含end本身)
range(2,8)获取的数据就是 2,3,4,5,6,7 - 用法3:range(start,end,step) -> 获取一个从start开始,到end结束的数字序列,step步长(不含end本身)
range(0,10,2)获取的数据就是 0,2,4,6,8
# 案例1: 计算 1-100 之间所有的奇数之和total=0# 记录累加之和原始foriinrange(1,101):ifi%2==1:# 奇数total+=i嵌套循环:
例子:
# 嵌套循环案例: 打印99乘法表foriinrange(1,10):# 外层循环 - 控制行forjinrange(1,i+1):# 内层循环 - 控制列print(f"{j}x{i}={j*i}",end="\t")print()1.3数据存储容器
列表list
列表是数据容器中的一类,是一次性可以存储多个数据(元素)的。
定义:列表名称 = [元素1,元素2,元素3,元素4,元素5…]
s = [54, 15, 75, 108, 23, 78, 75]
特点:
- 可以存储不同类型的元素
- 元素有序、可以重复、元素可以修改
一般用正向索引
列表元素的查看,修改,删除:
- 查看:list[0]
- 修改:list[0] = “A”
- 删除:del list[0]
列表切片:
切片是指对操作的数据截取其中一部分的操作。列表、字符串、元组都支持切片操作。
语法:s[start:end:step]
特点:
- start:开始索引,不指定默认为0(第一个元素的索引)
- end:结束索引,不指定默认为列表长度(直到列表末尾)
- step:步长,不指定默认为1
例子:
s=[“A”,“B”,“C”,“D”,“E”,“F”]
s[0:3:1]为[“A”,“B”,“C”]
列表常见方法:
Python中用于数据统计的常见语句:
- min():获取最小值
- max():获取最大值
- sum():求和
- len():获取元素的个数
案例1:
将用户输入的10个数字,存储到一个列表中,并将列表中的数字进行排序, 输出其中的最小值、最大值 和 平均值。
# 1. 定义列表num_list=[]# 2. 将用户输入的10个数字存入列表foriinrange(10):num=int(input("请输入一个有效的数字: "))num_list.append(num)print("数字列表: ",num_list)# 3. 排序num_list.sort()print("排序后的数字列表: ",num_list)# 4. 输出其中的最小值、最大值 和 平均值。---> sum() 求和 ; len() 获取元素的个数(列表的长度)print("最小值: ",num_list[0])print("最大值: ",num_list[-1])print("平均值: ",sum(num_list)/len(num_list))案例2:
合并两个列表中的元素,并对合并的结果进行去重处理(去除列表中的重复元素)。
快速合并两个列表的方法:
- 使用+运算符直接合并
- 使用*进行解包操作(解包指将列表这一类数据容器解开成独立的元素)
num_list1=[19,23,54,64,875,20,109,232,123,54]num_list2=[55,80,72,35,60,123,54,29,91]# 1. 合并列表num_list=num_list1+num_list2print("合并后的原始列表: ",num_list)# 2. 去重重复记录new_list=[]# 去重重复记录后的列表fornuminnum_list:# 判断new_list中是否存在num元素, 如果不存在, 再添加ifnumnotinnew_list:# 判断元素是否存在于列表中, 如果存在, 则返回True; 不存在, 返回Falsenew_list.append(num)print("去重重复记录后的列表: ",new_list)列表推导式:
含义:列表推导式就是按照一定规则快速生成一个列表的方法
- 格式1:列表名称=[要插入列表的数据 for i in 列表]
- 格式2:列表名称=[要插入列表的数据 for i in 列表 if 条件]
案例:
生成1-20的平方列表。
num_list2=[i**2foriinrange(1,21)]print(num_list2)案例2:
从如下数字列表中提取所有偶数,并计算其平方,组成一个新的列表。
num_list=[12,32,45,77,80,92,33,57,97,98,110,111,122]new_list=[i**2foriinnum_listifi%2==0]print(new_list)字符串str
字符串是字符的容器,一个字符串中可以存放任意数量的字符
特点:
- 不可变性(无法修改)
- 有序性
- 可迭代性
字符串中的每一个字符元素都有其对应的下标(索引),通过元素对应的索引,就可以获取到对应的元素。
字符串操作常用方法:
案例:
邮箱格式验证:用户输入一个邮箱, 验证邮箱格式是否正确(包含一个@和至少一个.), 如果输入正确, 输出"邮箱格式正确", 否则输出"邮箱格式错误"。
# 1. 接收用户输入的邮箱mail=input("请输入邮箱: ")# 2. 判断邮箱的格式ifmail.count("@")==1and"."inmail:print(f"{mail}是合法的邮箱")else:print(f"{mail}是非法的邮箱")元组tuple
元组是不可变的序列,类似于列表,但创建后不能修改。
定义:元组名称 = (元素1,元素2,…)
定义空元组:元组名称 = () 、元组名称 = tuple()
特点:
- 可以存储不同类型的元素
- 元素可以重复、有序、不可以修改 (支持索引访问、切片)
方法:
- count():统计某元素在元组中出现的次数
- index():查找某个元素在元组中的索引位置(第一次出现的位置)
元组的组包和解包:
组包(Packing):将多个值合并到一个容器(元组、列表)中。
解包(Unpacking):将容器(元组、列表)解开成独立的元素,分别赋值给多个变量。
# 定义元组, 组包t1=(5,7,9,1)# 定义元组, 组包t2=5,7,9,1# 基础解包a,b,c,d=t1# (*)扩展解包x,*y,z=t2# x为5,y为[7, 9],z为1s,*o=t2# s为5,o为[7, 9, 1]*o,e=t2# o为[5, 7, 9],e为1集合set
集合(set)是一种无序的、不可重复、可修改的数据容器。
定义:s1 = {“C”, “D”, “X”, “T”, “O”, “U”}
定义空集合:s2 = set()
特点:
- 无序
- 不可重复
- 可修改
注:由于集合是无序的,因此是不支持下标索引访问的
集合常用操作:
集合set操作的运算符:
- &:交集
- |:并集
- -:差集
案例:
# 1. 找出同时选修了 法语 和 艺术 的学生 french_set art_set# 方式一:fa_set=french_set.intersection(art_set)print(f"同时选修了 法语 和 艺术 的学生:{fa_set}")# 方式二: & --> 交集fa_set2=french_set&art_setprint(f"同时选修了 法语 和 艺术 的学生:{fa_set2}")# 3. 找出选修了足球, 但是没有选修篮球的学生 - 差集# 方式一:fb_set=football_set.difference(basketball_set)print(f"选修了足球, 但是没有选修篮球的学生:{fb_set}")# 方式二: - ---> 差集fb_set2=football_set-basketball_setprint(f"选修了足球, 但是没有选修篮球的学生:{fb_set2}")# 4.1 获取到学生名单 -- 并集 (|)all_set=football_set.union(basketball_set).union(french_set).union(art_set)all_set=football_set|basketball_set|french_set|art_set集合推导式:
写法:
- 变量名称={i表达式 for i in 列表}
- 变量名称={i表达式 for i in 列表 if 条件}
与之前列表推导式用法类似
字典dict
使用键值对(key:value)来存储数据,每一个键都对应一个值,通过键(key)可以快速找到对应的值(value)。
定义:字典名称 = {key: value, key:value, key:value …}
定义空字典:字典名称 = {}、字典名称 = dict()
根据key获取value:值 = 字典名称[key]
注:字典(dict)中的value可以是任何类型的数据,而key不能为可变类型(如:不能为 列表list、集合set、字典dict)。
注意事项:
- value可以是任意类型,而key必须是不可变类型(不能为list、set、dict)
- 字典内的key不允许重复,如果重复定义,后面的覆盖前面的
- 字典是没有索引下标的,不能根据索引获取值,只可以根据key获取value
字典常用操作:
字典是支持遍历的,如下:
# 遍历dict1={"王林":670,"李慕婉":608,"许立国":580,"韩立":688}forkindict1.keys():print(f"{k}:{dict1[k]}")foritemindict1.items():print(f"{item[0]}:{item[1]}")fork,vindict1.items():print(f"{k}:{v}")