Wyświetlenie choinki z trójkątów używając pętli for

0

Napisz skrypt wyświetlający choinkę z trójkątów w taki sposób, aby każdy poziom choinki był o 1 wiersz dłuższy:

#
##
#
##
###
#
##
###
####

muszę wykorzystać pętlę for.
jest odpowiedź dotycząca JS: Rysowanie trójkąta z gwiazdek
ale jak to przenieść na Pythona?

2

ale jak to przenieść na Pythona?

No nie wiem, uzywajac skladnii Pythona?

0

Dzięki Captain Obvious.
Tylko najpierw trzeba rozumieć składnię JS.

0
aPsikus napisał(a):

Dzięki Captain Obvious.
Tylko najpierw trzeba rozumieć składnię JS.

A w jakim Ty swiecie zyjesz ze tej skladnii nie znasz? :P Albo to ze nie znasz to p(s)ikus, to ze nie rozumiesz to juz dziwne jest bo tam sa dwa fory i if

0

Masz – z Pascala będzie Ci łatwiej przeportować:

procedure Bush(ABegin, AEnd: Integer);
var
  Module, Line, Mark: Integer;
begin
  for Module := ABegin to AEnd do
    for Line := 1 to Module do
    begin
      for Mark := 1 to Line do
        Write('#');

      Write(LineEnding);
    end;
end;

Pierwsza pętla indeksuje po trójkątach, od rozmiaru początkowego do końcowego, druga indeksuje po liniach trójkąta od 1 do rozmiaru bieżącego trójkąta, a trzecia pętla indeksuje znaki od 1 do długości bieżącej linii. Po narysowaniu danej linii (czyli po pętli indeksującej znaki) trzeba dodatkowo dopisać znak nowej linii.

Choinka podana w pierwszym poście, względem powyższego kodu, posiada rozmiar początkowy 2 (bo pierwszy trójkąt składa się z dwóch linii), a końcowy to 4 (bo ostatni trójkąt składa się z czterech linii).

0
stivens napisał(a):

A w jakim Ty swiecie zyjesz ze tej skladnii nie znasz? :P Albo to ze nie znasz to p(s)ikus, to ze nie rozumiesz to juz dziwne jest bo tam sa dwa fory i if

W takim gdzie JS nie muszę znać. I serio nie rozumiem co tu napisane jest:

var n=5;
var liniaGwiazdek = '';
 
for (var i = 0; i < n; i++) {
    liniaGwiazdek = liniaGwiazdek + '*';
    console.log(liniaGwiazdek );
}

bo ten for jakis dziwny jest

0

to jest for i in range(n):

0
stivens napisał(a):

to jest for i in range(n):

I jak ja to rozumiem, później już nie ma odniesienia do tego n. A nie napisze i+'#'
Chyba, że CKM.

0

@furious programming: jeśli dobrze rozumiem, powstaje coś takiego:

#wysokosc=int(input("Podaj wysokosc choinki: "))
for i in range(1,4):
    for y in range(1,i):
        for z in range(1,y):
            print(z*'#')
0

No mniej więcej, choć nie widzę wyświetlenia znaku nowej linii. No i aby wyświetlić dokładnie taką samą choinkę jaką podałeś w pierwszym poście, rozmiar górnego trójkąta musi wynosić 2, a dolnego 4. Czyli pierwsza pętla for powinna indeksować i od 2 do 4. W przeciwnym razie – dla i = 1 – wyświetlisz choinkę z czubkiem. ;)

0

@furious programming: Ale jak rozumiem Twój kod działa na zmiennych, czyli ustala rozmiar dynamicznie.

Jak bym tych cyfr nie zmieniał nie powstaje choinka.
A koniec lini do której pętli powinien się odnosić?

#wysokosc=int(input("Podaj wysokosc choinki: "))
for i in range(1,4):
    for y in range(1,i):
        for z in range(1,2):
            print(z*'#')
        print("\n")
0
wysokosc = int(input("Podaj wysokosc choinki: "))

for i in range(2, wysokosc):
    for y in range(1, i):
        for z in range(1, y):
            print(z * '#')
        print('\n')

Sprawdź czy zadziała.

0

Wyświetla jeden pojedynczy #
Coś mi ta konwersja nie wyszła :(

Pozmienialem

wysokosc = int(input("Podaj wysokosc choinki: "))
for i in range(1, wysokosc):
    print(i * '#')
    for y in range(1, i):
        print(y * '#')
        for z in range(2, y):
            print(z * '#')
        #print('\n')

i efekt jest taki:

Podaj wysokosc choinki: 4
#
##
#
###
#
##
>>>

1 i 2 OK.
w 3 trzy zamiast dwóch.

0
  1. Napisz program, który wpisze
#
##
###

Czyli "trójkąt" o podstawie 3. Zrób to w pętli.
2. Zmodyfikuj program tak, żeby wypisał trójkąt o podstawie n (podane przez usera) zamiast zawsze 3.
3. Zmodyfikuj program tak, żeby powyższy trójkąt wypisał się 3 razy. (zamknij w kolejnej pętli cały program, poza wyciąganiem danych od usera oczywiście)
4. Zmodyfikuj program tak, żeby powyższy trójkąt wypisał się n (podane przez usera) zamiast zawsze 3.
5. Zmodyfikuj program tak, żeby każdy z trójkątów miał podstawę i, gdzie i oznacza który raz wykonujesz najbardziej zewnętrzną pętlę.
6. Zmodyfikuj program tak, żeby każdy trójkąt miał podstawę o 1 większą, niż w poprzedniej wersji.

I w sumie gotowe? :)

0

Ad1.

for i in range (1,4):
    print(i*'#')

Ad2.

wysokosc = int(input("Podaj wysokosc choinki: "))
for i in range (1,wysokosc):
    print(i*'#')

Ad3 już nie wiem gdzie wstawić tą pętlę. Poza tym to nie jest rozwiązanie.
Te trójkąty mają dojść do jakiegoś poziomu, startować od nowa ale z dodatkową linią, a nie zwielokrotniać się.

0
def bush(begin, end):
    for module in range(begin, end + 1):
        for line in range(1, module + 1):
    	    print(line * '#')
    	    
bush(2, 4)

range(n,m) indeksuje od n do m-1, a print samo zakańcza linię znakiem nowej linii – dlatego wychodziły głupoty.

0
furious programming napisał(a):

a print samo zakańcza linię znakiem nowej linii – dlatego wychodziły głupoty.

Podpowiem od razu OP ze mozna w print podac argument mowiacy czym zakonczyc print("", end="")

0
furious programming napisał(a):

range(n,m) indeksuje od n do m-1, a print samo zakańcza linię znakiem nowej linii – dlatego wychodziły głupoty.

To już chyba było zbyt późno jak dla mnie. Albo zafiksowałem na czymś.

for i in range(2,6):
    for y in range(i,i+1):
        for z in range(1,y+1):
            print(z*'#')
        print("", end="")

Działa jak trzeba :)

0

@iksde:

wysokosc=int(input("Podaj długość podstawy gałęzi: "))
for y in range(1,wysokosc+1):
     for i in range(1,y+1):
          print(i*'#')

wyszedł taki kod.
Tak jak doradzał @furious programming, trzeba obciąć czubek, i zewnętrzna pętla musi się zaczynać od 2.

1 użytkowników online, w tym zalogowanych: 0, gości: 1