생능출판사 (가칭)"데이터과학 파이썬" 코드 5장

5.1 왜 반복이 중요한가

In [1]:
print("파이썬 주식회사의 방문을 환영합니다!") 
print("파이썬 주식회사의 방문을 환영합니다!") 
print("파이썬 주식회사의 방문을 환영합니다!") 
print("파이썬 주식회사의 방문을 환영합니다!") 
print("파이썬 주식회사의 방문을 환영합니다!")
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
In [2]:
for i in range(100): 
    print("파이썬 주식회사의 방문을 환영합니다!") 
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!
파이썬 주식회사의 방문을 환영합니다!

5.3 횟수를 정해놓고 반복시키자

In [3]:
for i in [1, 2, 3, 4, 5]:    # 끝에 :이 있어야 함
    print("방문을 환영합니다.")   # 들여쓰기하여야 함
방문을 환영합니다.
방문을 환영합니다.
방문을 환영합니다.
방문을 환영합니다.
방문을 환영합니다.

5.4 for - in 다음에는 리스트나 문자열도 올 수 있다

In [4]:
for i in [1, 2, 3, 4, 5]:
    print("i=", i)
i= 1
i= 2
i= 3
i= 4
i= 5
In [5]:
for i in "Hello":      # 끝에 :이 있어야 함 
    print("i =", i)    # i 값을 출력해보자
i = H
i = e
i = l
i = l
i = o
In [ ]:
 
In [6]:
for i in [1, 2, 3, 4, 5]:
    print("9*", i, "=", 9*i)
9* 1 = 9
9* 2 = 18
9* 3 = 27
9* 4 = 36
9* 5 = 45

5.5 for 문과의 찰떡 궁합인 range() 함수

In [7]:
for i in range(5):            # (1)
    print("방문을 환영합니다!")   # (2)
방문을 환영합니다!
방문을 환영합니다!
방문을 환영합니다!
방문을 환영합니다!
방문을 환영합니다!
In [8]:
list(range(10))
Out[8]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

5.6 range() 함수는 숫자를 생산하는 공장이다

In [9]:
for i in range(1, 6, 1):
    print(i, end=" ")
1 2 3 4 5 
In [10]:
for i in range(10, 0, -1):
    print(i, end=" ")
10 9 8 7 6 5 4 3 2 1 

LAB5-1 터틀 그래픽으로 여러개의 원을 그려 보자

In [11]:
import turtle
t = turtle.Turtle()

t.circle(100)       # 반지름이 100인 원을 그린다. 
t.left(60)          # 60도 만큼 터틀을 왼쪽으로 회전시킨다. 
t.circle(100) 
t.left(60)    
t.circle(100) 
t.left(60)    
t.circle(100) 
t.left(60)    
t.circle(100) 
t.left(60)    
t.circle(100) 

turtle.done()
try:
    turtle.bye()
except:
    print("bye") 
bye
In [12]:
import turtle
t = turtle.Turtle()

for count in range(6):
    t.circle(100)
    t.left(360/6)
    
turtle.done()
try:
    turtle.bye()
except:
    print("bye")     
bye

LAB5-2 반복을 사용하여 도형을 그리자

In [13]:
import turtle 
t = turtle.Turtle() 
t.shape("turtle") 
 
# 정삼각형 그리기 
for i in range(3): 
    t.forward(100) 
    t.left(360/3)   # 360/3을 통해 120도 왼쪽으로 틀기
 
# 정사각형을 그리기 위하여 터틀을 이동하기 
t.penup()       # 펜 자국이 남지 않도록 펜을 들어서 이동한다
t.goto(200, 0) 
t.pendown()     # 이동을 마치면 펜은 내리도록 한다
 
# 정사각형 그리기 
for i in range(4): 
    t.forward(100) 
    t.left(360/4)   # 360/4를 통해 90도 왼쪽으로 틀기
    
turtle.done()
try:
    turtle.bye()
except:
    print("bye")     
bye

LAB5-3 N-각형 그리기

In [14]:
import turtle
t = turtle.Turtle()
t.shape("turtle")

s = turtle.textinput("", "몇각형을 원하시나요?:")
n=int(s)

for i in range(n):
    t.forward(100)
    t.left(360/n)
    
turtle.done()
try:
    turtle.bye()
except:
    print("bye")     
bye

LAB5-4 술에 취한 거북이를 그리는 랜덤함수

In [15]:
import random 
number = random.randint(1, 100)
In [16]:
import turtle
import random
t = turtle.Turtle()
t.shape("turtle")
 
for i in range(30):
    length = random.randint(1, 100)
    t.forward(length)
    angle = random.randint(-180, 180)
    t.right(angle) 
    
turtle.done()
try:
    turtle.bye()
except:
    print("bye")     
bye

LAB5-5 반복을 이용하여 팩토리얼을 계산하기

In [17]:
n = int(input("정수를 입력하시오: "))
fact = 1
for i in range(1, n+1):
    fact = fact * i
print(n, "!은", fact, "이다.")
정수를 입력하시오: 8
8 !은 40320 이다.

5.7 조건에 따라 반복해서 실행하는 while 문

In [18]:
under_construction = True 
while under_construction:
    response = input("공사가 완료되었습니까?"); 
    if response == "예" :
        under_construction = False

print("루프를 탈출했습니다.")  
공사가 완료되었습니까?예
루프를 탈출했습니다.

LAB5-6 사용자로부터 암호를 받아 로그인하기

In [19]:
password = "" 
while password != "pythonisfun": 
    password = input("암호를 입력하시오: ") 
print("** 로그인 성공 **") 
암호를 입력하시오: pythonisfun
** 로그인 성공 **

5.8 일정한 횟수 반복에 while 사용하기

In [20]:
count = 1
sum = 0
while count <= 10 :
    sum = sum + count
    count = count + 1
print("합계는", sum)
합계는 55
In [21]:
import turtle
t = turtle.Turtle()

i = 0
while i < 4:
    t.forward(100)
    t.right(90)
    i = i + 1
    
turtle.done()
try:
    turtle.bye()
except:
    print("bye")     
bye

LAB5-7 입력받은 수를 사용하는 구구단 출력

In [22]:
dan = int(input("원하는 단은:  "))
i = 1

while i <= 9:
    print("%s*%s=%s" % (dan, i, dan*i))
    i = i + 1
원하는 단은:  7
7*1=7
7*2=14
7*3=21
7*4=28
7*5=35
7*6=42
7*7=49
7*8=56
7*9=63

LAB5-8 while 문으로 별 그리기를 해보자

In [23]:
import turtle
t = turtle.Turtle()
t.shape("turtle")
i = 0
while i < 5:
    t.forward(50)
    t.right(144)
    i = i + 1
    
turtle.done()
try:
    turtle.bye()
except:
    print("bye")     
bye

LAB5-9 간단한 코드로 멋진 나선형 도형 그려보기

In [24]:
import turtle

t = turtle.Turtle()
# 거북이의 속도는 0으로 설정하면 최대가 된다. 
t.speed(0)
t.width(3)

length = 10	  # 초기 선의 길이는 10으로 한다. 
# while 반복문이다. 선의 길이가 500보다 작으면 반복한다.  
while length < 500:	
    t.forward(length)             # length만큼 전진한다. 
    t.right(89)                  # 89도 오른쪽으로 회전한다. 
    length += 5			   # 선의 길이를 5만큼 증가시킨다.
    
turtle.done()
try:
    turtle.bye()
except:
    print("bye")     
bye

LAB5-9 간단한 코드로 멋진 나선형 도형 그려보기

In [39]:
total = 0 
answer = 'yes' 
while answer == 'yes': 
    number = int(input('숫자를 입력하시오: ')) 
    total = total + number 
    answer = input('계속?(yes/no): ') 

print('합계는 : ', total) 
숫자를 입력하시오: 10
계속?(yes/no): yes
숫자를 입력하시오: 20
계속?(yes/no): yes
숫자를 입력하시오: 30
계속?(yes/no): no
합계는 :  60

LAB5-11 무한 반복문으로 숫자 맞추기 게임을 만들자

In [26]:
import random 
 
tries = 0 
guess = 0; 
answer = random.randint(1, 100) 
print("1부터 100 사이의 숫자를 맞추시오") 
while guess != answer: 
    guess = int(input("숫자를 입력하시오: ")) 
    tries = tries + 1 
    if guess < answer: 
        print("낮음!") 
    elif guess > answer: 
        print("높음!") 
 
print("축하합니다. 총 시도횟수=", tries) 
1부터 100 사이의 숫자를 맞추시오
숫자를 입력하시오: 90
높음!
숫자를 입력하시오: 50
높음!
숫자를 입력하시오: 20
높음!
숫자를 입력하시오: 10
높음!
숫자를 입력하시오: 5
낮음!
숫자를 입력하시오: 8
높음!
숫자를 입력하시오: 6
축하합니다. 총 시도횟수= 7

LAB5-12 암산 문제를 만들어보자

In [27]:
import random 
 
i=0    
while True: 
    x = random.randint(1, 100) 
    y = random.randint(1, 100) 
    print(x, '+', y, '=', end = ' ') 
    answer = int(input()) 
    if answer == x + y: 
        print('잘했어요!!') 
    else: 
        print('정답은',x+y,'입니다. 다음번에는 잘할 수 있죠?') 
    i+=1
    if(i==4):
        break;
76 + 67 = 143
잘했어요!!
7 + 25 = 30
정답은 32 입니다. 다음번에는 잘할 수 있죠?
49 + 95 = 130
정답은 144 입니다. 다음번에는 잘할 수 있죠?
64 + 2 = 66
잘했어요!!

LAB5-13 창업자를 위한 기능 : 모든 샌드위치 종류 출력하기

In [28]:
breads = ["호밀빵", "위트", "화이트" ]
meats = ["미트볼", "소시지", "닭가슴살"]
vegis = ["양상추", "토마토", "오이"]
sauces = ["마요네즈", "허니 머스타드", "칠리"]

print('달수네 샌드위치 가게의 가능한 조합')
for b in breads:
    for m in meats:
        for v in vegis:
            for s in sauces:
                print(b+" + "+m+" + "+v+" + "+s)
달수네 샌드위치 가게의 가능한 조합
호밀빵 + 미트볼 + 양상추 + 마요네즈
호밀빵 + 미트볼 + 양상추 + 허니 머스타드
호밀빵 + 미트볼 + 양상추 + 칠리
호밀빵 + 미트볼 + 토마토 + 마요네즈
호밀빵 + 미트볼 + 토마토 + 허니 머스타드
호밀빵 + 미트볼 + 토마토 + 칠리
호밀빵 + 미트볼 + 오이 + 마요네즈
호밀빵 + 미트볼 + 오이 + 허니 머스타드
호밀빵 + 미트볼 + 오이 + 칠리
호밀빵 + 소시지 + 양상추 + 마요네즈
호밀빵 + 소시지 + 양상추 + 허니 머스타드
호밀빵 + 소시지 + 양상추 + 칠리
호밀빵 + 소시지 + 토마토 + 마요네즈
호밀빵 + 소시지 + 토마토 + 허니 머스타드
호밀빵 + 소시지 + 토마토 + 칠리
호밀빵 + 소시지 + 오이 + 마요네즈
호밀빵 + 소시지 + 오이 + 허니 머스타드
호밀빵 + 소시지 + 오이 + 칠리
호밀빵 + 닭가슴살 + 양상추 + 마요네즈
호밀빵 + 닭가슴살 + 양상추 + 허니 머스타드
호밀빵 + 닭가슴살 + 양상추 + 칠리
호밀빵 + 닭가슴살 + 토마토 + 마요네즈
호밀빵 + 닭가슴살 + 토마토 + 허니 머스타드
호밀빵 + 닭가슴살 + 토마토 + 칠리
호밀빵 + 닭가슴살 + 오이 + 마요네즈
호밀빵 + 닭가슴살 + 오이 + 허니 머스타드
호밀빵 + 닭가슴살 + 오이 + 칠리
위트 + 미트볼 + 양상추 + 마요네즈
위트 + 미트볼 + 양상추 + 허니 머스타드
위트 + 미트볼 + 양상추 + 칠리
위트 + 미트볼 + 토마토 + 마요네즈
위트 + 미트볼 + 토마토 + 허니 머스타드
위트 + 미트볼 + 토마토 + 칠리
위트 + 미트볼 + 오이 + 마요네즈
위트 + 미트볼 + 오이 + 허니 머스타드
위트 + 미트볼 + 오이 + 칠리
위트 + 소시지 + 양상추 + 마요네즈
위트 + 소시지 + 양상추 + 허니 머스타드
위트 + 소시지 + 양상추 + 칠리
위트 + 소시지 + 토마토 + 마요네즈
위트 + 소시지 + 토마토 + 허니 머스타드
위트 + 소시지 + 토마토 + 칠리
위트 + 소시지 + 오이 + 마요네즈
위트 + 소시지 + 오이 + 허니 머스타드
위트 + 소시지 + 오이 + 칠리
위트 + 닭가슴살 + 양상추 + 마요네즈
위트 + 닭가슴살 + 양상추 + 허니 머스타드
위트 + 닭가슴살 + 양상추 + 칠리
위트 + 닭가슴살 + 토마토 + 마요네즈
위트 + 닭가슴살 + 토마토 + 허니 머스타드
위트 + 닭가슴살 + 토마토 + 칠리
위트 + 닭가슴살 + 오이 + 마요네즈
위트 + 닭가슴살 + 오이 + 허니 머스타드
위트 + 닭가슴살 + 오이 + 칠리
화이트 + 미트볼 + 양상추 + 마요네즈
화이트 + 미트볼 + 양상추 + 허니 머스타드
화이트 + 미트볼 + 양상추 + 칠리
화이트 + 미트볼 + 토마토 + 마요네즈
화이트 + 미트볼 + 토마토 + 허니 머스타드
화이트 + 미트볼 + 토마토 + 칠리
화이트 + 미트볼 + 오이 + 마요네즈
화이트 + 미트볼 + 오이 + 허니 머스타드
화이트 + 미트볼 + 오이 + 칠리
화이트 + 소시지 + 양상추 + 마요네즈
화이트 + 소시지 + 양상추 + 허니 머스타드
화이트 + 소시지 + 양상추 + 칠리
화이트 + 소시지 + 토마토 + 마요네즈
화이트 + 소시지 + 토마토 + 허니 머스타드
화이트 + 소시지 + 토마토 + 칠리
화이트 + 소시지 + 오이 + 마요네즈
화이트 + 소시지 + 오이 + 허니 머스타드
화이트 + 소시지 + 오이 + 칠리
화이트 + 닭가슴살 + 양상추 + 마요네즈
화이트 + 닭가슴살 + 양상추 + 허니 머스타드
화이트 + 닭가슴살 + 양상추 + 칠리
화이트 + 닭가슴살 + 토마토 + 마요네즈
화이트 + 닭가슴살 + 토마토 + 허니 머스타드
화이트 + 닭가슴살 + 토마토 + 칠리
화이트 + 닭가슴살 + 오이 + 마요네즈
화이트 + 닭가슴살 + 오이 + 허니 머스타드
화이트 + 닭가슴살 + 오이 + 칠리

5.9 무한 루프와 break로 빠져나가기

In [29]:
while True:
   light = input('신호등 색상을 입력하시오:')
   if light == 'green':
       break
print('전진!!')
신호등 색상을 입력하시오:green
전진!!

5.10 루프를 제어하는 고급 기법 : continue와 break

In [30]:
st = 'I love Python Programming'  # 출력을 위한 문자열
for ch in st: 
    if ch in ['a','e','i','o','u', 'A','E','I','O','U']: 
        continue      # 모음일 경우 아래 출력을 건너뛴다 
    print(ch, end='')
 lv Pythn Prgrmmng

5.11 출력을 예쁘게 만드는 포매팅

In [31]:
'{} Python!'.format('Hello')
Out[31]:
'Hello Python!'
In [32]:
 'I like {} and {}'.format('Python', 'Java')
Out[32]:
'I like Python and Java'
In [33]:
'I like {0} and {1}'.format('Python', 'Java')
Out[33]:
'I like Python and Java'
In [34]:
'I like {1} and {0}'.format('Python', 'Java')
Out[34]:
'I like Java and Python'
In [35]:
'I like {0}, {0}, {0}'.format('Python', 'Java')
Out[35]:
'I like Python, Python, Python'
In [36]:
'소수점 아래 두자리 정밀도 : {0:.2f}, 세자리 정밀도 {0:.3f}'.format(1/3)
Out[36]:
'소수점 아래 두자리 정밀도 : 0.33, 세자리 정밀도 0.333'
In [37]:
'전체 10칸을 차지하는 실수 : {0:10.3f}, {0:10.4f}'.format(3.1415926)
Out[37]:
'전체 10칸을 차지하는 실수 :      3.142,     3.1416'
In [38]:
for i in range(2, 11, 2):
 print('{0:3d} {1:4d} {2:5d}'.format(i, i*i, i*i*i))
  2    4     8
  4   16    64
  6   36   216
  8   64   512
 10  100  1000