Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с Python

Никита Ямщиков Ученик (15), на голосовании 1 день назад
Помогите понять что не так
Почему
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
*
**
***
****
Без переноса строки, помогите, почему добавляется перенос строки в начале при умножении строк
Голосование за лучший ответ
Антон здравствуйте Профи (694) 1 месяц назад
Ты его не душишь
Никита ЯмщиковУченик (15) 1 месяц назад
А ты видно на мой код его душишь?
FeldsherГуру (4897) 1 месяц назад
Пайтон назван не в честь змеи, а в честь шоу Монти Пайтона
Никита Ямщиков Ученик (15) Feldsher, Так а что с моим кодом
Никита ЯмщиковУченик (15) 1 месяц назад
Это все знаю
Никита ЯмщиковУченик (15) 1 месяц назад
Но видимо не этот чел
Вова Лапушкин Ученик (166) 1 месяц назад
не понимаю что не так, можешь по подробнее сказать что не так?
Никита ЯмщиковУченик (15) 1 месяц назад
Типо когда и вывожу умножение строки на число она еще и перенос строки в начале
Никита ЯмщиковУченик (15) 1 месяц назад
Сам попробуй
Вова ЛапушкинУченик (166) 1 месяц назад
тебе в строчку нужно?
Никита ЯмщиковУченик (15) 1 месяц назад
Не, мне не нужен перенос строки в начале
Вова Лапушкин Ученик (166) Никита Ямщиков, попробуй так: n = int(input()) for i in range(n + 2): res = str("*" * i) print(res, end='')
Никита ЯмщиковУченик (15) 1 месяц назад
Если ставлю end="", то просто все выводит в строку у ведущий перенос строки уходит
Никита ЯмщиковУченик (15) 1 месяц назад
Пробовал до этого
Вова Лапушкин Ученик (166) добавь \r это перенос коретки в начало
Феникс Гуру (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)
Похожие вопросы