1.环境搭建与IDE配置venv/uv1.1 venv和uv的区别venv 是 Python 标准库自带的虚拟环境工具为每个项目复制一份独立的解释器目录与第三方包目录uv 是用 Rust 编写的高性能 Python 版本与包管理器能用更少的命令、更快的速度完成同样的事。1.2 venv创建虚拟环境总流程1.确认解释器版本Windows 用 python 或 py -3macOS / Linux 用 python3python --version我用的是python3.13.112.建项目目录并进入mkdir todo-app cd todo-app在pycharm里面需要分成两次输入,不然会报错3.用标准库 venv 创建虚拟环境生成 .venv 目录无输出即成功python -m venv .venv4.激活环境激活成功后命令行提示符前出现 (.venv)Windows PowerShell.venv\Scripts\Activate.ps1Windows CMD.venv\Scripts\activate.batmacOS / Linuxsource .venv/bin/activate5.激活后再装包只影响当前 .venvpython -m pip install requests6.退出当前虚拟环境deactivate1.3 uv创建虚拟环境1.uv 等价流程不用手动 activateuv run 会自动使用 .venv 里的解释器uv venv # 等价于 python -m venv .venv速度快得多2.uv pip install requests # 等价于激活后的 pip install3.uv run python main.py # 无需激活直接在该环境里执行脚本4.uv python list # 查看本机可用 / 可下载的 Python 版本2.核心语法、数据类型与运算符2.1 变量的基本使用2.1.1标识符第一个字符必须以字母a-z, A-Z或下划线 _ 。标识符的其他的部分由字母、数字和下划线组成。标识符对大小写敏感count 和 Count 是不同的标识符。标识符对长度无硬性限制但建议保持简洁一般不超过 20 个字符。禁止使用保留关键字如 if、for、class 等不能作为标识符2.1.2注释Python中单行注释以#开头,还有一个快捷键ctrl/,多行注释(内容)2.2数据类型的基本分类2.2.1标准数据类型1.不可变数据4 个Number数字、String字符串、bool布尔、Tuple元组2.可变数据3 个List列表、Dictionary字典、Set集合2.3运算符2.3.1算术运算符加-减*乘/除//整除%取余模运算)**幂运算2.3.2比较运算符等于!不等于大于小于 大于等于小于等于2.3.3逻辑运算符and与 or或not非2.3.4赋值运算符加后赋值 -减后赋值 *乘后赋值 /除后赋值 //整除后赋值 %取余后赋值**幂后赋值2.3.5成员运算符in在……之中not in不在……之中2.3.6身份运算符is是同一个对象is not不是同一个对象2.4数据类型转换有时候我们需要对数据内置的类型进行转换数据类型的转换一般情况下你只需要将数据类型作为函数名即可。Python 数据类型转换可以分为两种1.隐式类型转换 - 自动完成:较低数据类型整数就会转换为较高数据类型浮点数2.显式类型转换 - 需要使用类型函数来转换:需要用户将对象的数据类型转换为所需的数据类型2.5分支语句2.6 for循环语句迭代循环用于遍历序列或可迭代对象,可以2.7while循环基本格式:如果 while 后面的条件语句为 false 时则执行 else 的语句块。语法格式如下while expr: statement(s) else: additional_statement(s)2.8 isdigit() 与 isinstance()对比对比项isdigit()isinstance()类型字符串的方法Python内置函数调用方式字符串.isdigit()isinstance(对象, (类型,...))作用对象只能对字符串调用可以判断任何类型的对象判断内容判断字符串内容是否全由数字字符组成即长得像不是纯整数判断对象是否属于指定的某类/某几类类型返回结果布尔值True/False布尔值True/False能否判断整数✅如123✅如123能否判断浮点数❌3.14→ False✅若写了float能否判断负数❌-5→ False✅若写了int/float判断对象还是内容判断字符串内容判断对象的数据类型典型应用校验用户输入的字符串是否为纯数字检查变量是否为某类型做分支处理支持类型继承不涉及✅ 支持子类也算b isinstance(num, (int, float, str))这里的isinstance用于判断num这个变量本身是否属于int、float、str这三种类型中的某一种。如果num 5→b True如果num 3.14→b True如果num 123→b True因为包含str如果num [1,2]→b False关键区别一句话:isdigit()看长相这个字符串看起来是不是一串数字字符。isinstance()看身份这个变量本质上属于什么类型。注意isinstance(num, (int, float, str))把str也放进去了所以字符串也会返回True。如果你本意是判断是不是数字就不应该包含str写(int, float)更合适。而isdigit()只能用在字符串上用来判断字符串内容是不是数字。2.9 for和while循环的区别对比项for循环while循环循环次数固定/可数遍历某个序列列表、字符串、range等不确定只要条件成立就一直循环条件依赖依赖还有没有下一个元素依赖条件是否为真是否必须手动更新不需要自动取下一个必须在循环体里手动改变条件变量否则死循环适用场景我要循环N次 或 遍历每个元素我要循环直到某个条件不再成立何时进循环进入时就知道要循环多少次每次执行前才判断条件能用for就用for遍历列表、字符串、range(n)固定次数时更简洁、不易出错。必须用while的情况循环次数无法预知只能靠条件判断。典型例子——让用户一直输入直到输入quit才退出。3.break和continue的使用都可以用在while和for循环里continue:跳过本次循环,执行下次循环语法格式:for item in iterable: if 跳过条件: continue # 处理代码break:结束本次循环for item in iterable: if 跳过条件: break # 结束循环实例:4.循环结合else的基本使用实战效果:5.字符串的基本使用和基本操作5.1.1基本使用三种创建方式:单引号: str hello world双引号创建: str hello world多行字符串创建: str hello world hello world 5.1.2基本操作(增删改查)注意字符串是不可变类型所有的增删改查本质都是通过方法生成一个新的字符串原字符串不改变.1增定义一个原始字符串作为操作对象s hello world 增在原有字符串基础上扩充内容 print( 增拼接 ) 1. 使用 拼接 new_s s python print(new_s) hello world python 2. 使用 * 重复 print(ab * 3) ababab2删定义一个原始字符串作为操作对象 s hello world 删删除字符串中的指定内容 print( 删利用替换实现删除 ) 1. 使用 replace 替换为空字符串实现删除 print(s.replace(l, )) heo word 删除所有l 2. 删除字符串两侧的同时可指定删除的字符 print(###hello###.strip(#)) hello 删除指定的#字符 3. 切片思想保留除了指定位置以外的内容 print(s[:2] s[3:]) helo world 删除索引2位置的字符3改定义一个原始字符串作为操作对象 s hello world 改替换/转换字符串的内容 print( 改替换 ) 1. 替换指定内容 new_s s.replace(world, python) print(new_s) hello python print( 改大小写转换 ) 2. 大小写转换 print(s.upper()) HELLO WORLD 全部转大写 print(s.lower()) hello world 全部转小写 print(hello.capitalize()) Hello 首字母大写 print( 改去除空白 ) 3. 去除字符串两端的空白字符 str_space hello print(str_space.strip()) hello 去掉两端空白 print(str_space.lstrip()) hello__ 去掉左边空白 print(str_space.rstrip()) __hello 去掉右边空白 print( 改分割与拼接 ) 4. 分割与拼接 list1 s.split( ) 按空格分割成列表 print(list1) [hello, world] str_list [a, b, c] print(-.join(str_list)) a-b-c 用-将列表拼接成字符串4查读取字符串中的内容定义一个原始字符串作为操作对象 s hello world 查读取字符串中的内容 print( 查索引取值 ) 1. 通过索引取值正向从0开始反向从-1开始 print(s[0]) h print(s[-1]) d print(s[0:5]) hello 切片含头不含尾 print(s[6:]) world 从索引6到末尾 print( 查查找位置 ) 2. 查找子串的位置 print(s.find(world)) 6返回第一次出现的下标找不到返回-1 print(s.index(o)) 4功能同find找不到会报错 print(s.count(l)) 3统计子串出现次数 print( 查判断 ) 3. 判断 print(s.startswith(he)) True 是否以指定内容开头 print(s.endswith(ld)) True 是否以指定内容结尾 print(hello in s) True 是否存在 print(abc not in s) True 是否不存在5.1.3实战示例:切片操作,注意切片包含开始索引,不包含结束索引,所以结束索引要在原来的位置加1身份证号码信息解析 id input(请输入身份证号码: ) print(f出生日期为:{id[6:14]}) if int(id[-2]) % 2 0: print(性别为女) else: print(性别为男)用户名规范化处理 # strip()表示去除字符串首尾的空格字符 # title()表示每个单词首字母大写,其他字母小写 # capitalize()表示字符串的第一个字符大写,其他字符小写 name input(请输入用户名: ) name name.strip() name name.title() print(name)手机号脱敏显示 # replace()表示替换字符串中的子字符串,将前面的子字符串替换为后面的子字符串 # 注意:切片时,不包含结束索引,包含开始索引 phone input(请输入手机号: ) if len(phone) 11: print(f手机号为:{phone.replace(phone[3:7], ****)}) else: print(手机号格式错误) count phone.count(1) print(f手机号中包含的1的数量为: {count})统计英文句子单词个数与最长单词 # max()表示返回列表中最大的元素,keylen表示根据元素的长度进行比较 sent hello, world. python sent sent.replace(,, ) sent sent.replace(., ) print(sent) list1 sent.split( ) print(list1) print(f单词列表长度为:{len(list1)}) print(f最长单词为:{max(list1, keylen)},长度为:{len(max(list1, keylen))})def highlight(text, keyword): keyword [keyword] if isinstance(keyword, str) else keyword result text for i in keyword: if i in result: result result.replace(i, f**{i}**) else: print(关键词不存在) return text return result print(highlight(我很喜欢python这门语言, python)) print(highlight(我喜欢python和apple, [python, apple])) print(highlight(hello world, java))这里运用isinstance来判断输入内容是否是字符串,然后定义一个新变量来装列表内容,利用for循环结合else实现整体逻辑