“666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”!
本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。
输入格式:
输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。
输出格式:
从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9;但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27。其他内容不受影响,原样输出。
输入样例:
it is so 666 really 6666 what else can I say 6666666666
输出样例:
it is so 666 really 9 what else can I say 27
注意:
根据题意找连续的6,不能单纯的用 str.count("6") 来统计出现次数。
若句子是: 666wrong666 666 ,此时应该原样输出
利用循环计数:
s = input()
i = 0 # i 记录当前连续的 6 的个数
ans = "" # ans 记录翻译后的结果
while i < len(s):
if s[i] == "6":
j = i + 1
while j < len(s) and s[j] == "6":
j += 1
if j - i > 9: # 超过 9 个连续的 6,替换成 27
ans += "27"
elif j - i > 3: # 超过 3 个连续的 6,替换成 9
ans += "9"
else: # 不超过 3 个连续的 6,不需要替换
ans += "6" * (j - i)
i = j
else:
ans += s[i]
i += 1
print(ans)
利用正则表达式
import re
s = input() # 输入字符串
# 定义替换函数
def replace(match):
if len(match.group(0)) > 9: # 超过 9 个连续的 6,替换成 27
return "27"
elif len(match.group(0)) > 3: # 超过 3 个连续的 6,替换成 9
return "9"
else: # 不超过 3 个连续的 6,不需要替换
return match.group(0)
pattern = re.compile(r"6{4,}")
ans = pattern.sub(replace, s)
print(ans)
再次优化
import re
s = input() # 输入字符串
# 匹配超过 3 个连续的 6
if re.search(r'\d6{3,9}', s):
# 替换成 27
s = re.sub('\d6{9,}', '27', s)
# 替换成 9
s = re.sub('\d6{3,8}', '9', s)
print(s)