当前位置: 首页 > news >正文

Python 第 11 节课 - string 与 random 的方法

- 第 93 篇 -
Date: 2025 - 04 - 26
Author: 郑龙浩/仟墨
【Python 在校课堂笔记】

Python 第 11 节课 - string 与 random 的方法

上课时间: 2025-04-14

文章目录

  • Python 第 11 节课 - string 与 random 的方法
  • 一 string 的方法
    • 1 s.split()
    • 2 s.find()
    • 3 s.replace()
    • 4 s.strip / s.lstrip / s.rstrip
    • 5 s.join(sss)
    • 6 s.count(sub)
    • 7 s.maketrans(x, y)
  • 二 random 模块
    • 1 random.random() – `>0`且`<1` 的随机小数
    • 2 random.random(x, y) – 指定范围的随机数
    • 3 random.random(start, stop, [ , step]) – 指定范围和步长的随机数
  • 三 作业
    • 1 问题 `count` 的查找原理是什么,是从前往后寻找的吗???
    • 2 作用
    • 3 原理
      • ① 基本原理
      • ② 特殊情况的处理
    • 4 多次打印进行理解

一 string 的方法

1 s.split()

一串字符串中有多少个单词?

  • split(' ') 以空格为分隔符拆分字符, 并且生成列表
  • len() 会计算这个列表的长度,也就是单词数量
s = 'Big data transforms industries by analyzing massive unstructured information streams efficiently.'
print (len(s.split(' '))) # split以空格为分隔符拆分字符, 并且生成列表,len计算列表长度,print打印
print (len(s.split(' '))) # split自动识别分隔, 并且生成列表, len计算列表长度,print打印

2 s.find()

查找某个字符

示例1 – 查找某字符串

s = "hello world"
index = s.find("world")  # 查找 "world" 的位置
print(index)  # 输出: 6

示例2 – 查找某字符

print("hello".find("l"))  # 输出: 2(第一个 'l' 的索引)
print("hello".find("x"))  # 输出: -1(未找到)

示例3 – 可指定搜索范围

s = "hello world"
print(s.find("o", 5))  # 从索引 5 开始找,输出: 7
print(s.find("o", 1, 4))  # 在索引 1~4 范围内找,输出: 4

3 s.replace()

字符串替换

示例1 – 简单替换

"aaabbb".replace("a", "x")  # "xxxbbb"  

示例2 – 限制替换次数

"aaabbb".replace("a", "x", 2)  # "xxabbb"(只替换前2次)  

示例3 – 删除字符(替换为空字符)

"hello".replace("l", "")  # "heo"  

4 s.strip / s.lstrip / s.rstrip

移除字符串开头或结尾指定的字符,比如移除前导0,空格等

不写参数的话,默认删除空白字符,比如: 空格、\t\n

  • 去除开头结尾的空格 s.strip(' ')
  • 去除开头的空格 s.lstrip(' ')
  • 去除结尾的空格 s.rstrip(' ')
s = ' aaaaabbbbb '
print (s.strip(' ')) # "aaaaabbbbb"去除开头和结尾的空格
print(s.lstrip())  # "aaaaabbbbb "(仅去左侧空格)
print(s.rstrip())  # " aaaaabbbbb"(仅去右侧空格和换行)

5 s.join(sss)

以字符串s作为分隔符,将可迭代对象 sss 中的字符串元素拼接为一个新的字符串

6 s.count(sub)

统计参数sub在字符串中出现的次数

从字符串的开头往后寻找

s = '1212111111' 
print (s.count('12')) # 打印 2 --> 寻找有多少个12
print (s.count('11')) # 打印 3 --> 寻找有多少个11
print (s.count('121')) # 打印 1 --> 寻找有多少个121

思考: count 的查找原理是什么,是从前往后寻找的吗???

7 s.maketrans(x, y)

创建字符映射的转换表,参数是字符串

  • 第一个参数表示需要转换的字符
  • 第二个参数表示转换的目标

凯撒密码,以大小写字母为例,假设偏移量为n

将给定的字符串,转化为映射表里的内容

import string
s = input('输入要加密的字符串: ')
n = int(input('偏移: '))
q = string.ascii_letters
h = string.ascii_lowercase[3:] + string.ascii_lower[:3] + string.asscii_letters

二 random 模块

import random

1 random.random() – >0<1 的随机小数

print ( random.random() )

2 random.random(x, y) – 指定范围的随机数

随机产生 1 ~ 100 的随机整数

print ( random.random(1, 100) )

3 random.random(start, stop, [ , step]) – 指定范围和步长的随机数

随机产生 1 ~ 100 的随机整数,且每个随机数都是 以5为步长产生随机整数 (5 的倍数)

print ( random.random(1, 100, 5) )

三 作业

1 问题 count 的查找原理是什么,是从前往后寻找的吗???

简述作用以及原理

作用 string 中的 的 count 方法用于统计子字符串在原字符串中出现的次数。

原理 通过遍历和匹配逐个检查子字符串的位置,支持指定搜索范围,并处理特殊情况(如空子字符串)


2 作用

  • 为了方便描述,要查找的 子字符串 我用 sss 进行表示,原字符串 我用 s 进行表示
  • 指定的起始位置用 start 表示, 指定的结束位置用 end 表示 –> startend 表示的都是索引

查找的字符区分大小写

  1. 原字符串中查找子字符串

    • 返回子字符串 sss 在原字符串中非重叠出现的次数

    • 如果只写一个参数,也就是只写了要查找的字符串,没有写开始位置结束位置,这样的话默认查找整个字符串

    s = "hello world"
    print(s.count("l"))      # 输出:3('l'出现3次)
    print(s.count("lo"))     # 输出:1("lo"在"hello"中出现1次)
    
  2. 原字符串的指定范围中查找子字符串

    • 范围是 左闭右开,从字符串索引 startend - 1,而不是到 end
    • 如果只写两个参数,则第 2 个参数表示的是结束搜索的索引,而不是开始搜索的索引
    • start:开始的索引
    • end:结束的索引
    s = 'abcdefabc'
    print(s.count('abc', 3))     # 从索引 3 开始搜索,直到结尾,输出:1
    print(s.count('a', 0, 3))    # 从索引0 搜索到 索引 2,输出:1
    
  3. sss 是空字符串 '',返回值为原字符串长度加1

    为什么是这样呢,下面第三个标题原理中写了

    print("abc".count(''))  # 输出:4(空字符串在3个字符间有4个位置) 
    

3 原理

  • 为了方便描述,要查找的 子字符串 我用 sss 进行表述,原字符串 我用 s 进行表述
  • 指定的起始位置用 start 表示, 指定的结束位置用 end 表示 –> startend 表示的都是索引

① 基本原理

找的顺序肯定是从前往后找的

查找的时候是非重叠的,也就是前边查找过的字符是不会查找第二遍的

  • s的起始位置 或 start (指定的起始位置)开始,逐个字符检查是否有与 sss匹配的 子字符串,若找到则累加
  • 每次找到 sss 以后,下一次搜索从当前找到的子字符串的结束位置开始继续向后边搜索 –> 所以是非重叠统计,也就是遍历过的的字符是不会再找第二次了
  • 当查找完以后,返回 查找到的子字符串的数量
  • 查找的时候区分大小写,毕竟大写和小写字母的ASCII值是不同的

② 特殊情况的处理

边界的处理要特殊判断

  • sss 的长度大于 s 的长度,则直接返回 0

  • startend 越界了,则自动调整到有效的索引的边界

    左边界越界则调整左边界到 0,右边界超了则调整右边界到 len(s)

    Eg:

    s = '0123456789'
    print (s.count(s, -1, 13)) # 会自动将范围由 [-1, 13) 调整到 [0, 10), 即调整到有效的索引的边界
    
  • 若没有指定范围时, sss 为空,则返回的长度为 字符串长度 + 1

    因为 空字符串 存在于

    • 所有的字符之间
    • 首个字符的左边
    • 最后一个字符的右边

    加起来就是 总字符串的长度 + 1

  • 若指定返回时,sss为空,则返回 (end - start) + 1,也就是末尾索引的后边 - 开头索引 + 1 (因为时左闭右开,所以end不是查找的最后一字符的索引)

    因为 空字符串 存在于

    • start 到 end - 1 之间
    • start的左边
    • end - 1的右边

    加起来就是 (end - start) + 1

4 多次打印进行理解

s = 'abcabcabc123456123ab'
print(s.count("ab")) # 输出:4
print(s.count("AB")) # 输出:0 --> 查找的时候是区分大写和小写的,毕竟大写字母和小写字母的ASCII值是不同的
print(s.count("")) # 输出:21  --> 长度为20 + 1
print(s.count("ab", 10 )) # 输出:1 --> 从索引 10 开始查找 `ab`
print(s.count("ab", 1, 5 )) # 输出: 1 --> 查找范围为 1 ~ 4

相关文章:

  • 《Vue3学习手记5》
  • 科学养生,开启健康生活新方式
  • 【Flume 】Windows安装步骤、配置环境
  • 深度解析责任链Filter模式:构建灵活可扩展的请求处理管道
  • ngrok 内网穿透技术系统性文档
  • MES系列-MOM(Manufacturing Operations Management,制造运营管理)
  • Eclipse 插件开发 2
  • 深入解析Dify中的文本清洗处理器:CleanProcessor详解
  • NSIS打包
  • 数据存储与安全保障双重buff叠满!极空间NAS『病毒查杀』功能上线,如何妙用?
  • Unity-Shader详解-其二
  • STM32 开发 - stm32f10x.h 头文件(内存映射、寄存器结构体与宏、寄存器位定义、实现点灯案例)
  • DAM-3B,英伟达推出的多模态大语言模型
  • 正确应对监管部门的数据安全审查
  • KEPServerEX 6与西门子1500PLC进行OPC通讯
  • 搜广推校招面经八十二
  • 代码随想录打卡|Day28 动态规划(理论基础、斐波那契数列、爬楼梯、使用最小花费爬楼梯)
  • Pycharm 代理配置
  • 【C】初阶数据结构13 -- 快速排序
  • 【Pandas】pandas DataFrame rmul
  • 辽宁省信访局副局长于江调任辽宁省监狱管理局局长
  • 申花四连胜领跑中超,下轮榜首大战对蓉城将是硬仗考验
  • 南方医科大学原副校长宁习洲主动投案,接受审查调查
  • “全国十大考古”揭晓:盘龙城遗址、周原遗址等入选
  • 漫游者秦龙,一生为经典画插图
  • “2025未来地球:科学与应用大会”在江西景德镇开幕