#python #string #iteration #string-iteration
Вопрос:
Я выполняю это упражнение по кодированию на codewars.com, и я застрял. Я не ищу полного решения. Вместо этого я пытаюсь понять, верны ли мои рассуждения и возможно ли то, что я пытаюсь сделать.
ВВОД: итак, у меня есть строка: «строка». И я хочу напечатать первый символ в этой строке («s») один раз, Второй символ в этой строке («t») дважды, третий символ («r») в этой строке три раза и так далее, до конца строки. ВЫВОД: s-tt-rrr-iiii-nnnnn-gggggg
Единственное, что у меня пока есть, — это перебирать каждый символ в этой строке.
string = "string" for char in string: print(char, end="-")
выход: s-t-r-i-n-g-
Решение, которое я имею в виду, состоит в том, чтобы повторить каждый символ в строке, Напечатать каждый символ * (раз) его место в строке (его порядковый номер) 1
Значение: «S» имеет индекс 0, 1 становится первой буквой, поэтому «s» печатается один раз. «T» имеет индекс 1, 1 становится второй буквой, поэтому «t» печатается дважды …
Затем я попробовал это:
string = "string" for char in string: print(char * string[char], end="-")
Но это не работает, потому что я получаю ошибку типа: строковые индексы должны быть целыми числами.
Затем я подумал: можно ли перебирать каждый символ в строке, присваивать его переменной, а затем использовать переменные для выполнения операций? Это означает, что строка[0] или «s» станет переменной_1 = 1 (первая буква в строке), и я умножаю это на первую букву в строке («s»).
А ты как думаешь? Может ли это сработать, или мое решение далеко?
PS: Я прочитал руководство StackOverflow по заданию вопросов и изо всех сил старался сформулировать свою проблему как можно более четко. Если есть какие-либо советы, как сделать это лучше, я был бы признателен, если бы вы поделились ими со мной. Я учусь программировать и задавать хорошие вопросы, которые приносят пользу моему обучению.
Спасибо, что нашли время прочитать мой вопрос. Стэн
Ответ №1:
enumerate
удобно для получения целочисленного индекса и элемента для каждой итерации.
def f(x): size = len(x) for i, char in enumerate(x): num = i 1 # number of characters if num == size: # don't print - after last character ending = "" else: ending = "-" print(num*char, end = ending) f("string")
Твоя логика была лишь немного неправильной. Если бы мы не использовали enumerate
и просто индексировали строку целыми числами:
def g(x): size = len(x) for i in range(size): num = i 1 # number of characters if num == size: # don't print - after last character ending = "" else: ending = "-" print(num*x[i], end = ending)
Комментарии:
1. Спасибо! С вашим вторым решением я смог увидеть, чего мне не хватало в своих рассуждениях. И я сейчас проверяю перечисление, я этого еще не знал.
Ответ №2:
Тот же вопрос мне задал интервьюер. Я пишу этот код так
код
string = "string" final_data = [] count = 1 for i in list(string): final_data.append(i*count) count = 1 output = "-".join(final_data) print(output)
Ответ №3:
Я понимаю, что вы прочитали руководство по заданию вопросов, мое единственное предложение-использовать блоки кода.
Я пытался решить вашу проблему, вот мой код
x = ["string"] for i in x: p = 0 while p lt; 6: print(i[p]*p) p = 1
Это выводит:
t rr iii nnnn ggggg
Я уверен, что вы можете улучшить это, хорошего вам дня!
Комментарии:
1. Спасибо за ваш ответ и ваше предложение, я отредактировал свой вопрос.