所以我试着制作一个简单的小脚本,它接受一个字符串,切分到一个指定的字符,并用星号(*)替换单词的其余部分。下面的例子。

def multi_blank(strng, ch_count):
    """
    >>> multi_blank("banana", 1)
    'b*****'
    """

当我试图学习切片和索引时,我总是遇到麻烦。我设法切分到指定的数字,但我不知道如何用星星代替这个词的其余部分。
    return strng[:ch_count] + "*" + strng[ch_count:]

上面是我尝试过的,但它返回了以下信息:
Expected:
    'b*****'
Got:
    'b*anana'

我也试过:
    string = strng.replace(strng[ch_count:], '*')
    return string

如果您能提供任何帮助,我们将不胜感激,并简要解释一下是如何做到的谢谢你!

最佳答案

现在,您只需在切片字符串后面附加一个*,然后在它后面添加字符串的其余部分

In [22]: strng = 'banana'

In [24]: strng[:1] + "*" + strng[1:]
Out[24]: 'b*anana'

因此,为了创建字符串的其余部分,可以使用字符串的重载乘法,将*乘以(len(strng) - ch_count)次(感谢@cs95的建议),并将其附加到切片字符串的末尾
来自文档:https://docs.python.org/3/reference/expressions.html#binary-arithmetic-operations
参数必须是数字,或者一个参数必须是整数,另一个必须是序列在前一种情况下,数字被转换成一个公共类型,然后再相乘在一起。在后一种情况下,执行序列重复;负重复因子产生空序列。
In [27]: strng = 'banana'

In [28]: strng[:1] + "*" * (len(strng)-1)
Out[28]: 'b*****'

因此,更新后的代码将
def multi_blank(strng, ch_count):
    """
    >>> multi_blank("banana", 1)
    'b*****'
    """
    return strng[:ch_count] + "*" * (len(strng) - ch_count)

print(multi_blank("banana", 1))

输出将是
b*****

10-07 18:25