一、前言
在叶庭云混迹的一个学习气氛挺好的交流群里,某一天一位铁子求教一道题,引发了群友们的热烈讨论,一起来看看吧!
手机截图下来图片有点儿大~~,用 opencv resize 处理一下,然后用电脑 QQ 截图,还有用马赛克保护群友头像隐私。
代码语言:javascript复制img1 = cv.imread(r"D:testpicjietu_01.jpg")
img1 = cv.resize(img1, dsize=None, fx=0.5, fy=0.5)
img2 = cv.imread(r"D:testpicjietu_02.jpg")
img2 = cv.resize(img2, dsize=None, fx=0.5, fy=0.5)
cv.imshow("img1", img1)
cv.imshow("img2", img2)
cv.waitKey(0)
题目如下:
看起来还挺容易的,字母–后面跟数字的话这个字母就 num 个,没有跟数字就一个。但实践出真知嘛,写代码测试才知道。
二、动手写代码
Python代码三行搞定?
代码语言:javascript复制str1 = "A3B5C8"
ls1 = [i if i.isalpha() else str1[index_ - 1] * (int(i) - 1) for index_, i in enumerate(str1)]
print("".join(ls1))
结果如下:
可事情好像没有那么简单,当后面跟的数字大于 10 的话,输出结果就不对了,如下所示:
那这样呢?
代码语言:javascript复制import re
def func(s):
return "".join([c * int(count) for c, count in re.findall("(D )(d )", s)])
func("a10b3c10")
结果如下:
这下对了吧,后面跟的数字大于 10 的话,输出结果也对了,可细心的群友又发现了问题,像 abc10 这样输出结果不对诶!如下所示:
数字插入的位置有无,是否大于 10 都需要考虑到,不然输出会有问题,可能不能写得那么简洁优雅了,简单粗暴干掉它!
代码语言:javascript复制str2 = "a10b10c"
ls = []
for i in range(len(str2)):
num = ""
if str2[i].isalpha(): # 是字母
# 查找后面跟的数字 拼出来
for j in range(i 1, len(str2)):
if str2[j].isdigit():
num = str2[j]
# print(num)
# 开始又是字母了 break
else:
break
# 字母重复 然后添加进列表 没有重复 直接添加
if num:
ls.append(str2[i] * int(num))
else:
ls.append(str2[i])
# 输出
print("".join(ls))
结果如下:
终于搞定啦~~
代码如下:
代码语言:javascript复制s = "ddeeeeaaddccccc" # 2 4 2 2 5
start_str = s[0] # 初始字母
count, ls = 0, []
# 遍历
for i in range(len(s)):
if s[i] == start_str: # 还是等于初始字母是 统计个数
count = 1
# 到最后一个字母 这里添加 因为后面已经无了
if i == len(s) - 1:
ls.append(start_str str(count))
else:
# 已经开始不为初始字母了 之前那个添加到列表
# 更新初始字母和count
ls.append(start_str str(count))
start_str, count = s[i], 1
print("".join(ls))
结果如下:
总结:学编程,很多题目可能并不像看起来那样简单,实践出真知,动手才能发现问题,多思考才能解决问题,切忌眼高手低!