21天Python计划:基础语法与课外练习

devtools/2025/4/1 13:58:15/

文章目录

    • 前言
    • 基本概念
    • 注释与字符串
    • 数据类型
    • 列表(List)
    • 过滤与排序
    • 循环
    • 字典(Dictionary)
    • 字典循环
    • 运算符
    • 列表与字典的复制
    • 字典拾遗
    • 三元运算
    • 进制
    • 元组
    • 集合
    • 不可变集合
    • 字符串操作
    • 常用字符串方法
    • 字符编码的转换
    • 字符编码长度
    • 数据类型
    • 注意点
    • 学习例子
    • 结语

前言

Python是一种强大且易于学习的编程语言。通过这个21天的计划,我们将逐步深入基础语法与课外练习。无论你是初学者还是有一定基础的开发者,这个计划都将帮助你巩固和扩展你的Python知识。

在学习本篇之前,我们先复习一下前面的内容:
21天Python计划:Python下载和开发工具介绍
21天Python计划:数据类型、字符编码、文件处理

基本概念

Python 是一种强类型的动态语言。强类型意味着变量类型在运行时是固定的,动态语言意味着变量类型可以在运行时改变。

注释与字符串

  • 单行注释: #这个是真的注释,只适用于单行。
    • 例如: #这是一个单行注释
  • 多行注释: 三个单引号 ‘’’ 或者三个双引号 “”"代表把里面的内容变成字符串,也可以是注释。
    • 例如:
      python">'''
      这是一个多行注释
      可以跨越多行
      '''
      
  • 字符串规则: 单引号不可以引双引号。
    • 例如: “这是一个字符串” 或者 ‘这也是一个字符串’

数据类型

  • 数字类型: int(整型),long(长整型),float(浮点型),复数。
    • int: 例如 10
    • float: 例如 10.5
    • 复数: 例如 1 + 2j
  • 布尔型: bool,TRUE,FALSE,真假。
    • True: 表示真
    • False: 表示假
  • 字符串: str。
    • 字符串转bytes: 字符串.encode(“utf-8”)
      • 例如: “hello”.encode(“utf-8”)
    • 去除空白: strip()默认脱行首和行尾的空格,和换行符。
      • 例如: " hello ".strip()返回 “hello”
    • 分割: split(),默认把一个字符串按空格分割成 list类型。
      • 例如: “hello world”.split() 返回 [“hello”, “world”]
    • 长度: len()统计字符串的元素长度。
      • 例如: len(“hello”)返回 5
    • 索引: index()左边从0开始,最后从-1开始。例如:name.index(‘alex’)。
      • 例如: “hello”.index(‘e’)返回 1
    • 切片: name[0:4],name[-3:-1]原则顾头不顾尾,把-1改成0就可以切出来 zxy。
      • 例如: “hello”[0:4] 返回 “hell”
    • 步长切片: name[0::2] 隔一个切一个,2叫步长,默认步长是1。
      • 例如: “hello”[0::2]返回 “hlo”
    • 查看数据类型: type()。
      • 例如: type(“hello”)返回 <class ‘str’>
    • 查看内存地址: id()。
      • 例如: id(“hello”)返回内存地址

列表(List)

  • 列表: 有序的。
    • 查找索引: name.index(3)。
      • 例如: [1, 2, 3].index(3)返回 2
    • 切片: name[1:3],name[3:]。
      • 例如: [1, 2, 3, 4][1:3] 返回 [2, 3]
    • 插入: name.insert(5, 3)。
      • 例如: [1, 2, 3].insert(1, 4) 返回 [1, 4, 2, 3]
    • 统计元素个数: name.count(3)。
      • 例如: [1, 2, 3, 3].count(3) 返回 2
    • 追加: name.append(2) 。
      • 例如: [1, 2].append(3) 返回 [1, 2, 3]
    • 删除并返回: name.pop(3),如果不加索引值,默认是从后往前一个一个删除的。
      • 例如: [1, 2, 3].pop() 返回 3
    • 删除元素: name.remove(2),默认删除第一个。
      • 例如: [1, 2, 3].remove(2) 返回 [1, 3]
    • 删除位置: del name[1] ,不加值就会删除 list。
      • 例如: del [1, 2, 3][1] 返回 [1, 3]
    • 修改元素: name[1] = 4。
      • 例如: [1, 2, 3][1] = 4 返回 [1, 4, 3]
    • 排序: name.sort(),从小到大,相反的就是 name.reverse(),相同的数据类型才可以排序。
      • 例如: [3, 1, 2].sort()返回 [1, 2, 3]
    • 清除元素: name.clear(),name还在。
      • 例如: [1, 2, 3].clear()返回 []
    • 合并列表: name.extend(age),和 name = name + age一样。
      • 例如: [1, 2].extend([3, 4])返回 [1, 2, 3, 4]
    • 推荐初始化: l = [],把指针转移,id()查看。
      • 例如: l = []

过滤与排序

  • 过滤数字: filter(str.isdigit, a)。
    • 例如: list(filter(str.isdigit, “a1b2c3”)) 返回 [‘1’, ‘2’, ‘3’]
  • 字符与ASCII码转换:
    • chr(65)返回字符。
      • 例如: chr(65) 返回 ‘A’
    • ord(‘A’)返回ASCII码。
      • 例如: ord(‘A’) 返回 65
  • 最大值与最小值: max(1, 2, 3),min(1, 3, 2, 4)。
    • 例如: max(1, 2, 3) 返回 3
  • 排序: sorted(l, reverse=True)。
    • 例如: sorted([3, 1, 2], reverse=True) 返回 [3, 2, 1]`

循环

  • for循环while循环 都有 else,当循环正常结束走 else。
    • 例如:
      python">for i in range(3):print(i)
      else:print("循环结束")
      
  • break: 跳出本层循环。
    • 例如:
      python">for i in range(3):if i == 1:breakprint(i)
      
  • continue: 跳出本次循环。
    • 例如:
      python">for i in range(3):if i == 1:continueprint(i)
      
  • 退出多层循环: 定标志位,设定一个条件退出循环。
    • 例如:
      python">flag = False
      for i in range(3):for j in range(3):if i == 1 and j == 1:flag = Truebreakif flag:break
      
  • 退出程序: sys 模块的 exit。
    • 例如:
      python">import sys
      sys.exit()
      

字典(Dictionary)

  • 字典: key-value(键值对),键是唯一的不可变数据类型,字典是无序的。
    • 查询效率: 字典查询效率远高于列表,利用空间换取时间。
    • 取值: info[‘addr’]。
      • 例如: info = {‘addr’: ‘Beijing’},info[‘addr’] 返回 ‘Beijing’
    • 嵌套取值: info[‘addr’][‘xianaddr’]。
      • 例如: info = {‘addr’: {‘xianaddr’: ‘Guanlan’}},info[‘addr’][‘xianaddr’] 返回 ‘Guanlan’
    • 添加值: info[‘addr’][‘xianaddr’].append(‘guanlan’)。
      • 例如: info = {‘addr’: {‘xianaddr’: []}}info[‘addr’][‘xianaddr’].append(‘Guanlan’)返回 {‘addr’: {‘xianaddr’: [‘Guanlan’]}}
    • 修改值: info[‘age’] = 21。
      • 例如: info = {‘age’: 20},info[‘age’] = 21 返回 {‘age’: 21}
    • 添加键值对: info[‘hoppy’] = ‘linux’。
      • 例如: info = {},info[‘hoppy’] = 'linux’返回 {‘hoppy’: ‘linux’}
    • 获取值: info.get(‘name’),如果没有也不报错。
      • 例如: info = {},info.get(‘name’) 返回 None
    • 判断键是否存在: ‘addr’ in info。
      • 例如: info = {‘addr’: ‘Beijing’},‘addr’ in info返回 True
    • 删除键值对: info.pop(‘age’),会返回删除的 value。
      • 例如: info = {‘age’: 21},info.pop(‘age’) 返回 21
    • 随机删除: info.popitem()。
      • 例如: info = {‘age’: 21},info.popitem() 返回 (‘age’, 21)
    • 删除元素: del info[‘addr’]。
      • 例如: info = {‘addr’: ‘Beijing’},del info[‘addr’] 返回 {}
    • 获取所有键: info.keys()。
      • 例如: info = {‘age’: 21},info.keys() 返回 dict_keys([‘age’])
    • 获取所有值: info.values()。
      • 例如: info = {‘age’: 21},info.values() 返回 dict_values([21])
    • 更新字典: info.update(info2),如果 key 存在,就会变成新值,不存在就添加。
      • 例如: info = {‘age’: 21},info.update({‘age’: 22}) 返回 {‘age’: 22}

字典循环

  • 遍历字典:
    python">for i in info:print(i, info[i])
    
    • 例如: info = {‘age’: 21},for i in info: print(i, info[i]) 输出 age 21
  • 遍历键值对:
    python">for k, v in info.items():print(k, v)
    
    • 例如: info = {‘age’: 21},for k, v in info.items(): print(k, v) 输出 age 21

运算符

  • 整除: 10 // 3。
    • 例如: 10 // 3 返回 3
  • 取余: 10 % 3,算奇偶数的时候用的多。
    • 例如: 10 % 3 返回 1
  • 非整除: 10 / 3,在 Python 2 中是整除。
    • 例如: 10 / 3 返回 3.3333333333333335
  • 不等于: !=,在 Python 2 中还有 <>,在 Python 3 中没有。
    • 例如: 1 != 2 返回 True
  • 身份运算:
    • type(‘zxy’) is str 判断 'zxy’是不是 str 类型,相反 is not。
      • 例如: type(‘zxy’) is str 返回 True
  • 布尔运算:
    • 空列表、空字典、空元组、空集合、空字符串、0 都是为假。
      • 例如: bool([]) 返回 False
  • 位运算:
    • & 与运算:两位为真就为真1。
      • 例如: 1 & 1 返回 1
    • | 或运算:有一个为真就为1。
      • 例如: 1 | 0 返回 1
    • ^异或运算:位与位对比不相同为1。
      • 例如: 1 ^ 0返回 1
    • ~取反符:二进制取反,按位取反在加1。
      • 例如: ~1 返回 -2
    • << 左移:就是相乘,整体往左移一位。
      • 例如: 1 << 1 返回 2
    • **>>**右移:就是相除,整体往右移一位,这里是取整的。
      • 例如: 2 >> 1 返回 1

列表与字典的复制

  • 列表的复制:
    python">a = [1, 2, 3, ['zxy', '20']]
    b = a.copy()
    a[3][1] = 'alex'
    # b 也会跟着变,除了这个 list 里面的 list 其他的都不会跟着变。
    
    • 例如: a = [1, 2, 3, [‘zxy’, ‘20’]],b = a.copy(),a[3][1] = ‘alex’,b 返回 [1, 2, 3, [‘zxy’, ‘alex’]]
  • 字典的复制:
    python">acount = {'name': 'zxy', 'info': [20000, 50]}
    acount2 = acount.copy()
    acount2['name'] = 'alex'
    print(acount, acount2)
    acount['info'][1] += 200
    print(acount, acount2)
    
    • 例如: acount = {‘name’: ‘zxy’, ‘info’: [20000, 50]},acount2 = acount.copy(),acount2[‘name’] = ‘alex’,print(acount, acount2) 输出 {‘name’: ‘zxy’, ‘info’: [20000, 50]} {‘name’: ‘alex’, ‘info’: [20000, 50]},acount[‘info’][1] += 200,print(acount, acount2)输出{‘name’: ‘zxy’, ‘info’: [20000, 250]} {‘name’: ‘alex’, ‘info’: [20000, 250]}

字典拾遗

  • fromkeys:
    python">info = {}
    info.fromkeys([1, 2, 3], 'test')
    # 输出: {1: 'test', 2: 'test', 3: 'test'}
    info.fromkeys([1, 2, 3], {})
    # 输出: {1: {}, 2: {}, 3: {}}
    
    • 例如: info = {},info.fromkeys([1, 2, 3], ‘test’) 返回 {1: ‘test’, 2: ‘test’, 3: ‘test’}
    • 例如: info = {},info.fromkeys([1, 2, 3], {}) 返回 {1: {}, 2: {}, 3: {}}

三元运算

python">a = 3
b = 5
c = a if a < b else b  #如果a小于b把a赋值给c,否则把b赋值给c
# 只能if else,不能多个条件,而且else后面只能一个单纯的值
c = a if a < b else (3 if 3 < 5 else 9)  # 这样也是可以的

进制

python">八进制是逢八进一			OCT八进制
十六进制0123456789ABCDEF	hex 十六进制	BH	0x
128 64 32 16 8  4   2   1 		换成二进制
1   0  1  1  1	0	1	0	18611				10			四位一个十六进制B				A			换算成十六进制

元组

  • tuple元组:和列表一样,唯一不同的是只读列表,明确表示元组里的数据是不可以更改的。
  • dir():查看对象所有方法,以列表形式返回。
  • 可用方法:
    • index
    • count
python">name = ('zxy', '20')
list(name)   # 转换成list
tuple(name)  # 转换成tuple

集合

  • set集合:关系测试,天然去重,无序,set内的元素是不可变数据类型。
  • 集合操作:
    • 交集:两个都有
    • 差集:在a里面有b里面没有
    • 并集:把两个合并,并且去重
    • 对称差集:互相都不在的,我有你没有的,你有我没有的
python"># 查找元素 'sb' in linux
linux = {'alex', 'jack', 'sb', 'lijie'}
python = {'alex', 'eric', 'lijie'}print(linux.intersection(python))  # 交集
print(linux & python)                # 交集
print(linux.difference(python))      # 差集
print(linux - python)                # 差集
linux.difference_update(python)      # 差集,并赋值给原来的集合
print(linux, python)
print(linux.union(python))           # 并集
print(linux | python)                 # 并集
linux.update(python)                  # 并集,但会改变原来的集合
print(linux)
print(linux.symmetric_difference(python))  # 对称差集
print(linux ^ python)                  # 对称差集
linux.clear()                          # 清空
linux.add('haha')                      # 增加
linux.discard('sb')                    # 删除,元素不存在不报错
linux.pop()                             # 随机删除
#linux.remove('alex')                   # 删除,元素不存在会报错print(linux.issubset(python))          # 子集
print(linux.issuperset(python))        # 超集

在这里插入图片描述

不可变集合

python">a = frozenset([1, 2, 3])  # 不可变集合,所以他可以作为字典的key

字符串操作

python">str
IN = '12345'
OUT = 'abcde'
trans_table = str.maketrans(OUT, IN)
print(name.translate(trans_table))  # 做一个str翻译

常用字符串方法

  • strip
  • center
  • count
  • find
  • lower
  • upper
  • join
  • split
  • endswith
  • startswith
python">name = 'alexeeee'
print(name.capitalize())                # 首字母大写
print(name.casefold())                  # 大写全变小写
print(name.center(50, '*'))             # 字符填充
print(name.count('e', 4))               # 从第四个开始统计e
print(name.count('a'))
print(name.endswith('e'))                # 以什么结尾
name2 = 'alex\teee'
print(name2.expandtabs(10))              # 设置tab键长度
print(name.find('e'))                    # 返回第一个索引位置
print(name.find('ee', 3))                # 从第几个找起
print(name.find('yy'))
name3 = '{name},{age}'
print(name3.format(name='alex', age=20))  # 格式化输出
name5 = 'my name is {0}, age is {1}'
print(name5.format('alex', '20'))        # 格式化输出
name4 = 'name:%s, age:%s'
print(name4 % ('alex', '20'))
print(name3.format_map({'name': 'alex', 'age': '20'}))  # 以字典格式传入
print(name.index('l'))                    # 返回索引值
print('1a'.isalnum())                     # 判断所有的字符是不是数字
print(name.isdecimal())                   # 判断是不是十进制数字
print('10'.isdecimal())                   # 判断是不是正整数
print(name.isdigit())                     # 判断是不是数字
print(name.isalpha())                     # 是不是字母
print('2a'.isidentifier())                # 是不是合法的关键字
print('A'.islower())                      # 是不是小写
print('a'.isupper())                      # 是不是大写
print('123.0'.isnumeric())                # 是不是数字
print('a'.isprintable())                  # 是不是可打印的
print('a '.isspace())                     # 是不是空格
print(name.title())                       # 首字母大写
print('Alex'.istitle())                   # 判断是不是首字母大写
print('*****'.join(name))                 # 分割成字符串
print('.'.join(['alex', 'age', 'oldboy']))  # 把列表分割成字符串
print(name5.ljust(20, '-'))               # 左对齐
print(name5.rjust(20, '-'))               # 右对齐
print('ALEX'.lower())                     # 变小写
print('alex hah'.rfind('a'))             # 从右边开始找
print("My name".lstrip('My'))            # 脱左边
print(name.swapcase())                    # 大小写互换

在这里插入图片描述

字符编码的转换

  • 在Python 2中是ASCII码。
  • 在Python 3中,默认编码是Unicode,解释器读取文件默认是以UTF-8格式。
  • 如果在Windows里保存的文件格式是GBK,读取时需要解码。
python">#!/usr/bin/env python
# coding:utf-8name = '中国'  # utf-8格式编码
print(name)
print([name])  # 十六进制
print([name.decode('utf-8')])  # .encode('gbk')
gbka = name.decode('utf-8').encode('GBK')  # 转换成gbk
print(gbka.decode('GBK').encode('gb2312'))  # 乱码处理
print(gbka.decode('GBK'))  # 自动转换

字符编码长度

  • Unicode显示字符长度:UTF-16用len计算是2个字节
  • UTF-8显示字节编码长度:用len计算是6个字节
  • GBK显示字节编码长度:向下兼容GB2312

数据类型

  • bool
  • str 只是人类可读的抽象表示形式
  • int
  • float
  • list
  • tuple
  • dict
  • set
  • bytes 二进制类型

注意点

  1. Unicode,UTF-8,GBK都是编码规则。
  2. 内存存储Unicode,解码,编码,省硬盘和流量。
  3. 程序执行前和执行后的两个状态:编码(明文和二进制的数字)。

学习例子

python">#!/usr/bin/env python
# coding:utf-8menu = {'北京': {'海淀': {'五道口': {'soho': {},'网易': {},'google': {}},'中关村': {'爱奇艺': {},'汽车之家': {},'youku': {},},'上地': {'百度': {},},},'昌平': {'沙河': {'老男孩': {},'北航': {},},'天通苑': {},'回龙观': {},},'朝阳': {},'东城': {},},'上海': {'闵行': {"人民广场": {'炸鸡店': {}}},'闸北': {'火车站': {'携程': {}}},'浦东': {},},'山东': {},
}last_layer = []  # 记录输入的上一层所有的地址
current_layer = menu  # 当前层while True:for key in current_layer:print(key)  # 打印当前层choice = input(">>:").strip()  # 输入你要进入的层,并且脱去空格if len(choice) == 0:continue  # 如果输入为空,跳出当前循环if choice in current_layer:  # 如果输入的值在字典里面last_layer.append(current_layer)  # 记录上一层的位置current_layer = current_layer[choice]  # 进入下一层if choice == 'b':  # 如果输入为b,删除上一层,并且进入上一层if last_layer:  # 如果列表不为空current_layer = last_layer.pop()if choice == 'q':break  # 退出程序

在这里插入图片描述

结语

通过这个21天的Python计划,我们涵盖了基础语法与课外练习。希望这些内容能帮助你更好地理解和使用Python。继续学习和实践,你将成为一名优秀的Python开发者!🚀🚀


http://www.ppmy.cn/devtools/172330.html

相关文章

第四章:优化字符串的使用:案例研究_《C++性能优化指南》notes

优化字符串的使用&#xff1a;案例研究 第四章重难点解析与代码实战多选题多选题答案与解析设计题设计题答案与解析 第四章重难点解析与代码实战 1. 原版问题代码分析 代码清单4-1&#xff1a;未优化的remove_ctrl()函数&#xff1a; #include <string>std::string rem…

GPT-SoVITS本地部署:低成本实现语音克隆远程生成音频全流程实战

文章目录 前言1.GPT-SoVITS V2下载2.本地运行GPT-SoVITS V23.简单使用演示4.安装内网穿透工具4.1 创建远程连接公网地址 5. 固定远程访问公网地址 前言 今天要给大家安利一个绝对能让你大呼过瘾的声音黑科技——GPT-SoVITS&#xff01;这款由花儿不哭大佬精心打造的语音克隆神…

web3包含哪些关键技术栈,一些成功使用场景的分享

Web3的技术栈及其应用场景可归纳为以下六个核心模块&#xff0c;各模块均通过不同技术组合实现去中心化生态的构建&#xff1a; 一、关键技术栈及对应场景 ‌区块链与共识机制‌ 技术实现&#xff1a;以太坊、波场TRON等公链底层&#xff0c;结合PoW&#xff08;工作量证明&am…

Contactile三轴触觉传感器:多维力感赋能机器人抓取

在非结构化环境中&#xff0c;机器人对物体的精准抓取与操作始终面临巨大挑战。传统传感器因无法全面感知触觉参数&#xff08;如三维力、位移、摩擦&#xff09;&#xff0c;难以适应复杂多变的场景。Contactile推出的三轴触觉力传感器&#xff0c;通过仿生设计与创新光学技术…

IP大洗牌ipv6强势来袭!!!【ipv6配置及应用】

前言 随着时代的发展&#xff0c;IPv4&#xff08;互联网协议第四版&#xff09;已逐渐无法满足全球互联网爆炸式增长的需求。自20世纪80年代诞生以来&#xff0c;IPv4凭借其简洁的架构和约43亿的地址容量&#xff0c;支撑了互联网的早期扩张。然而&#xff0c;在移动互联网、物…

Java IO框架体系深度解析:从四基类到设计模式实践

Java IO框架体系深度解析&#xff1a;从四基类到设计模式实践 一、IO流体系架构总览 1.1 四基类设计哲学 Java IO框架以InputStream、OutputStream、Reader、Writer四个抽象类为根基&#xff0c;构建了完整的流式IO体系。这种设计体现了以下核心原则&#xff1a; 抽象分层&a…

R语言——循环

参考资料&#xff1a;学习R 在R中有三种循环&#xff1a;repeat、while和for。虽然向量化意味着我们可能并不需要大量使用它们&#xff0c;但在需要重复执行代码时&#xff0c;它们是非常有用的。 1、重复循环 R中最容易掌握的循环是repeat。它所做的事情就是反复地执行代码&a…

LLM架构解析:NLP基础(第一部分)—— 模型、核心技术与发展历程全解析

本专栏深入探究从循环神经网络&#xff08;RNN&#xff09;到Transformer等自然语言处理&#xff08;NLP&#xff09;模型的架构&#xff0c;以及基于这些模型构建的应用程序。 本系列文章内容&#xff1a; NLP自然语言处理基础&#xff08;本文&#xff09;词嵌入&#xff0…