본문 바로가기
정보

인공지능 활용을 위한 파이썬 기초_04 반복문 : 코드의 반복 줄이기

by 모오오어 2020. 9. 19.
반응형
SMALL

 

 

 

 

04 반복문 : 코드의 반복 줄이기

 

같은 코드를 반복해서 적는 것은 번거로운 일!

한 작업을 여러 번 반복하게 하는 방법은 없을까요?

반복되는 명령을 줄여주는 반복문에 대해 배워봐요!

 

 

 

 

반복분 (1) for문

for i in [1,2,3]

 

 

 

원소로 반복하기, for문!

지난 시간에 다뤘던 시퀀스에서, 우리는 시퀀스 안의 각각의 원소에 대해 조건을 확인하거나, 원소를 모두 더하는 등을 해야할 필요가 생겼습니다.

그런데 시퀀스의 원소가 많아지면 같은 작업을 반복해서 해야합니다. 이 과정이 복잡하기에 사람들은 시퀀스의 원소에 따라 효과적으로 반복할 수 있는 문법을 만들어내었고, 그것이 for문 입니다.

 

 

이렇게 해봐요!

  1. 다음 코드를 따라 적어봅시다.

다음을 생각해봅시다.

  • print()문이 몇 번 실행되었나요? nums의 길이만큼, nums안의 원소 수 10번만큼 실행
  • 위 for문에서 i의 역할은 무엇인가요? i는 변수로 원소를 이 변수에 잠시 저장
  • for문은 언제 사용하는것이 좋을까요? 원소에 대해 반복할 때
  • for문의 변수 이름은 마음대로 지어도 될까요? 변수이름은 제한된 이름 안에서 가능

 

쌀과 씰! 구분할 수 있나요?

변수 mix는 문자 쌀과 문자 씰이 혼합된 문자열입니다.쌀이 몇 개 있는지 알고 싶은데, 직접 세기에는 눈이 너무 아프겠죠? for과 sequence를 이용해서 쌀과 씰의 개수를 세봅시다!

예를 들어서 쌀의 개수가 10개라면 다음과 같이 출력하면 됩니다.

이렇게 해봐요!

  1. 변수 mix에 있는 “쌀”의 개수를 세는 프로그램을 작성해봅시다.

  2. 실행 버튼을 눌러서 주어진 임무를 잘 수행했는지 확인하세요.

  3. 제출 버튼을 눌러 맞게 코드를 작성했는지 확인해보세요!

 

 

 

반복분 (2) for-range문

for i in range (a,b)

for i in range (a)

 

 

반복할 숫자의 범위를 알고있다면? range(__ , __)!

연속된 정수를 담은 시퀀스가 필요한 경우에는, 이를 만들어주는 함수 range()를 사용합니다.

  • range(a, b) : a 이상 b 미만의 연속된 정수가 담긴 시퀀스를 만들어주는 함수

따라서 다음과 같이 작성하면 1부터 100까지 숫자를 한줄에 하나씩 출력합니다.

반복할 횟수를 알고있다면? range(__)!

반복할 횟수를 알고 있는 경우에는, range()를 이용해서 편하게 반복문을 만들 수 있습니다.

  • range(a) : a번 반복

따라서 다음과 같이 작성하면 “안녕!”을 5번 출력합니다.

 

다음을 생각해봅시다.

  • 왜 range()에 숫자를 하나만 넣으면 횟수로 반복하기가 되는 걸까요?
  • 이번 실습에서는 반복문의 변수(i)를 활용하지 않았는데, 이러한 경우도 있을 수 있겠군요!

 

19단을 외자!

초등학교 2학년, 삼일은 삼, 삼이는 육…
구구단을 열심히 외웠던 기억! 다들 있으신가요?
그런데 인도에서는 무려 19단까지 외운다고 해요!

하지만 우리는 19단을 할 줄 모르죠…
for와 range를 이용해
이를 컴퓨터에게 대신 시켜봅시다!

19단을 외워 아래의 결과처럼 출력해보아요!

이렇게 해봐요!

  1. 주어진 미션을 확인하고, 이를 수행해보세요.
  2. 주어신 출력 예시와 띄어쓰기와 기호까지 정확하게 맞추어서 출력해야 해요.

 

 

 

반복분 (2) while문

while i>0

 

 

조건에 따라 반복하고 싶다면? while!

조건에 의한 반복이 필요한 경우가 있습니다. 이런 경우에는 while을 이용해서 반복문을 만들어줍니다.

  • while 조건: : 조건이 *True(참)*이면 while 내부의 명령들을 실행. (언제까지? 조건이 False가 될 때까지!)

예를 들어, i를 카운트다운 하는 상황인 경우, 다음과 같이 작성하면 5부터 1까지 숫자를 거꾸로 출력합니다.

 

  1. 다음 코드를 따라 적어봅시다.

2. 다음을 생각해봅시다.

  • 위 코드는 어떤 작업을 하는 코드인가요?

  • while문의 조건에 i<11이라고 적어준 이유는 무엇일까요?

  • i = i + 1을 해준 이유는 무엇일까요?

 

이곳은 코딩법정, 당신은 피의자의 자리에 앉아 있습니다.
죄목은 '파이썬태만죄', 다른 바쁜 일로 인해 파이썬을 소홀히 한 죄입니다.
오만가지 생각이 들고 있을때, 귀도 반 로섬 판사님께서 판결을 내리고 있습니다!

“익숙함에 속아 소중한 것을 잃어버리다니, 딱하다! 징역 10년형에 처한다!”

while문을 이용해서 10년형을 살고, 새 사람이 되어 나와봅시다!

처음에 break문을 써야되는지 알았는데, 규칙에서 벗어나면 break문을 쓰는 게 아니라

while문이 항상 True라서 무한루프에 빠질 경우에만 break를 쓰는 것이다.

-> while 규칙에서 벗어나면 그 경우 print를 하면된다.

 

조건문을 빠져나오고 싶으면? break!

for문이나 while문을 사용하다가, 특정한 경우에 반복문을 강제로 종료해야하는 경우가 있습니다. 이런 경우에는 break를 이용해서 반복문을 탈출할 수 있습니다.

  • break : 반복문을 탈출한다.

    break는 실행되는 즉시 반복문을 탈출하기 때문에, 보통 조건문과 함께 사용됩니다.

    예를 들어, 0부터 9까지의 숫자를 출력하다가 숫자가 5이면 “i가 5입니다”라는 문장과 함께 반복문을 종료하는 코드를 다음과 같이 작성할 수 있습니다.

들여쓰기에 주의하세요! 들여쓰기를 어떻게 하느냐에 따라 실행 결과가 달라질 수 있습니다.

 

이렇게 해봐요!

  1. 다음 코드를 따라 적어봅시다.

2. 다음을 생각해봅시다.

  • 위 코드는 어떤 작업을 하는 코드인가요? 반복문 탈출

  • while문의 조건에 True가 들어갔습니다! 이는 어떤 의미일까요? 언제나 참이므로 계속해서 while문이 실행된다.

  • i = i + 1을 해준 이유는? i가 증가하면서 계속 증가...

  • print(i)와 if문(4~6번째 줄)의 위치를 바꾸면 어떻게 될까요?

  • 만약 1부터 10까지 출력하고 싶다면 조건을 어떻게 바꿔주어야 할 지 생각해보세요. if i==10: 으로 바꾼다

 

위기탈출 넘버원

break문으로 당신의 소중한 코드를 무한루프로부터 지킬 수 있습니다!

평소에도 코딩을 열심히 하던 준배. 그는 오늘도 엘리스에서 문제를 풀기 시작합니다.

그런데! 코드를 다 짜고 보니 코드가 멈추지 않고 계속 출력됩니다.

분명 맞게 작성한 것 같은데, 계속 ans가 출력이 안되는 걸 본 준배는 결국 혈압 상승으로 인해 응급실에 실려가게 되었습니다.

과연 무엇이 문제였을까요? 오른쪽 준배의 코드를 보고 잘못된 부분을 찾아 고쳐줍시다.


원래 문제

while문을 이용해서 1부터 10까지의 합을 구해서 이를 출력해봅시다.

 

반복문을 벗어나는 break를 사용해야한다. 조건을 준 다음에 빠져나와야하므로

i가 10보다 커지면 탈출

if i > 10 :

    break

 

또한 i의 변화가 없어서 1~10까지의 값을 구할 수 없다.

따라서 i=i+1로 i에 변화를 줌으로써 1,2,3,4....로 변환

 

계단 별자리가 점점 커지고있어요!

 

1장에서는 print()를 5번 사용해서 계단 별자리를 출력했었습니다. 이번에는 입력한 수에 따라 계단 별자리를 출력하는 프로그램을 작성해봅시다. 3을 입력하면 3층, 5를 입력하면 5층 계단 별자리를 말이죠!

풀이과정>

1) 변수정의 num=int(input())

2) 1부터 구간 반복문 for i in range(1, num+1)

 

3) print("*"*i)

 

평균 구하기!

평균을 쉽게 구할 수 있도록 평균을 구하는 프로그램을 작성해봅시다.

 

이렇게 해봐요!

while문을 이용해서, 0을 입력할 때 까지 입력을 받습니다. 0을 입력받았으면, 0을 입력한 바로 이전까지의 수들의 평균을 구합니다.

Tip!

  • 평균은 (자료의 합) / (자료의 크기) 입니다.
  • 숫자는 0이 입력될 때까지 input()을 통해 반복적으로 입력받아야 합니다. 그렇다면 input()은 while문 안에 있어야 할까요, 바깥에 있어야 할까요? :)

 

 

 

 

 

 

 

반응형
LIST

댓글