Феникс
Гуру
(3681)
1 месяц назад
Давайте разберём ваш код и почему возникают такие отличия в результатах.
Код с умножением строки:
python
Копировать код
n = int(input())
for i in range(n + 2):
res = str("*" * i)
print(res)
Здесь вы используете * i внутри строки "*" * i, что создаёт строку, состоящую из i звёздочек. Например, если i равно 2, то строка будет "**".
При выводе Python автоматически добавляет перенос строки после каждой строки, так как print() по умолчанию завершает вывод символом новой строки (\n).
Пример вывода для n = 3:
markdown
Копировать код
*
**
***
****
Здесь вы получаете ожидаемый результат, так как в каждой строке количество звёздочек увеличивается с каждой итерацией.
Код с фиксированной строкой:
python
Копировать код
n = int(input())
for i in range(n + 2):
res = str("*")
print(res)
В этом варианте вы просто создаёте строку с одной звёздочкой и выводите её в каждой итерации, так что результат остаётся тем же каждый раз, но с новой строкой после каждой звёздочки.
Пример вывода для n = 3:
markdown
Копировать код
*
*
*
*
Если вы хотите, чтобы звёздочки выводились в той же строке, но увеличивались в количестве, попробуйте изменить print(res, end=""), чтобы убрать перенос строки.
Итоговое объяснение
Разница возникает из-за того, что во втором случае вы каждый раз задаёте строку "*", а в первом случае вы создаёте строку с изменяющимся количеством звёздочек, что и приводит к различию в выводе.
Исправление для второго варианта (если хотите создать треугольник звёздочек):
Замените:
python
Копировать код
res = str("*")
на:
python
Копировать код
res = "*" * i
или на более лаконичный вариант:
python
Копировать код
print("*" * i)
Почему
n = int(input())
for i in range(n + 2):
res = str("*" * i)
print(res)
Выводит при n 3
*
**
***
****
А
n = int(input())
for i in range(n + 2):
res = str("*")
print(res)
Выводит при n 3
*
**
***
****
Без переноса строки, помогите, почему добавляется перенос строки в начале при умножении строк