파이썬 중첩 루프문(계단식 별 출력), FizzBuzz, 터틀그래픽스

Yeonu·2020년 11월 18일
0

Python 이론

목록 보기
8/30
post-thumbnail
post-custom-banner

중첩 루프 사용하기

for i in range(5):          # 5번 반복. 바깥쪽 루프는 세로 방향
    for j in range(5):      # 5번 반복. 안쪽 루프는 가로 방향
        print('j:', j, sep='', end=' ')    # j값 출력. end에 ' '를 지정하여 줄바꿈 대신 한 칸 띄움
    print('i:', i, '\\n', sep='')    # i값 출력, 개행 문자 모양도 출력
                                     # 가로 방향으로 숫자를 모두 출력한 뒤 다음 줄로 넘어감
                                     # (print는 기본적으로 출력 후 다음 줄로 넘어감)

실행 결과

계단식 별 출력

for i in range(5):        # 0부터 4까지 5번 반복. 세로 방향
    for j in range(5):    # 0부터 4까지 5번 반복. 가로 방향
        if j <= i:                # 세로 방향 변수 i만큼 (j : 0, i : 0 -> 한바퀴, j : 1, i : 1 -> j 0, 1 두바퀴)
            print('*', end='')    # 별 일렬 출력. end에 ''를 지정하여 줄바꿈을 하지 않음
    print()    # 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감
               # (print는 출력 후 기본적으로 다음 줄로 넘어감)



대각선 별 출력

for i in range(5):        # 0부터 4까지 5번 반복. 세로 방향
    for j in range(5):    # 0부터 4까지 5번 반복. 가로 방향
        if j == i:                # 세로 방향 변수와 같을 때
            print('*', end='')    # 별 출력. end에 ''를 지정하여 줄바꿈을 하지 않음
        else:                     # 세로 방향 변수와 다를 때
            print(' ', end='')    # 공백 출력. end에 ''를 지정하여 줄바꿈을 하지 않음
    print()    # 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감
               # (print는 출력 후 기본적으로 다음 줄로 넘어감)



@심사문제 19.6

산 모양 별 출력

height = int(input())
for i in range(height):
    for j in reversed(range(height)):# 공백먼저 출력하고 뒤에 별을 출력하기 위해 reversed사용
        if j > i:
            print(' ' ,end='')
        else:
            print('*',end='') 
            # 여기까지가 산 모양 별의 절반 왼쪽 부분.     
    for j in range(height): # 산 모양 절반 오른쪽 부분.
            if j < i: #꼭대기는 위에서 만들어줬으니 2층부터 한개씩 출력해야한다.
			# i:0, j:0으로 시작해 1층은 안찍힘, 2층부터 끝(height-1)까지 순차로 별이 출력           		
                print('*',end='')
    print()



FizzBuzz

3의 배수에는 Fizz 5의 배수에는 Buzz, 3과 5의 공배수는 FizzBuzz 출력

for i in range(1, 101):
	if i % 3 == 0 and i % 5 == 0: 
    # 이 조건이 아래 있으면 30일 경우 3의 배수 조건에 걸려서 여기까지 도달하지 않는다.
    # 5의 배수도 마찬가지. 제일 먼저 통과하게 해야함
    # if i % 15 == 0: 이 코드는 15가 무슨 의미인지 바로 판단하기 어렵다. 가독성 ↓
		print('FizzBuzz')
	elif i % 3 == 0:
		print('Fizz')
	elif i % 5 == 0:
		print('Buzz')
	else:
		print(i)

코드 줄이기(실무에서는 지양)

for i in range(1, 101):
    print('Fizz' * (i % 3 == 0) + 'Buzz' * (i % 5 == 0) or i)
    # 문자열 곱셈과 덧셈을 이용하여 print 안에서 처리

문자열을 곱하거나 더할 수 있는 기능을 사용

>> 'Fizz' + 'Buzz'
'FizzBuzz'
>> 'Fizz' * True
'Fizz'
>> 'Fizz' * False
''

해당 조건(i % 3 == 0)을 만족하면 True로 곱한 문자 출력, 나머지조건 False로 출력 되지 않음. 둘 다 True일 경우 +연산자로 문자를 더해서 FizzBuzz 출력. 둘 다 False일 경우 or로 넘어가서 i 출력



@심사문제 20.8

입력값 두개 받고 5의 배수이면 Fizz 7의 배수이면 Buzz 둘의 공배수면 FizzBuzz 출력

start,end=map(int,input().split(' ')) 
# input여러개 받을 때 변수 여러개 지정하는 걸 잊음
for i in range(start, end+1):
    if i % 5 == 0 and i % 7 == 0:
        print('FizzBuzz')
    elif i % 5 == 0:
        print('Fizz')
    elif i % 7 == 0:
        print('Buzz')
    else:
        print(i)

터틀 그래픽스로 그림 그리기

임포트하기

>>> import turtle as t
>>> t.shape('turtle')

거북이 조종하기
앞으로 이동: forward, fd
뒤로 이동: backward, bk, back
왼쪽으로 회전: left, lt
오른쪽으로 회전: right, rt

정사각형 그리기

import turtle as t
t.shape('turtle')
t.fd(100)
t.rt(90)
t.fd(100)
t.rt(90)
t.fd(100)
t.rt(90)
t.fd(100)

다각형 그리기

import turtle as t
n = int(input())        # 사용자의 입력을 받음
t.shape('turtle')
for i in range(n):      # n번 반복
    t.forward(100)
    t.right(360 / n)    # 360을 n으로 나누어서 외각을 구함

다각형 색칠하기

import turtle as t
n = 6    # 육각형
t.shape('turtle')
t.color('red')          # 펜의 색을 빨간색으로 설정
t.begin_fill()          # 색칠할 영역 시작
for i in range(n):      # n번 반복
    t.forward(100)
    t.right(360 / n)    # 360을 n으로 나누어서 외각을 구함
t.end_fill()            # 색칠할 영역 끝

복잡한 도형 그리기

import turtle as t
n = 60    # 원을 60번 그림
t.shape('turtle')
t.speed('fastest')      # 거북이 속도를 가장 빠르게 설정
for i in range(n):
    t.circle(120)       # 반지름이 120인 원을 그림
    t.right(360 / n)    # 오른쪽으로 6도 회전
import turtle as t
t.shape('turtle')
t.speed('fastest')      # 거북이 속도를 가장 빠르게 설정
for i in range(300):    # 300번 반복
    t.forward(i)        # i만큼 앞으로 이동. 반복할 때마다 선이 길어짐
    t.right(91)         # 오른쪽으로 91도 회전
post-custom-banner

0개의 댓글