我想编写一个函数,该函数需要一个字符串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 + "*"
但是我非常困惑,无法正常工作。 我将不胜感激任何帮助。如果您提供答案,那么也可以注释代码也很好。
答案 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