for문이 일정 범위 안에서 움직이는 반복문이라면, while문은 특정 조건을 만족하는 동안 실행하는 반복문이다. while문을 사용할 때 주의할 점은 조건을 명확하게 명시하는 것과 반복문 탈출 조건을 만들어주는 것이다.
while문을 사용하려면
-조건을 명확하게 명시할 것
-반복문 탈출 조건을 만들어줄 것
구구단 출력 프로그램(2단)
for문을 이용하는 경우를 먼저 생각해보자.
위와 같이 작성하면 1부터 9까지 움직이는 범위 안에서 연산을 수행하면서 2단을 출력하게 된다. 이렇게 범위를 움직이는 경우에는 for문이 유리한데, while문으로도 작성해 보자.
while문에는 조건을 명시해야 한다. i는 2에 곱해지는 수가 되며 1부터 9까지 증가한다. 따라서, i가 10보다 작은 동안에만 반복을 수행하도록 'i<10'이라는 조건을 명시해주어야 한다. for문과 마찬가지로 print문을 수행하지만, i에 변화를 주기 위해 5번 줄에 i를 증가시키는 명령어를 추가해야 한다. 그래야 i가 언젠가 10이상이 되어 반복문을 탈출할 수 있다.
구구단 출력 프로그램(2~9단)
구구단 전체를 출력하는 프로그램을 while문으로 작성해 보자.
i는 구구단의 단을 결정하는 변수, j는 각 단에 1부터 9까지 증가하며 곱해지는 수이다. i와 j가 증가하는 속도는 서로 달라야하기 때문에 이중 반복문을 사용한다.
- 4번 줄은 바깥 반복문으로 i에 대한 반복 조건을 설정한다.
- 5번 줄은 안쪽 반복문으로 j에 대한 반복 조건을 설정한다.
- 6번 줄에서 i와 j를 대입하여 구구단을 출력한다.
- 7번 줄의 코드로 안쪽 반복문의 j가 1부터 9까지 변화하며, i는 고정된다.
- 7번 줄에서 j가 10이 되는 순간 5번 줄의 반복문을 탈출하고 8번 줄에서 i를 증가하게 된다.
- 8번 줄에서 구구단의 단수가 증가했으므로 곱하는 수인 j는 9번 줄에서 1을 대입하여 새로운 단을 시작한다.
break문과 소수 판별기
while문의 조건을 충족하지 못했더라도, 실행 중 중간에 원하는 결과를 구했다면 반복문을 계속 유지할 이유가 없다. 그래서 원하는 결과를 구하자마자 반복문을 탈출해 주는 것이 좋은데, 이때 사용하는 명령어가 break이다.
소수 판별기를 만들어보려고 한다. 소수는 1과 자기자신만을 약수로 가진 수를 말한다. 예를 들어, 7은 1과 7로만 나눌 수 있어 소수이지만, 8은 1과 자기 자신인 8 외에도 2와 4로도 나눌 수 있어 소수가 아니다. 다음과 같은 소수 판별기를 만들어보자.
1. 2부터 자연수를 1씩 늘려가며 소수를 판별할 것
2. 100보다 작은 소수를 차례로 출력할 것
3. 소수의 개수가 20개라면 출력을 멈출 것
프로그램의 종료 조건은 다음의 두 가지로 생각해 볼 수 있다.
-만약 100보다 작은 소수가 20개를 넘는다면 10보다 작은 소수를 모두 출력하지 못하고 종료한다.
-100보다 작은 소수가 20개를 넘지 않는다면 조건의 변수가 100을 넘어 종료한다.
def는 특별한 명령을 수행하는 함수를 만드는 부분이다. 아직 다루지 않았지만 1~4번 줄의 명령어에서 전달받은 숫자를 소수인지 판단하는 부분이라고 생각하면 된다. 전체 코드를 살펴보자.
- 1번 줄에서 지어준 함수의 이름은 isprime이다. 괄호 안에 'num'이라는 변수로 값을 넘겨받아 함수 내에서 연산을 수행한다.
- 2번 줄의 for문에서는 2부터 넘겨받은 num보다 1작은 수까지 i를 증가하며 반복문을 수행하게 된다.
- 3번 줄에서 2부터 num보다 1작은 수까지 num이 나눠지는 수가 있는지 확인하여 나눠지면 False를 반환한다.
- 4번 줄에서 반복문을 모두 마칠 때까지 num을 나누는 수가 없었다면 True를 반환하여 소수임을 알린다.
- 6번 줄과 7번 줄은 사용자의 입장에서 경험하게 되는 프로그램에 대한 설명을 출려하는 명령어이다.
- 9번 줄에서 첫번째 소수인 2를 출력해주고, 3부터 소수를 판별하기 위해 10번 줄에서 num에 3을 대입한다.
- 11번의 cnt는 소수의 수를 누적하는 변수이다. 2를 출력했기 때문에 1부터 시작한다.
- 13번 줄의 반복문에서 100이하인 num에 대해 소수를 판별하기 위한 조건을 명시한다.
- 14번 줄의 if문에서 isprime을 호출하여 현재 num의 소수 여부를 판별하고, 소수로 판별되는 경우 cnt를 1 증가, 현재 num을 소수로써 출력한다.
- num을 증가시키기 전 17번 줄에서 cnt가 20 이상인지 확인하여 조건을 충족한다면 break를 통해 반복문을 탈출한다.
- 18번 줄에서 다음 숫자를 소수 판별하기 위해 num을 1 증가시킨다.
실행 결과는 다음과 같다.
100이하의 소수는 71이후로도 73, 79, 83, 89, 97이 있지만 71에서 소수의 개수가 20개가 되었기 때문에 71까지만 출력되고 종료되었다.
'IT일반' 카테고리의 다른 글
파이썬 프로그래밍, def, 함수의 정의, 함수의 활용, 매개변수, 평균 계산기 만들기 (1) | 2024.12.10 |
---|---|
파이썬 프로그래밍 - 제어구조(6), 반복문, while, continue, 홀수 출력하기, 메뉴 화면 만들기 (1) | 2024.12.09 |
파이썬 프로그래밍 - 제어구조(4), 반복문, for, 최솟값 최댓값 구하기 (0) | 2024.12.07 |
파이썬 프로그래밍 - 제어구조(3), 반복문, for, range (0) | 2024.12.06 |
파이썬 프로그래밍 - 제어구조(2), 조건문, if문 예제, 홀짝 판별기, 성적 판별기 (0) | 2024.12.05 |