5. 별 출력하기

solarrrrr·2021년 7월 18일
0

Python

목록 보기
5/9
post-thumbnail

for문과 while문의 진도가 끝나고
별 찍기 연습문제가 나왔다.

이렇게 계단 형태로 별을 찍되
for문과 if 조건문을 이용하라고 돼 있는데

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

이렇게 하니까 정상적으로 출력됐다.
그런데 문제가 의도하는 바가 아닌 거 같아서
아래 답지를 보았는데...

for i in range(5):          
    for j in range(5):      
        print('j:', j, sep='', end=' ')    
    print('i:', i, '\\n', sep='')    
                             

이런 코드가 제시돼 있었다. (별은 어디에 -_-?)
그리고 이에 대한 결과는 아래와 같다고 한다.

j:0 j:1 j:2 j:3 j:4 i:0\n
j:0 j:1 j:2 j:3 j:4 i:1\n
j:0 j:1 j:2 j:3 j:4 i:2\n
j:0 j:1 j:2 j:3 j:4 i:3\n
j:0 j:1 j:2 j:3 j:4 i:4\n

(별은 어디에 -_-??)

중첩 루프의 예시라고 하는데
왜 연습문제랑 엉뚱한 걸 알려주는 거지..?

소스코드는 구구단처럼 바깥 루프가 1번 돌 때
내부 루프가 5번 돈다는 걸 말하는 거 같은데

이게 별이랑 무슨 상관인가 한참 생각했다.
이게 계단형 별을 찍는 답지라고 적혀 있는데

문제에 조건문을 이용하라고 돼 있는데
조건문도 없고..

그래서 중첩 루프조건문을 이용해서
다시 풀어보았다.

k = 0
for i in range(5):
    for j in range(5):
        if i == k:
            print('*' * (k+1))
            k += 1

뭔가 비효율적이고 어거지 같지만
중첩 루프와 조건문이 들어가야 한다는
조건을 만족하기 위해서 꾸겨넣어보았다.

i가 1번 돌아갈 때 j는 5번을 도는데
그때 i와 k라는 임의의 변수값이 일치할 때
별표를 k값 + 1만큼 찍어주는 코드이다.

k + 1을 한 이유는 각 변수의 인덱스를
0부터 시작했기 때문에

맨 처음 회전에서는 별을 안 찍고 넘어가기에
+1을 해 주었다.

아니면 변수값의 시작을 1부터 시작하면
굳이 +1을 안 해도 될 것이다.

profile
몰입

0개의 댓글