06.Python字符串

    科技2025-09-30  47

    配套视频教程

    本文B站配套视频教程

    一、字符串基本操作方法

    (1)字符串,使用单引号、双引号都可以 (2)取字符串中的字符,如果从前往后取,第一个字符下标为 0,逐一加一;如果从后往前取,最后一个下标是-1,往前逐一减一。 (3)长字符串使用续航符号,反斜杠\,在行尾可以直接按回车使用续航符;或者使用""" """注释符号,可以保留长字符串的样式,保留了其中的空格与回车。 (4)转义字符:具有特殊意义的带反斜杠的字符标记;取消转义:在字符串双引号或者单引号之前加r或者R,使其原样输出,取消转义的功能。 (5)获取字符串的长度:使用len()方法 (6)去除空格:strip()去除前后的空格;rstrip() 去除后边的空格; lstrip() 去除前面的空格。

    str01 = " abc " print(str01.strip()) print(str01.lstrip()) print(str01.rstrip())

    (7)字符串的大小写: 字符串转大写upper(); 字符串转小写lower(); 字符串大小写互换swapcase(); 字符串第一个字母大写capitalize() 字符串内的所有单词的首字母大写title()

    str01 = "hello, world" print(str01.lower()) print(str01.upper()) print(str01.swapcase()) print(str01.capitalize()) print(str01.title())

    输出结果

    hello, world HELLO, WORLD HELLO, WORLD Hello, world Hello, World

    (8)判断字符串是否为空,有两种方法,第一种:通过求字符串的长度是否为 0 来判断;第二种:直接判断是否等于一个空字符串

    str01 = "" print("是否为空",len(str01) == 0) print("是否为空",str01 == "")

    (9)字符串运算符加号和乘号,加号表示连接字符串,乘号表示将字符串输出多少倍。

    二、字符串的反转

    什么是字符串的反转,如果字符串本来是"abcd"反转过来就是”dcba“,那么该如何实现呢? 方法一:使用 for 循环反转字符串

    str01 = "abcd" for i in range(-1,-len(str01)-1,-1): print(str01[i],end="")

    方法二:先把字符串转为 list 再用 reverse 方法逆序输出

    str01 = "abcd" list01 = [] # 把字符串写入list for i in str01: list01.append(i) list01.reverse() for i in list01: print(i,end="")

    方法三:通过字符串切片的方法逆序输出

    str01 = "abcd" print("第三种方法",str01[::-1])

    三、字符串的基本判断

    字符串的基本判断语句可以用来判断字符串中的内容是数字、大小写、是否空白等,这种对字符串的判断语句如果是就返回 True,否则就返回 False 我们从几个案例来巩固一下对这些判断语句的掌握 案例 01:输入密码,要求是数字或者字母,大于 6 位

    str01 = input("请输入密码:") if str01.isalnum() and len(str01) >= 6: print("密码符合要求!") else: print("密码不符合要求!")

    案例 02:输入手机号,要求必须是数字

    str01 = input("请输入手机号码:") if str01.isdigit() and len(str01) == 11: # 一般手机号都是11位数字 print("手机号符合要求") else: print("手机号不符合要求")

    案例 03:输入一段话,统计大写字母、小写字母、数字字符、汉字、其它字符数量

    str01 = input("请输入一段话:") upper_char = 0 lower_char = 0 number_char = 0 chinese_char = 0 other_char = 0 for i in str01: if i.islower(): lower_char += 1 elif i.isupper(): upper_char += 1 elif i.isdigit(): number_char += 1 elif i >= "\u4e00" and i <= "\u9fa5": chinese_char += 1 else: other_char += 1 print("字符串总数%d 大写字母%d 小写字母%d 数字字符%d " "汉字%d 其它字符%d"%(len(str01),upper_char,lower_char,number_char,chinese_char,other_char))

    知识补充:如何判断一个字符是否是汉字,可以通过比较其与汉字的 Unicode 编码的大小来判断,汉字的 Unicode 编码范围:4e00-9fa5 如果i >= "\u4e00" 且 i <= "\u9fa5"则说明字符i是一个汉字。

    四、判断两个字符串是否相等

    判断两个字符串是否相等我们通常有两个办法:等号和is; ==:判断字符串是否相等 is:判断两个字符串是否是同一个对象

    总结:==表示两个字符串内容是否相等;is判断两个字符串是否是同一个对象(存储的内存地址是否是同一个) 如果有有两个字符串虽然内容相同,但是字符串足够的大的话,它们存储的地址也是不同的,故用is判断两个字符串是否是同一个字符串结果则显示为false,所以通常情况下,比较两个字符串是否一致,主要指的是内容是否一致,所以通常是用运算符==

    五、查找字符串

    1. 查找字符串的两种主要方法

    查找字符串在 Python 中主要使用两个函数find和index (1)字符串查找函数:find()

    str01 = "www.yusheng123.cn" print(str01.find("yusheng")) print(str01.find("abc")) # 如果查不到,返回的是-1

    输出结果:

    4 -1

    使用 find 方法,在字符串中如果能够查到,返回的是包含字符串的起始位置的索引;如果查找不到,则返回-1 (2)字符串查找函数:index()

    str01 = "www.yusheng123.cn" print(str01.index("yusheng")) print(str01.index("abcd"))

    输出结果:

    4 Traceback (most recent call last):、、、、、报错

    使用 index 函数查找,如果能够查到,和 find 函数一样,返回的是包含字符串的起始位置的索引;如果查不到就会报错,所以使用 index 函数查找最好使用异常处理防止报错(异常处理的知识上一节我们已经介绍过了)

    # index查找防止查找不到,故使用异常处理 str01 = "www.yusheng123.cn" try: print(str01.index("abcd")) # 如果用index查找,如果查不到就会抛出异常,所以使用索引查找最好使用异常处理 except ValueError as e: print("查找不到!")
    2. 查找字符串的方法

    (1)搜索到多少个指定字符串:

    str.count('t')

    (2)指定起始位置搜索:

    str.find('t',start)

    (3)指定起始位置和结束位置搜索:

    str.find('t',start,end)

    (4)从右边开始查找:

    str.find('t')

    以上的方法都可以用 index 代替,不同的是使用 index 查找不到会抛出异常,而 find 会返回-1

    案例: 生成 500 个数字的字符串,判断”88“出现的次数并打印出现的位置

    import random str_total = "" for i in range(500): str_total += str(random.randint(0,9)) # 出现88的次数 print("生成的字符串出现88的次数:%d"%(str_total.count("88"))) # 打印具体的值 start_index = 0 current = 0 while True: if str_total.find("88",start_index) == -1: break else: current += 1 current_position = str_total.find("88",start_index) print("第"+str(current)+"个88的位置:",current_position) start_index = current_position+1

    输出结果:

    生成的字符串出现88的次数:4 第1个88的位置: 120 第2个88的位置: 264 第3个88的位置: 375 第4个88的位置: 405

    六、判断包含字符串

    1.判断是否包含字符串的两种方法

    (1)判断包含字符串,关键字就是in 判断是否包含字符串可以使关键字 in 来实现:

    str01 = "www.yusheng123.cn" print("str01是否包含yusheng:",("yusheng" in str01))

    输出结果:

    str01是否包含yusheng: True

    (2)使用查找的方法也能实现判断是否包含字符串

    print("str01中是否包含yusheng",str01.find("yusheng") >=0 )

    虽然查找函数返回的是索引但是其结果只要大于 0 就能看成是包含了指定字符串

    2. 判断字符串是否以某个字符串开头或结束

    判断字符串是否以某个字符串开头使用关键字startswith 判断字符串是否以某个字符串结尾使用关键字endswith

    str01 = "https://www.yusheng123.cn" if str01.startswith("https"): print("这个是一个安全加密访问的域名") if str01.endswith("cn"): print("这是一个中国的域名")

    输出结果:

    这个是一个安全加密访问的域名 这是一个中国的域名

    案例: 模拟一个聊天窗口,事先设定一些关键字,如果发送的消息中包含设置的关键字,提示“禁止发送,含有敏感信息!”

    tuple01 = ("垃圾","滚") send_message = input("请输入要发送的信息:") # 通过一个布尔类型的值来判断它是否匹配 is_unsafe = False for i in tuple01: if i in send_message: is_unsafe = True if is_unsafe: print("禁止发送,含有敏感信息!") else: print("发送成功!")

    七、替换字符串

    1. 使用 replace 替换关键字

    替换字符串使用的关键字replace,基本语法是:str.replace(<旧字符串>,<新字符串>)

    str01 = "www.yusheng123.cn" # 把cn换成com print(str01.replace("cn","com"))
    2. 应用场景

    (1)去除空格 最常见的应用的地方是去除空格,我们之前去除空格的使用的strip()方法,但是只能去除字符串前面或者后面的空格,使用replace()能去除所有的空格,包括字符串中间的;

    # 应用:去除空格 str01 = " xiao yu 1926" print(str01) print(str01.replace(" ",""))

    输出结果:

    xiao yu 1926 xiaoyu1926

    (2)多出匹配的情况 如果待替换的字符串中有多处待匹配的地方,一般默认是全部替换,如果想只替换前面几个,可以直接在函数的第三参数声明

    str01 = "abcdabcdabcd" print(str01.replace("ab","12")) # 默认全部替换 print(str01.replace("ab","12",2)) # 只替换前面两个

    输出结果:

    print(str01) abcdabcdabcd 12cd12cd12cd 12cd12cdabcd

    案例: 模拟一个聊天窗口,事先设定一些关键字,如果发送的消息中包含发送的关键字,把发送的信息中包含的关键字用*代替发送。

    special_key_word_tuple = ("垃圾","滚蛋") message = input("请输入要发送的内容:") for i in special_key_word_tuple: if i in message: message = (message.replace(i, "*")) print("要发送的信息为:",message)

    八、拼接字符串

    拼接字符串就是把多个字符串拼接成为一个,我们通常可以使用三种方法拼接字符串 (1)加号拼接

    list_name = ["Tom","Jerry","Bob"] # 加号拼接,并且用逗号隔开 names = "" for i in list_name: names += i + "," print("加法拼接后的字符串为:",names)

    输出结果:

    加法拼接后的字符串为: Tom,Jerry,Bob,

    (2)基本格式化拼接

    name = "%s,%s,%s"%(list_name[0],list_name[1],list_name[2]) print("格式化拼接后的字符串为:",names)

    输出结果:

    格式化拼接后的字符串为: Tom,Jerry,Bob,

    (3)join 拼接 通常是用先定义分隔符,然后使用分隔符对象调用 join 函数,join 函数的参数为待分割的对象,可以是字符串也可以是列表、元组或集合

    sep = "," # 分隔符 list_name = {"Tom","Jerry","Bob"} print(sep.join(list_name))

    输出结果:

    Jerry,Tom,Bob

    九、分割字符串

    分割字符串的操作和我们上面拼接字符串的操作刚好相反,把一个大字符串分割成多个小字符串。通常使用函数时split(),传入的参数是字符串中已经有的字符,以此字符为分割符标记进行分割。

    # 分割字符串 str01 = "Tom,Jerry,Bob,Swift" name_list = str01.split(",") print(name_list)

    输出结果:

    ['Tom', 'Jerry', 'Bob', 'Swift']

    分割完成之后,它返回的是一个列表;

    综合练习 龟兔赛跑

    (模拟龟兔赛跑)本练习中要模拟龟兔赛跑的寓言故事。用随机数产生器建立模拟龟兔赛跑的程序。 对手从70个方格的第1格开始起跑,每格表示跑道上的一个可能位置,终点线在第70格处。 第一个到达终点的选手奖励一个新鲜萝卜和莴苣。兔子要在山坡上睡一觉,因此可能失去冠军。 有一个每秒钟滴答一次的钟,程序应按下列规则调整动物的位置:

    用变量跟踪动物的位置(即位置号1到70)。每个动物从位置1开始,如果动物跌到第1格以外,则移回第1格。 产生随机整数1≤i≤10),以得到上表中的百分比。对于乌龟,1≤i≤5时快走,6≤i≤7时跌跤,8≤i≤10时慢走,兔子也用相似的方法。 起跑时,打印: BANG !!! AND THEY’ RE OFF !!! 时钟每次滴答一下(即每个重复循环),打印第70格位置的一条线,显示乌龟的位置T和兔子的位置H。 如果两者占用一格,则乌龟会咬兔子,程序从该位置开始打印 OUCH!!!。除T、H和OUCH!!!以外的其他打印位置都是空的。 打印每一行之后,测试某个动物是否超过了第70格,如果是,则打印获胜者,停止模拟。 如果乌龟赢,则打印TORTOISE WINS!!!YAY!!!。如果兔子赢,则打印Hare wins.Yush。 如果两个动物同时赢,则可以同情弱者,让乌龟赢,或者打印It’s a tie。如果两者都没有赢,则再次循环,模拟下一个时钟滴答。 准备运行程序时,让一组拉拉队看比赛,你会发现观众有多么投入。

    import time from random import randint print('begin') hPos = 0 tPos = 0 while True: paodao = '_' * 70 num = randint(1,10) if 1<=num<=5: tPos+=3 elif 6<=num<=7: tPos-=6 else: tPos+=1 if num<=2: hPos=hPos elif 3<=num<=4: hPos+=9 elif num==5: hPos-=12 elif 6<=num<=8: hPos+=1 else: hPos-=2 if tPos < 0: tPos = 0 if hPos < 0: hPos = 0 if tPos > 70 or hPos > 70: break if tPos == hPos: # yao paodao = paodao[:tPos] + '咬' + paodao[tPos+1:] else: paodao = paodao[:tPos] + '龟' + paodao[tPos + 1:] paodao = paodao[:hPos] + '兔' + paodao[hPos + 1:] print(paodao) time.sleep(0.3) if tPos > 70: print('龟赢') else: print('兔赢')

    综合练习 猜单词游戏

    任务目的

    1.掌握字符串常用操作 2.掌握随机数的用法 3.掌握控制台基本输入输出 4.掌握循环,分支条件的用法 5.培养编程思维,提高分析问题能力`

    任务描述

    需求

    给定单词数组(不少于10个),程序随机选择其中的一个,并显示单词字符长度个横线(-),用户有5次猜测机会,用户每次猜一个字母,如果正确,则将在相应的位置上显示出来;如错误则猜测机会减一,重复该过程,直至单词的全部字母全部猜出或者猜测次数用完,最后宣布用户胜利或失败。

    实例

    例如随机选出的单词是apple,程序先打印- - - - - 用户输入p,程序打印 -pp– 用户输入e,程序打印 -pp-e 用户输入t,程序打印 -pp-e 您还有4次机会 用户输入a,程序打印 app-e 用户输入l,程序打印 apple 恭喜您,取得胜利。

    任务注意事项

    请注意代码风格的整齐、优雅 代码中含有必要的注释 代码

    import random words = ['program','banana','tiger','policeman','interface'] index = random.randint(0,len(words) - 1) word = words[index] print(word) wordbak = '-' * len(word) print(wordbak) guessTimes = 5 wordlst = list(wordbak) while True: if guessTimes <= 0: break if '-' not in wordlst: break char = input('请输入一个字符:') if char in word: for i,c in enumerate(word): if c == char: wordlst[i] = char else: guessTimes -= 1 print('你还剩下{}次机会'.format(guessTimes)) print(''.join(wordlst)) if guessTimes > 0: print('you win') else: print('you lose')
    Processed: 0.013, SQL: 8