将 Star Growth 与字符串中的字母一起使用

Using Star Growth with letters in a string

我有这个 activity,我必须在字符串中使用星号增长,它随着字符串中字符的数量而增长。这是一个例子:star_match_growth("incandescent", "c") 并将其 return 设置为:inc*andesc**ent 如果字符串中还有更多 c,则继续执行。这是我必须做到的:

def star_match_growth(word, letter):
  builder = ""
  for i in range(0, len(word)):
    word_2 = word.replace(letter, str(star_growth(word.count(letter))))
  return word_2 




def star_growth(top):
  word = top * "*"
  builder = ""
  for i in range(1, len(word) + 1):
    builder += word[0:i] + " "
  return builder[:-1]

print(star_match_growth("incandescent", "c"))

输出为:

inc* **andesc* **ent

注意它也必须忽略大写 请注意,我也不允许将任何内容导入代码 iteself

您可以为 re.sub 提供一个可调用对象(函数、lambda 等),它必须接受单个正则表达式匹配对象作为参数,并且必须 return 一个字符串替换那场比赛。在我的代码片段中,我利用了一个持久的默认参数 it,这是一个产生递增整数的迭代器(在本例中从 1 开始)。迭代器的状态在调用之间保留,这具有将越来越多的星附加到后续匹配的效果:

def star_match_growth(string, pattern):
    import re
    from itertools import count

    def replace(match, it=count(1)):
        return match.group() + ("*" * next(it))

    return re.sub(pattern, replace, string, flags=re.IGNORECASE)


print(star_match_growth("incandescent", "C"))

    

输出:

inc*andesc**ent
>>> 

编辑 - 不利用标准库,而是使用生成字符(有时是星号字符串)的生成器:

def star_match_growth(string, letter):
    num_stars = 1
    for char in string:
        yield char
        if char in {letter.lower(), letter.upper()}:
            yield "*" * num_stars
            num_stars += 1

print("".join(star_match_growth("incandescent", "C")))