Python基础
1.Python基本数据类型
| 按K取值 |
| info_dict = {'姓名': 'Tony', '年龄': 18, '爱好': 'read'} |
| print(info_dict['姓名']) |
| print(info_dict['年龄']) |
| print(info_dict['家产']) |
用户交互
-
输入:向计算机传递信息
- 先获取用户输入的数据
- 再赋值给左边的name
- 然后通过name反复使用用户输入的数据
-
输出:计算机向外界输出信息
- 打印数据值(括号内可以直接放数据值,也可以一次性打印多个值)
格式化输出
- 在python中占位,需要使用占位符
- %s: 支持所有数据类型替换 (使用最多)
- %d: 只支持给数字占位
基本运算符
| + 加 |
| - 减 |
| * 乘 |
| / 除 |
| // 整除 |
| % 取模 |
| **(次方) 幂指数 |
| |
-
逻辑运算符
- and 与:链接的多个条件必须都成立结果才成立(True)
- 连接的条件:如果不是一个具体的值,则需要自动转换成布尔值
- 如果所有的连接符号都是and,只要有一个不符合,后面结果肯定不成立
- 由于and前面的运算得出的布尔值是True,所以and连接的条件最终的结果取决于后面的
- 如果后面的值是明确的数据值 那么直接返回该数据值(数据值对应的布尔值必须是True)
- or 或:链接的多个条件有一个成立结果就成立(True)
- 如果所有的连接符号都是or,只要有一个符合 后面结果肯定成立
- not 非:将条件取反(原本是对的就变成错的,如果是错的就变成对的)
- 三者混合使用,有优先级,如果需要三者混合使用,那么应该加上括号来区别优先级
- and和or连接的多个条件在返回具体结果的时候可能是布尔值也可能是数据值
- 我们在日常写代码的时候不需要纠结具体返回的是什么,直接当成布尔值处理
-
成员运算符
- in 在什么什么之内
- not in 不在什么什么之内
- 列表在做成员运算的时候最小单位是数据值整体,不能再拆分也不能合并
- 字符串在做成员运算的时候最小单位是单个字符,也可以增加字符个数
- 字典在做成员运算的时候只有K会参与运算,V默认不暴露给外界
-
身份运算符
- is 判断数据值的内存地址是否一致(火眼金睛)
- == 判断数据值得值是否一致 地址无所谓
- id() 该方法会返回一串数字 相当于内存地址
- 值相等,内存地址可能不等
- 内存地址相等,值肯定相等(单次程序中)
-
变种情况
| x = x + 1 |
| x = x - 1 |
| x = x * 1 |
| x = x / 1 |
多种赋值符号
| x = 1 |
| y = x |
| x = z |
| x = y = z = 1 |
- 解压赋值:赋值符号的左边至少有两个及以上的名字
- 左边的名字和右边的数据值,个数一致
- 当带解压的数据非常多,在解压赋值的时候会自动将多余的数据值组织成列表赋值给*号后面的变量名
| l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] |
| a, b, *c, d = l1 |
| print(a) |
| print(b) |
| print(c) |
| print(d) |
流程控制
- 流程控制:事物的执行流程
- 事务执行流程:
- 顺序结构:从上往下依次执行
- 分支结构:根据条件的不同执行不同的代码
- 循环结构:根据条件判断是否一直做某件事
2.分支结构
-
基本使用:需要使用关键字if编写分支结构
-
单if分支:条件成立之后执行子代码
- 条件可以是布尔值,也可以是表达式
- 判断条件可以是一个,也可以是由逻辑运算符连接的多个
-
if...else分支
- 条件:条件成立之后执行的子代码
- else条件:条件不成立执行的子代码
- 判断条件可以是一个,也可以是由逻辑运算符连接的多个
-
if...elif...else分支
- if 条件1:条件1成立执行的子代码
- elif 条件2:条件1不成立,条件2成立执行的子代码
- elif 条件3:条件1和2都不成立,条件3成立执行的子代码
- else:上述所有的条件都不成立执行的子代码
- if elif else三者连用,永远只会走一个分支
- elif 和 else都不能单独使用,必须结合if
循环结构
1.while循环
| while True: |
| name = input('name>>>:') |
| pwd = input('pwd>>>:') |
| if name == 'jason' and pwd == '123': |
| print('登录成功') |
| |
| break |
| else: |
| print('用户名或密码错误') |
- while...continue语句
- continue:表示跳过本次循环,接下来继续执行本层循环
- 循环打印1到10(按规矩办事) 但是到了7就跳过
| count = 1 |
| while count < 11: |
| if count == 7: |
| |
| count += 1 |
| |
| continue |
| print(count) |
| count += 1 |
- 结束本次循环 直接开始下一次循环(只影响所在的那一层循环)
| while True: |
| print(123) |
| while True: |
| print(321) |
| continue |
| continue |
- while...else语句
- 如果while循环没有被break掉,则执行else内部代码
| count = 1 |
| while count < 11: |
| print(count) |
| if count == 7: |
| break |
| count += 1 |
| else: |
| print('循环体按照提前定义好的条件正常结束 则会执行') |
2.死循环与全局标志位
| count = 10 |
| while True: |
| count *= 10 |
| |
| while True: |
| name = input('name>>>:') |
3.for循环
| |
| for i in range(1,11): |
| if i == 7: |
| break |
| print(i) |
- for...continue语句
- 通过使用 continue 语句,我们可以停止循环的当前迭代,并继续下一个
- continue也能够结束所在的那一次for循环 直接开始下一次
| |
| for i in range(1, 11): |
| if i == 7: |
| continue |
| print(i) |
- for...else语句
- for 循环中的 else 关键字指定循环结束时要执行的代码块
- else配合for一起使用 当for循环没有被强制结束的情况下 循环体结束之后运行else子代码
| for i in range(10): |
| print(i) |
| if i == 5: |
| break |
| else: |
| print('。。。') |
数据类型的内置方法
- 内置方法:每个数据类型自带的功能(每个人的不同特长)
- 使用数据类型的内置方法统一采用句点符:数据类型.方法名()
1.整型相关方法
2.浮点型相关方法
- 浮点型(float):浮点型由整数部分与小数部分组成
- 类型转换
| print(float('123')) |
| print(type(float('123'))) |
| print(float('123a123')) |
| print(float('123.12')) |
| print(float('123.123.1.2.2.2.2.2.2')) |
| print(float(True)) |
| print(float(False)) |
| print(int(True)) |
| print(int(False)) |
3.字符串相关方法
- 字符串(str):双引号或者单引号中的数据
- 兼容所有数据值
| print(str(123), type(str(123))) |
| print(str(123.11), type(str(123.11))) |
| print(str([1, 2, 3, 4]), type(str([1, 2, 3, 4]))) |
| print(str({'name': 'jason'}), type(str({'name': 'jason'}))) |
| print(str(True), type(str(True))) |
| print(str((1, 2, 3, 4)), type(str((1, 2, 3, 4)))) |
| print(str({1, 2, 3, 4}), type(str({1, 2, 3, 4}))) |
| s1 = 'hello jason!' |
| print(s1[0]) |
| print(s1[-1]) |
| print(s1[-2]) |
- 切片取值:多个字符,支持负数,切片的顺序默认从左往右
| s1 = 'hello jason!' |
| print(s1[0:3]) |
| print(s1[-1:-4]) |
| print(s1[-1:-4:-1]) |
| print(s1[-4:-1]) |
| s1 = 'hello jason!' |
| print(s1[:]) |
| print(s1[::2]) |
| print(s1[0:5:1]) |
| print(s1[0:5:2]) |
| s1 = 'hello jason!' |
| print(len(s1)) # print(len('hello jason!')) 12 空格也算字符 |
| s1 = 'hello jason!' |
| username = input('username>>>:') |
| if username == 'jason': # 'jason ' == 'jason' |
| print('登录成功') |
| else: |
| print('你不是jason!') |
- 字符串调用内置方法,不是改变原数据,而是产生了新的数据
| name = ' jason ' |
| print(len(name)) |
| print(name.strip(), len(name.strip())) |
| res = name.strip() |
| print(name, len(name)) |
| print(res, len(res)) |
| desc1 = '$$jason$$' |
| print(desc1.strip('$')) |
| print(desc1.lstrip('$')) |
| print(desc1.rstrip('$')) |
- 按照指定的字符切割字符串
- 当字符串中出现了连续的特征符号 应该考虑使用切割操作
| info = 'jason|123|read' |
| res = info.split('|') # 切割字符串之后结果是一个列表 |
| print(res, type(res)) # ['jason', '123', 'read'] <class 'list'> |
| name, pwd, hobby = info.split('|') # name, pwd, hobby = ['jason', '123', 'read'] |
| print(info.split('|', maxsplit=1)) # 从左往右 只切一次 ['jason', '123|read'] |
| print(info.rsplit('|', maxsplit=1)) # 从右往左 只切一次 ['jason|123', 'read'] |
| s2 = 'HeLLo Big BAby 666 你过的还好吗' |
| print(s2.lower()) |
| print(s2.upper()) |
| print(s2.islower()) |
| print(s2.isupper()) |
| print('aaa'.islower()) |
| print('AAA'.isupper()) |
- 字符串的格式化输出
- 方式1: 等价于%s占位,没有什么优势
| res1 = 'my name is {} my age is {}' |
| print(res1.format('jason', 18)) |
| res2 = 'my name is {0} my age is {1} {0} {1} {1} {1}' |
| print(res2.format('jason', 18)) |
- 方式3: 支持关键字取值(按k取值),并且支持重复使用
| res3 = '{name} {name} {age} my name is {name} my age is {age}' |
| print(res3.format(name='jason', age=18)) |
| name = 'jason' |
| age = 18 |
| print('my name is {name} my age is {age} {name} {age}') |
| res = 'sdashdjasdwjjkashdjasdjqwhasjdjahdjwqhdjkasdhwsdaadadadaprint(res.count('j')) |
| print(res.count('ad')) |
| res = 'jason say ha ha ha heiheihei' |
| print(res.startswith('jason')) |
| print(res.endswith('heiheihei')) |
| res = 'jason jason jason SB SB SB' |
| print(res.replace('jason', 'tony')) |
| print(res.replace('jason', 'tony', 1)) |
- 字符串的拼接
- 字符串支持加号拼接
- 字符串支持乘号重复
- join方法拼接
- 列表中的数据都必须是字符串类型
| res1 = 'hello' |
| res2 = 'world' |
| print(res1 + res2) |
| print(res1 * 10) |
| print(''.join(['hello', 'world', 'hahaha'])) |
| print('|'.join(['hello', 'world', 'hahaha'])) |
| print('$'.join(['jason', 'say', 666])) |
| print('123'.isdigit()) |
| print('123a'.isdigit()) |
| print(''.isdigit()) |
- 查找某个字符对应的索引值
- index查找索引,如果没有则报错
- find查找索引,如果没有则返回-1
| res = 'hello world jason' |
| print(res.index('d',0,5)) |
| print(res.find('d',0,5)) |
| res = 'my name is jason' |
| print(res.title()) |
| print(res.capitalize()) |
4.列表相关方法
- 列表(list):存储多个数据,能方便获取整体或者局部
- 类型转换:能够被for循环的数据类型都可以转换成列表
| print(type(list(123))) |
| print(type(list(123.22))) |
| print(type(list('123243jasdsad')), list('123243jasdsad')) |
| print(type(list({'name':"jason",'pwd':123})), list({'name':"jason",'pwd':123})) |
| l1 = ['jason', 'kevin', 'oscar', 'tony'] |
| print(l1[0]) |
| print(l1[-1]) |
| l1 = ['jason', 'kevin', 'oscar', 'tony'] |
| print(l1[0:3]) |
| print(l1[:]) |
| print(l1[-4:-1]) |
| l1 = ['jason', 'kevin', 'oscar', 'tony'] |
| print(l1[::2]) |
| l1 = ['jason', 'kevin', 'oscar', 'tony'] |
| print(len(l1)) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了