Loading...
kalintri avatar kalintri 2 Точки

Триъгълник от звездички с for цикъл - разлика в изхода?

Здравейте, 

Играех си със задачата за триъгълник от звездички с for цикъл и стигнах до следния код, който работи:
 

for row in range(0, 10):
    for c in range(0, row+1):
        print("*", end=' ')
    print("\r")

 

Изхода е: 

* * 
* * * 
* * * * 
* * * * * 
* * * * * * 
* * * * * * * 
* * * * * * * * 
* * * * * * * * * 
* * * * * * * * * * 

Гледах едно от видеата и осъзнах, че може стринг да се изпечатва с просто умножение и реших да пробвам следния код:

for row in range(0, 10):
    for c in range(0, row+1):
        print("*"*c)
    print("\r")

Този код изглежда, че работи до някакава степен, но извежда следния резултат:

*


*
**


*
**
***


*
**
***
****


*
**
***
****
*****


*
**
***
****
*****
******


*
**
***
****
*****
******
*******


*
**
***
****
*****
******
*******
********


*
**
***
****
*****
******
*******
********
*********

 

Това, което не мога да си обясня, е защо във втория случай отпечатва всяка итерация на външния цикъл, докато в първия случай не?
Поздрави, 
Калин

Тагове:
0
Programming Basics
svetoslav_0 avatar svetoslav_0 1009 Точки
Best Answer

Получава се така, защото behind the scenes умножаването на string само по себе си представлява въртене на цикъл. Нещо, което компилаторът прави. Следния ред:

print("-"*5)

би направил същото, като да завърти следния цикъл:

for row in range(0, 5):
    print('-', end='')

От където можем да напрвим заключение, че във втория посочен от теб пример всъщност се въртят общо 3 цикъла:

   - най-вътрешният:

print("*"*c)

   който печата звездички определен брой пъти

   - по-външният:

for c in range(0, row+1):

   който печата всеки един от редовете

   - най-външният

for row in range(0, 10):

   който печата всяка пирамида при всяко свое завъртане

 

Разбира се, зависи какво точно целиш да постигнеш, но ако идеята е просто да се направи пирамида с определен брой редове, мисля че така би станало най-лесно:

for row in range(0,10):
    print("*"*row)

Надявам се, че успях да обясня :)

 

1
01/01/2019 18:58:28
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.