---------------------------------------------------第4道题--------------------------------------
-- coding: utf-8 --
@Time : 2021/11/30 15:27
@Author : Celeste
@FileName: 20211130.py
@Email : 2522046452@qq.com
@Software: PyCharm
@Blog :https://www.jianshu.com/u/71ff901eeee2
1、找出一个字符串中的连续5个数字,要求数字前后必须是非数字
匹配要求的字符串,使用正则,re
s ="23445d12334rk43455"
# search,有一个分组,把一个分组作为结果
p = re.search('\D(\d{5})\D',s)
print(p)
#结果:
print(p.group(0))
# 结果:e23445d,将前后的字母也带上
print(p.group(1))
# 结果:23445,准确
# findall,找到所有的,返回列表
s1 ="e23445d12334rk4nnn"
result1 =print(re.findall(r'\D(\d{5})\D',s))
# 结果: ['23445'],没有找到所有
s2 ="e23445d123345rk4nnn"
result2 =print(re.findall(r'\D{0,}(\d{5})\D',s))
# 结果:['23445', '23345'],找的不准确
#没有很好的匹配方式,可适合所有的字符串
2、给定字符串 S ="i Am a gOod boy bady!!",判断一个字符串中字母是否全部为小写
方法一:判断小写,chr() = 97-123
方法二:import string
string.ascii_lowercase:小写字母
方法三:遍历所有字符串,使用正则,只要有一个非小写则返回False
#使用re.search
import re
S ="i Am a gOod boy bady!!"
def judge_all_lower():
if re.search(r'[^a-z]',s): #如果用findall,则返回是列表,有结果非空,返回False
return False
return True
#使用re.match
import re
def judge_all_lower(S):
for c in S:
if re.match(r'[^a-z]',c)is None:
return False # return 函数中的关键字
return True
S ="i Am a gOod boy bady!!"
print(judge_all_lower(S))
3、统计一个文件中单词的数量
"""
Python is a programming language that let you work more quickly and integrate your systems more effectively.You can learn to use Python and see almost immediate gains in productivity and lower maintenance costs.learn more about Python
"""
import re
with open(r'd:\\file.txt','r') as file_obj:
content = file_obj.read()
words1 = re.findall(r'\b[a-zA-Z]+',content)
words2 = re.findall(r'\b[a-zA-Z]+\b',content)# +\b更全面
print(len(words2))
#\b单词匹配边界,\b不可匹配数字边界,其他都可匹配;单词[a-zA-Z]
4、比如[1,3,5,7,8,25,4,20] 25前面的总和为24,25后面的总和也是24,25这个点就是平衡点,假如一个数组中的元素,其前面的部分等于后面的部分,那么这个点的为序就是平衡点?写程序实现,给定任何一个列表,找到它的所有平衡点和对应索引位置;
'''
思路:1+3+5+7+8 = 25 = 4+20
遍历第一个数开始,是不是等于第二个数,不是就第一个数+第二个数,是不是等于第三个数
1、遍历所有的数;
2、取到当前数,前面的数总和,和后面的数的总和;
3、如果前r位总和 = r+1位后面的数总和,
4、加入到结果中(字典)
count(list[:r])= count(list[r+1:])
#dic1 = {}
def get_balance_point(L1):
dic1 = {}
# 遍历
for rin range(len(L1)):
if sum(L1[:r]) ==sum(L1[r+1:]):#求和,sum
#dic1.append(L1[r])
dic1[L1[r]] = r#找到平衡点,及对应的索引位置,按字典形式输出
return dic1
if __name__ =='__main__':
L1 = [1,3,5,7,8,25,4,20]
L2 = [1,1,2,0,0,1,2,1]# 不太可能多个平衡点
print(get_balance_point(L1))
print(get_balance_point(L2))
网友评论