【100个python算法超详细讲解】@谷哥技术
1.问题描述
现在有一串字符需要输入,规定输入的字符串中只包含字母和“*”符号。请编写程序,实现除了字符
串前后的“*”之外,将串中其他的“*”全部删除。
例如,假设输入的字符串为:****A*BC*DEF*G********,删除串中的“*”后,字符串变为:
****ABCDEFG********。
2.问题分析
该问题需要对字符串进行操作。在Python语言中,可以使用字符串相关的函数结合数组来实现该功
能。
3.字符串
在Python 3中有6种标准的数据类型:Number(数字)、String(字符串)、List(列表或数组)、
Tuple(元组)、Sets(集合)和Dictionary(字典)。
其中String(字符串)用来表示或存储文本数据。Python中的字符串数据通常由单引号('...')、双引
号("...")或者三引号('''...''')、("""...""")包围,其中三引号包围的字符串可以由多行组成。通常情况
下字符串中可以包含数字、字母、中文、特殊符号以及一些不可见的控制字符,如换行符、制表符等。
下面介绍Python中常用的字符串的操作方法。
(1)字符串常用方法
下面是常用的字符串方法。
·str.replace(oldValue,newValue):字符串替换,使用新字符串newValue替换字符串str中的旧字符串
oldValue。
·str.split(str1):分割字符串,使用str1作为分隔符来分割字符串str。
·str.join(str1):合并字符串(连接字符串)。
·str1.startswith(str2):指定字符串str2是字符串str1的开头,返回True或False。
·str1.endswith(str2):指定字符串str2是字符串str1的结尾,返回True或False。
·str1.find(str2):返回字符串str1中第一次出现字符串str2的位置。
·str1.rfind(str2):返回字符串str1中最后一次出现字符串str2的位置。
·str1.count(str2):指定字符串str2在字符串str1中出现的次数。
·str1.strip(str2):去除字符串str1中首尾指定的字符串str2。
·str1.lstrip(str2):去除字符串str1中左边指定的字符串str2。
·str1.rstrip(str2):去除字符串str1中右边指定的字符串str2。
·str.format():格式化字符串。
·len(str):获取字符串的长度。
(2)字符串大小写转换方法
下面是常用的字符串大小写转换方法。
·str.capitalize():产生新的字符串,首字母大写。
·str.title():产生新的字符串,每个单词的首字母大写。
·str.upper():产生新的字符串,所有字符转换为大写。
·str.lower():产生新的字符串,所有字符转换为小写。
·str.swapcase():产生新的字符串,所有字母大小写转换(大写字母转换为小写,小写字母转换为大
写)。
(3)字符串验证方法(以下方法均返回True或False)
下面是常用的字符串验证方法。
·str.isalnum():是否为字母(A~Z/a~z)或数字(0~9)。
·str.isalpha():检测字符串是否只由字母(A~Z/a~z)组成(含汉字)。
·str.isdigit():检测字符串是否只由数字(0~9)组成。
·str.isspace():检测是否为空白字符。
·str.isupper():检测所有的字符是否为都大写字母。
·str.islower():检测所有的字符是否为都小写字母。
·str.istitle():检测字符串中的单词是否为首字母大写。
字符串操作实例代码如下:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 字符串
if __name__ == "__main__":
str1 = "abcd*1234*aaaa*bbb*abcd*ABCabc"
str2 = "Hello World!"
print(str1.capitalize()) # 将字符串的第一个字母大写
print(str1.count('a')) # 获得字符串中a的数目
print(str1.find('abc')) # 获得字符串中abc的起始位置
print("str1字符串长度:" , len(str1))
print("连接字符串:", str1.join('你好'))
print("拼接字符串:", str1 + str2)
print("将字符串中的全部字母转换为大写:", str1.upper())
print("首字母大写:", str1.title())
print("以*分割字符串:", str1.split("*"))
print("使用'*'号重复字符串:", str2*3)
print("替换字符串:", str1.replace('abc', 'def'))
#指定字符串str2是字符串str1的开头,返回True或False
print(str1.startswith(str2))
# 指定字符串str2是字符串str1的结尾,返回True或False
print(str1.endswith(str2))
print("abc在字符串str1中出现的最后位置:",str1.rfind('abc'))
# 去除字符串str1中首尾指定的字符串str2
print("去除字符串str1的首尾字符串abc: ",str1.strip('abc'))
print(str2.isalnum()) # 检测字符串中是否包含0~9、A~Z、a~z
print(str2.isalpha()) # 检测字符串中是否包含A~Z、a~z
print(str2.isdigit()) # 检测字符串中是否仅包含数字
print(str2.islower()) # 检测字符串是否均为小写字母
print(str2.isspace()) # 检测字符串中的所有字符是否均为空白字符
print(str2.istitle()) # 检测字符串中的单词是否为首字母大写
print(str2.isupper()) # 检测字符串是否均为大写字母
在PyCharm下运行程序,运行结果如图8.22所示。
4.算法分析
我们使用最简单的方法来实现,定义一个fun()函数,在函数中遍历这个字符串,将字符串拆分开,并
将每个字符分别存入数组,然后遍历这个数组,判断每个数组字符元素是否是“*”,如果是就替换为空,
然后返回字符串结果。
其中fun()函数定义如下:
def fun(s): a = [0] * len(s) for i in range(len(s)): a[i] = s[i] # 将字符串拆分存入数组 for j in a: if j == '*': j = "" print(j, end="")
5.完整的程序
根据上面的分析,编写程序如下:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 删除“*”符号
"""
实例:输入: ****A*BC*DEF*G********
输出: ****ABCDEFG********
"""
def fun(s):
a = [0] * len(s)
for i in range(len(s)):
a[i] = s[i] # 将字符串拆分存入数组
print("结果:", end="")
for j in a:
if j == '*':
j = ""
print(j, end="")
if __name__ == "__main__":
请输入 个只包含字母和 号的字符串
s = str(input("请输入一个只包含字母和*号的字符串:n"))
print("输入的字符串为:", s)
fun(s)
6.运行结果
在PyCharm下运行程序,结果如图8.23所示。
7.其他方法
本题除了使用数组方法实现之外,还可以使用正则表达式来实现,这里仅提供一个参考实例,代码如下:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 删除“*”符号 正则法
import re
# 删除指定位置的“*”
def fun(s):
result_str = re.sub(r'([a-zA-Z]+)(.+)([a-zA-Z]+)', lambda match: ''.join([m.replace('*', '') for m in match.groups()]), s)
print(result_str)
if __name__ == "__main__":
s = str(input("请输入一个只包含字母和*号的字符串:n"))
print("输入的字符串为:", s)
fun(s)
在PyCharm下运行程序,结果如图8.24所示。
8.拓展训练
规定输入的字符串只包含字母和*号。请编写程序,实现将字符串前面连续的“*”全部删除,中间和尾
部的“*”不删除。例如,字符串的内容为:*******A*BC*DEF*G****,删除后,字符串的内容应当是:
A*BC*DEF*G****。



