06.Python字符串

配套视频教程

本文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])

三、字符串的基本判断

image

字符串的基本判断语句可以用来判断字符串中的内容是数字、大小写、是否空白等,这种对字符串的判断语句如果是就返回 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 中主要使用两个函数findindex
(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']

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

综合练习 龟兔赛跑

image.png

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

image.png

用变量跟踪动物的位置(即位置号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('兔赢')

综合练习 猜单词游戏

image

任务目的

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

任务描述

image

需求

给定单词数组(不少于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')
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值