Как мне перебрать каждый символ в строке и умножить его на место в строке?

#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. Спасибо за ваш ответ и ваше предложение, я отредактировал свой вопрос.