返回一个新字符串,其中第x个字符(从0开始)后面紧跟*?

时间:2019-05-27 06:50:06

标签: python

我想编写一个函数,该函数需要一个字符串s和一个整数x。它应该返回一个新字符串,其中每个第x个字符(从零开始)后面都带有一个'*'。

到目前为止,我已经尝试了以下代码:

def string_chunks(string, x):
    """
    >>> string_chunks("Once upon a time, in a land far, far away", 5)
    'O*nce u*pon a* time*, in *a lan*d far*, far* away*'
    """
    for ch in string:
        return ch + "*"

但是我非常困惑,无法正常工作。 我将不胜感激任何帮助。如果您提供答案,那么也可以注释代码也很好。

4 个答案:

答案 0 :(得分:2)

将其变成一个列表,每个第n个索引附加一个'*',然后将其重新连接到字符串。

def string_chunks(string, x):
    string = list(string)
    for i in range(0, len(string)-1, 5):
        string[i] += '*'
    return ''.join(string)

答案 1 :(得分:1)

当前,您正在执行此操作:

for ch in string:
        return ch + "*"

该功能立即存在。相反,您想通过执行以下操作来创建整个字符串:

chunked_text = chunked_text + ch + "*"

并且仅在遍历整个字符串之后才想返回它。

答案 2 :(得分:1)

使用新字符串而不是列表

我认为使用新字符串(ns)而不是要连接的列表会更容易,只需在间隔的每一个倍数之后将原始字符串(text = s)的每个字符加上一个'' x(用if multiple_of_x进行检查。要检查n(s的字符的索引)是否是倍数,我使用了n%x == 0,仅对x的倍数等于0(例如:5 10 15, (因为5%5 = 0、15%5 = 0 ....等等)。如果n%x的结果不为0,它将仅添加不带''的字符。

def string_chunks(s,x=5):
    ns = ""
    for n,ch in enumerate(s):
        multiple_of_x = (n % x == 0)
        ns += ch + "*" if multiple_of_x else ch
    return ns

text = "Once upon a time, in a land far, far away"
print(string_chunks(text))

使用列表

也可以通过这种方式完成。

def string_chunks(s,x=5):
    ns = []
    for n,ch in enumerate(s):
        multiple_of_interval = (n % x == 0)
        ns.append(ch + "*") if multiple_of_interval else ns.append(ch)
    ns = "".join(ns)
    return ns

text = "Once upon a time, in a land far, far away"
print(string_chunks(text))

输出

O*nce u*pon a* time*, in *a lan*d far*, far* away*

答案 3 :(得分:0)

尝试

def string_chunks(string, x):
    """
    >>> 
    'O*nce u*pon a* time*, in *a lan*d far*, far* away*'
    """
    count = 0
    newstring = []
    for ch in string:
        count = count + 1
        if count == x:
            newstring.append("*")
            newstring.append(ch)
            count = 0
        else:
            newstring.append(ch)
    return("".join(str(x) for x in newstring))
output_s = string_chunks("Once upon a time, in a land far, far away", 5)
print output_s

输出:

Once* upon* a ti*me, i*n a l*and f*ar, f*ar aw*ay