Python 学习笔记 字符串的功能与方法

一、字符串基础功能:

1.什么是字符串:

简单讲用引号包裹的就是字符串,可以是单引号或双引号。

2.字符串的基础操作:

创建字符串:

# 创建空字符串
s = ''
# 创建非空字符串
s = 'hello Lily'

字符串索引:

s = 'hello Lily'
print(s[0]) # h
print(s[1]) # e
print(s[-1]) # y

字符串切片:

s = '你是我的 甜心 小宝贝儿'
print(s[6:]) # 心 小宝贝儿
print(s[4:7])#  甜心
print(s[::-1])  # 儿贝宝小 心甜 的我是你

字符串的拼接,重复,成员判断:

# 5.拼接
print("昨夜星光闪闪" + "我爱你的心满满") #昨夜的星闪闪爱你的心满满

# 6.重复
print("下蛋公鸡,公鸡中的战斗机,欧耶!" * 3) # 下蛋公鸡,公鸡中的战斗机,欧耶!下蛋公鸡,公鸡中的战斗机,欧耶!下蛋公鸡,公鸡中的战斗机,欧耶!

# 7.成员
print("a good" in "today is a good day!")  # True

字符串遍历:

s = "hello"
    for c in s:
        print(c)  # 每个字符
    
    for i in range(len(s)):
        print(i, s[i])  # 下标
    
    for i,c in enumerate(s):
        print(i, c)  # 下标,字符

字符串的不可变性:

s = "hello"
# s[0] = "a"  # 报错
s = s + " world"
print(s)  # 'hello world'

总结:字符串(str)与列表(list)大部分基础操作相同。

二、字符串常用方法:

统计子串个数:

s = "hello"
print(s.count('ll')) # 1
print(s.count('lll')) # 0

字符串的大小写转换:

print("hello".upper())  # HELL 变成大写
print("HELLo1".lower())  # hello1 变成小写
print("i loVE you".title())  # I Love You 每个单词首字母大写,其他变成小写
print("i loVE you".capitalize())  # I love you 整个字符串首字母大写,其他变成小写
print("i loVE you".swapcase())  # I LOve YOU 大小写切换


字符串的判断方法:

# 1.判断是否数字
print('1'.isdigit())  # True 
# 2.判断是否字母
print('abc'.isalpha())  # True 
# 3.判断是否字母或数字 
print('abc123'.isalnum())  # True 
# 4.判断字母是否小写 
print("abc123,".islower())  # True  
# 5.判断是否大写
print("ABC123,".isupper())  # True   
# 6.判断是否是title格式
print("Hello".istitle())  # True
# 7.判断是否只有空格   
print('   '.isspace())  # True   

字符串的查找方法:

# find() : 从左往右查找子字符串第一次出现的下标, 如果不存在则返回-1
# rfind() : 从右往左查找子字符串第一次出现的下标, 如果不存在则返回-1
s = 'Hong Kong driver diagnosed'
print(s.find('ong'))  # 1
print(s.find('ong2'))  # -1
print(s.rfind('ong'))  # 6
print(s.rfind('ong2'))  # -1

# 下面的不常用
# print(s.index('ong'))  # 1
# print(s.index('ong2'))  # 报错
# print(s.rindex('ong'))  # 6
# print(s.rindex('ong2'))  # 报错


字符串的合并与拆分:

拆分/分割


# split(): 按照指定的字符串进行拆分,返回一个拆分之后的列表
s = "I love   you"
list1 = s.split()  # ['I', 'love', 'you']
list1 = s.split(" ")  # ['I', 'love', '', '', 'you']
list1 = s.split("love")  # ['I ', '   you']
list1 = s.split('hello')  # ['I love   you']
list1 = s.split('you')  # ['I love   ', '']
list1 = s.split('o', 1)  # ['I l', 've   you'], 按照前1个o来拆分
print(list1)

# splitlines() : 按行拆分
s = '''论语
吾日三省吾身
为人谋而不忠乎
与朋友交而不信乎
传不习乎
'''
print(s.splitlines())  # ['论语', '吾日三省吾身', '为人谋而不忠乎', '与朋友交而不信乎', '传不习乎']
print(s.splitlines(True))  # ['论语\n', '吾日三省吾身\n', '为人谋而不忠乎\n', '与朋友交而不信乎\n', '传不习乎\n']
print(s.split('\n'))  # ['论语', '吾日三省吾身', '为人谋而不忠乎', '与朋友交而不信乎', '传不习乎', '']


连接/合并

#   join() : 将列表中的所有字符串用指定的连接字符串合并
l = ['论语', '吾日三省吾身', '为人谋而不忠乎', '与朋友交而不信乎', '传不习乎']
print( '+'.join(l) )
# 论语+吾日三省吾身+为人谋而不忠乎+与朋友交而不信乎+传不习乎

print( '\n'.join(l) )
#论语
#吾日三省吾身
#为人谋而不忠乎
#与朋友交而不信乎
#传不习乎

print( '===='.join(l) )
# 论语====吾日三省吾身====为人谋而不忠乎====与朋友交而不信乎====传不习乎


字符串替换:

s = 'mask have tesla tesla tesla'
s = s.replace('mask', '王传福')
print( s.replace('tesla', 'BYD') )  # 王传福 have BYD BYD BYD
print( s.replace('tesla', 'BYD', 2) )  # 王传福 have BYD BYD tesla
print(s)  # 王传福 have tesla tesla tesla

编码和解码:

# 编码: 字符串=>二进制
s = "Python 牛!"
b = s.encode()  # 默认UTF-8编码, b'Python \xe7\x89\x9b!'
print(b)

# 解码: 二进制=>字符串
s2 = b.decode()
print(s2)  # 'Python 牛!'

字符串首尾匹配:

s = 'hello kitty'
print(s.startswith('hell'))  # True
print(s.endswith('tty'))  # True

ASCII码转换:


print(ord('a'))  # 97
print(chr(100))  # d

运算字符串中数据:

# eval():
print(eval("1+2"))  # 3
l = eval("[1,2,3]")
print(l, type(l))  # list

三、实战练习:用Python实现歌词解析:

musicLrcStr = """[00:03.50]传奇
[00:19.10]作词:刘兵 作曲:李健
[00:20.60]演唱:王菲
[00:26.60]
[04:40.75][02:39.90][00:36.25]只是因为在人群中多看了你一眼
[04:49.00]
[02:47.44][00:43.69]再也没能忘掉你容颜
[02:54.83][00:51.24]梦想着偶然能有一天再相见
[03:02.32][00:58.75]从此我开始孤单思念
[03:08.15][01:04.30]
[03:09.35][01:05.50]想你时你在天边
[03:16.90][01:13.13]想你时你在眼前
[03:24.42][01:20.92]想你时你在脑海
[03:31.85][01:28.44]想你时你在心田
[03:38.67][01:35.05]
[04:09.96][03:39.87][01:36.25]宁愿相信我们前世有约
[04:16.37][03:46.38][01:42.47]今生的爱情故事 不会再改变
[04:24.82][03:54.83][01:51.18]宁愿用这一生等你发现
[04:31.38][04:01.40][01:57.43]我一直在你身旁 从未走远
[04:39.55][04:09.00][02:07.85]
"""

# 先将所有的时间和歌词放在列表中

# 按行拆分
lrc_list = musicLrcStr.splitlines()

# 列表存放所有时间和歌词
music_list = []

# 遍历每一行歌词
for lrc in lrc_list:
    # print(lrc)  # 其中的每一行歌词内容

    # 按']'拆分
    line_list = lrc.split(']')
    # print(line_list)

    # 歌词内容
    lrc_content = line_list.pop()
    # print(line_list)

    # 遍历每一行的所有歌词时间
    for lrc_time in line_list:
        lrc_time = lrc_time[1:]  # 将'['去掉

		# 将提取出来的时间与歌词存入字典当中
        music_dict = {'time': lrc_time, 'content': lrc_content}
        
        # 将存放单句时间歌词的字典存入歌词列表中
        music_list.append(music_dict)
        

# 列表中字典按'time'升序排列
music_list.sort(key=lambda a:a['time'])

import time

# 用于存放前一句歌词的时间
sec = 0
for d in music_list:
	# 取出当前时间
    t = d['time'] 
    # 将时间转换成秒
    i = t.find(':')
    t2 = float(t[:i])*60 + float(t[i+1:])  # 秒
	
	# 调用time.seelp()方法暂停歌词显示时间
    time.sleep(t2 - sec)  # 暂停
    
    # 将本句歌词时间传入sec之中
    sec = t2
	# 打印当前歌词
    print(f'{d["time"]} : {d["content"]}')

四、习题:

1.输入一个字符串,压缩字符串如下aabbbccccbbd变成a2b3c4b
2,将字符中单词用空格隔开
3.去掉字符串123@zh@qq.com中的@;
4.已知字符串 s = “aAsmr3idd4bgs7Dlsf9eAF”,要求如下
a.请将s字符串的大写改为小写,小写改为大写
b.请将s字符串的数字取出,并输出成一个新的字符串
c.请统计s字符串出现的每个字母的出现次数(忽略大小写,a与A是同一个字母)

上期习题答案:

1.声明一个字典保存一个学生的信息,学生信息中包括:
姓名、年龄、成绩(单科)、电话、性别(男、女、不明)

studt1 = {'name': '张山', 'age': 22, 'sl': 55, 'tel': 13504128857, 'sex': '男'}
studt2 = {'name': '小花', 'age': 12, 'sl': 66, 'tel': 13504128832, 'sex': '女'}
studt3 = {'name': '流浪', 'age': 23, 'sl': 78, 'tel': 13504568838, 'sex': '不明'}
studt4 = {'name': '兰妃', 'age': 16, 'sl': 99, 'tel': 13504127632, 'sex': '女'}
studt5 = {'name': '李刚', 'age': 25, 'sl': 33, 'tel': 13504147968, 'sex': '男'}
studt6 = {'name': '沈晓花', 'age': 46, 'sl': 88, 'tel': 13504176828, 'sex': '不明'}

2.声明一个列表,在列表中保存6个学生的信息(6个(题1)中的字典)

s = [studt1, studt2, studt3, studt4, studt5, studt6]

(1) 统计不及格学生的个数

n = 0

for i in range(len(s)):
    if s[i]['sl'] < 60:
        print(s[i]['name'])
        n += 1
print('不及格的人数为:', n)
)


(2) 打印不及格学生的名字和对应的成绩

for i in range(len(s)):
    if s[i]['sl'] < 60:
        print(s[i]['name'], s[i]['sl'])


(3) 统计未成年学生的个数

n = 0

for i in range(len(s)):
    if s[i]['age'] < 18:
        print(s[i]['name'], s[i]['age'])
        n += 1

print(n)

(4) 打印手机尾号是8的学生的名字

for i in range(len(s)):
    if s[i]['tel'] % 10 == 8:
        print(s[i]['name'], s[i]['tel'])

(5)删除性别不明的所有学生(选做)

i = 0
while i < len(s):
    if s[i]['sex'] == '不明':
        s.pop(i)
        i - = 1
    i += 1
print(s)
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python学习笔记|字符串与正则表达式练习题答案 1. 练习题1: 题目:给定一个字符串s,找出其中的连续的最长的数字串。 答案:可以通过正则表达式来匹配数字串,然后使用max函数找出最长的。 代码示例: import re def find_longest_num_str(s): num_str_list = re.findall('\d+', s) longest_str = max(num_str_list, key=len) return longest_str s = "ab1234c56789def" print(find_longest_num_str(s)) 输出:56789 2. 练习题2: 题目:给定一个字符串s,将其中的每个空格替换为"%20"。 答案:可以通过正则表达式的sub函数来实现替换。 代码示例: import re def replace_space(s): new_s = re.sub(' ', '%20', s) return new_s s = "Hello World" print(replace_space(s)) 输出:Hello%20World 3. 练习题3: 题目:给定一个字符串s,判断它是否为回文字符串。 答案:可以使用切片操作将字符串反转,然后与原字符串进行比较。 代码示例: def is_palindrome(s): return s == s[::-1] s = "abcba" print(is_palindrome(s)) 输出:True ### 回答2: 以下是关于字符串和正则表达式练习题的答案: 1. 给定一个字符串s,编写一个函数,返回该字符串的反转字符串。 def reverse_string(s): return s[::-1] 2. 给定一个字符串s,编写一个函数,返回是否是回文字符串。 def is_palindrome(s): return s == s[::-1] 3. 给定一个字符串s和一个字符c,编写一个函数,返回字符串s中字符c的出现次数。 def count_char(s, c): return s.count(c) 4. 给定一个字符串s,编写一个函数,返回字符串s中的所有单词列表。 def split_words(s): return s.split() 5. 给定一个字符串s,编写一个函数,返回字符串s中的所有数字列表。 import re def extract_numbers(s): return re.findall(r'\d+', s) 这只是一些可能的答案,其中的解决方法可以有很多种。每个问题都有不同的解决方案,具体取决于个人的编程风格和需求。希望这些答案能够帮助你理解和学习Python中的字符串和正则表达式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值