Я хочу написать функцию, которая принимает строку 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 + "*"
но я очень застрял и не могу заставить его работать. Буду признателен за любую помощь. Если вы дадите ответ, было бы неплохо, если бы вы также прокомментировали код.
В настоящее время вы делаете это:
for ch in string:
return ch + "*"
Это непосредственно существует функция. Вместо этого вы хотите создать всю строку, выполнив что-то вроде этого:
chunked_text = chunked_text + ch + "*"
и только после повторения всей строки вы хотите ее вернуть.
попробуй это
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
Я подумал, что было бы проще использовать новую строку (ns) вместо списка, который нужно объединить, просто добавляя каждый символ исходной строки (text = s) с «' после каждого кратного интервала x (проверяется с помощью if multiple_of_x. Чтобы проверить, является ли n (индекс символа s) кратным, я использовал n % x == 0, который равен нулю только для кратного x ( пример: 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*
Превратите его в список, и каждый n-й индекс добавит '*'
, а затем соедините его обратно со строкой.
def string_chunks(string, x):
string = list(string)
for i in range(0, len(string)-1, 5):
string[i] += '*'
return ''.join(string)
Только что заметил, что это домашнее задание. Должен замедляться, когда я читаю ... Пожалуйста, не будьте мной, ОП. Потратьте дополнительное время, чтобы на самом деле выучить язык и освоить хорошие привычки кодирования, поскольку вы ничего не добьетесь, если SO напишет все ваши программы.
Я не буду (и я не думаю, что должен) давать вам код, но вам нужно получить текущий индекс в вашем цикле for (вы можете сделать это, сохранив отдельную переменную или используя enumerate и т. д.) . Продолжайте добавлять каждый символ в результирующую строку. Если индекс mod x равен нулю (т.е. он попадает в x-й символ), добавьте дополнительную звездочку