기본 콘텐츠로 건너뛰기

방송대 방통대 파이썬프로그래밍기초 4강 - 구조적 프로그래밍과 순차 구조 - 요약 노트 시험족보 예상문제 - 올에이클래스

파이썬프로그래밍기초 4강 - 구조적 프로그래밍과 순차 구조

파이썬프로그래밍기초 4강 - 구조적 프로그래밍과 순차 구조

명령형 프로그래밍에서 발전한 구조적 프로그래밍 패러다임과 순차 구조의 의미를 이해한다. 사용자 입력, 데이터 타입 변환, 프로그램 오류, 확장된 print 함수 사용법을 익히고 원뿔의 부피와 겉넓이를 계산하는 프로그램에 적용한다.

제1장 명령형 프로그래밍 패러다임

1. 프로그래밍 패러다임

프로그래밍 패러다임은 프로그램을 바라보고 설계하는 기본적인 관점과 방법이다. 같은 문제라도 어떤 패러다임을 따르는지에 따라 프로그램을 구성하는 방식이 달라진다. 1950~1960년대에 확립된 명령형 프로그래밍 패러다임은 Algol, Fortran 같은 언어를 중심으로 발전하였다.

2. 명령형 프로그래밍의 동작 방식

명령형 프로그래밍은 컴퓨터가 무엇을 해야 하는지를 명령의 순서로 지시하는 방식이다. 프로그램은 상태(state)를 갖고, 코드가 상태를 단계적으로 바꾸는 명령의 연속으로 구성된다. 여기서 상태는 프로그램 실행 중 변수와 기억장치에 저장된 값들의 현재 모습을 의미한다.

각 명령은 할당문처럼 프로그램의 상태를 변경한다. 예를 들어 x = 10은 변수 x에 10이라는 값을 저장하여 상태를 바꾼다. 이후 x = x + 1을 실행하면 이전 상태의 값을 이용해 새로운 상태를 만든다. 명령형 프로그램은 연속된 명령문의 실행을 통해 초기 상태에서 목표 상태로 전진한다.

명령형 프로그래밍의 핵심

컴퓨터가 수행할 일을 명령문의 순서로 표현하며, 각 명령이 프로그램의 상태를 단계적으로 변화시켜 최종 결과를 만든다.

3. goto와 흐름 제어의 어려움

초기의 명령형 프로그램에서는 goto 문을 사용하여 실행 위치를 임의의 지점으로 옮길 수 있었다. 작은 프로그램에서는 편리할 수 있지만 여러 위치로 복잡하게 이동하면 실행 흐름을 추적하기 어려워진다. 프로그램이 커질수록 어떤 조건에서 어느 코드로 이동하는지를 이해하고 검증하기 힘들어진다.

모든 프로그램은 goto가 없어도 표현할 수 있으며, 절차적·구조적 프로그래밍 패러다임은 명령형 프로그램의 흐름을 더 명확하게 구성하려는 방향으로 발전하였다.

제2장 구조적 프로그래밍 패러다임

1. 구조적 프로그래밍의 등장

구조적 프로그래밍은 명령형 프로그래밍의 하위 개념이다. 복잡한 goto 이동 대신 프로그램을 세 가지 제어 흐름인 순차, 선택, 반복 구조로 구성한다. 각 구조는 시작과 끝이 분명하며 필요한 구조를 조합하여 프로그램 전체의 실행 흐름을 만든다.

제어 구조의미대표 상황
순차 구조명령문을 위에서 아래로 차례대로 실행입력한 값으로 계산한 뒤 결과 출력
선택 구조조건에 따라 실행할 명령을 선택점수에 따라 합격과 불합격 결정
반복 구조조건이나 횟수에 따라 명령을 반복여러 데이터에 같은 계산 적용

2. 제품 생산 공정으로 이해하기

제품 생산 공정은 구조적 흐름을 이해하기 좋은 비유이다. 기본 공정은 설계, 생산, 조립, 검사, 배송의 순서로 진행된다. 검사 결과가 정상이면 배송하고, 불량이면 재생 공정으로 보내 다시 검사할 수 있다. 큰 공정을 기능별 작은 단계로 나누고 각 단계의 연결을 명확히 하면 전체 과정을 이해하기 쉬워진다.

프로그램도 같은 방식으로 제어 흐름을 블록 단위로 계층화하고 지역화한다. 복잡한 실행 흐름을 간결하고 작은 규모로 조직하면 프로그램의 예측 가능성과 검증 가능성이 높아진다. 특정 부분이 어떤 입력을 받아 어떤 결과를 내는지 확인하기도 쉬워진다.

구조화의 목적

구조적 프로그래밍은 단순히 goto 문을 쓰지 않는 데 그치지 않는다. 프로그램을 이해 가능한 제어 구조로 나누어 흐름을 예측하고 정확성을 검증하기 쉽게 만드는 것이 목적이다.

제3장 순차 구조의 이해

1. 순차 구조의 정의

순차 구조는 실행의 흐름을 주어지는 명령문의 위치적 흐름에 따라 수행하는 구조이다. 파이썬에서는 일반적으로 명령문이 위에서 아래로 실행된다. 별도의 선택이나 반복, 함수 호출에 따른 이동이 없다면 앞 문장의 실행이 끝난 뒤 바로 다음 문장을 실행한다.

순차 구조는 사람이 프로그램을 읽는 방향과 실행 방향이 같아 가장 직관적이다. 예를 들어 원뿔 계산 프로그램은 반지름과 높이를 입력받고, 계산에 필요한 중간값을 구한 뒤, 부피와 겉넓이를 출력하는 순서로 구성한다. 앞 단계에서 만든 값은 뒤 단계에서 사용되므로 명령의 순서가 중요하다.

2. 별 삼각형 출력하기

반복문을 아직 사용하지 않는다면 출력문을 위에서 아래로 배치하여 별 삼각형을 만들 수 있다. 각 print()가 한 줄을 출력하며 명령문이 작성된 순서대로 결과가 나타난다.

print("   *")
print("  ***")
print(" *****")
print("*******")

이 예제는 순차 구조의 가장 단순한 형태이다. 첫 번째 출력이 끝나면 두 번째 출력으로 이동하고, 마지막 명령까지 같은 방식으로 실행된다. 공백의 개수와 별의 개수를 직접 지정하므로 출력 모양도 코드의 순서와 문자열 내용에 의해 결정된다.

3. 원뿔 계산 프로그램의 순차 흐름

반지름을 r, 높이를 h라고 할 때 원뿔의 부피는 1/3 × π × r² × h이다. 겉넓이는 밑면 넓이 πr²와 옆면 넓이 πr√(r²+h²)의 합이다. 강의록에서는 원주율을 3.14로 사용한다.

rad = 10
hei = 24
sla = pow(rad ** 2 + hei ** 2, 0.5)
vol = 1 / 3 * 3.14 * rad ** 2 * hei
suf = 3.14 * rad ** 2 + 3.14 * rad * sla
print(vol, suf)

sla는 피타고라스 정리를 이용해 계산한 모선의 길이이다. pow(x, 0.5)x의 제곱근을 구한다. 모선이 계산된 뒤에야 겉넓이 식에서 사용할 수 있으므로 각 명령의 배치가 데이터 의존관계와 일치해야 한다.

순서가 중요한 이유

변수는 값이 저장된 뒤에 사용할 수 있다. 입력 → 타입 변환 → 중간값 계산 → 최종 계산 → 출력의 순서를 지켜야 한다.

제4장 사용자 입력과 데이터 타입 변환

1. input 함수

input()은 사용자로부터 데이터를 입력받는 내장 함수이다. 프로그램이 input()을 만나면 키보드 입력을 기다리고, 사용자가 값을 입력한 뒤 Enter 키를 누르면 입력 내용을 문자열로 반환한다.

rad = input("반지름을 입력하세요: ")

괄호 안의 문자열은 사용자가 무엇을 입력해야 하는지 알려주는 프롬프트 역할을 한다. 위 문장을 실행하면 안내 문구를 표시하고 입력을 기다린다. 중요한 점은 사용자가 숫자처럼 10을 입력해도 반환값의 타입은 문자열 "10"이라는 사실이다.

2. 타입 변환 함수

문자열을 산술 계산에 사용하려면 목적에 맞는 데이터 타입으로 변환해야 한다. str()은 문자열, int()는 정수, float()는 실수 타입으로 값을 변환하는 내장 함수이다.

함수변환 결과
str()문자열str(30)"30"
int()정수int("30")30
float()실수float("3.5")3.5

입력과 변환은 한 문장으로 결합할 수 있다.

rad = int(input("반지름을 입력하세요: "))
hei = int(input("높이를 입력하세요: "))

안쪽의 input()이 먼저 문자열을 반환하고, 바깥쪽의 int()가 문자열을 정수로 바꾼다. 정수가 필요한 상황에서 rad = int(rad)처럼 이미 저장된 문자열 변수를 나중에 변환할 수도 있다.

3. 사용자 입력을 적용한 원뿔 계산

rad = int(input("반지름을 입력하세요: "))
hei = int(input("높이를 입력하세요: "))

sla = pow(rad ** 2 + hei ** 2, 0.5)
vol = 1 / 3 * 3.14 * rad ** 2 * hei
suf = 3.14 * rad ** 2 + 3.14 * rad * sla

print(vol, suf)

프로그램은 반지름을 입력받아 정수로 변환하고, 같은 방식으로 높이를 얻는다. 다음으로 모선, 부피, 겉넓이를 순서대로 계산하고 마지막에 결과를 출력한다. 이 전체 과정이 순차 구조의 전형적인 입력-처리-출력 흐름이다.

제5장 프로그램 오류

1. 구문 오류

구문 오류(syntax error)는 프로그램이 파이썬 문법에 맞지 않을 때 발생한다. 존재하지 않는 명령을 사용하거나 괄호와 따옴표를 잘못 배치하는 경우가 해당한다. 프로그램이 실행되기 전 인터프리터가 문법을 검사하는 과정에서 발견할 수 있다.

2. 실행 오류

실행 오류(runtime error)는 문법에는 맞지만 프로그램을 실행하는 도중 예상하지 않은 상황이 발생하여 실행이 중단되는 오류이다. 숫자로 변환할 수 없는 문자열을 int()에 전달하거나 0으로 나누는 경우가 예이다.

rad = int(input("반지름을 입력하세요: "))

이 문장에서 사용자가 과 같이 정수로 바꿀 수 없는 문자를 입력하면 구문 자체는 올바르지만 실행 중 변환에 실패한다.

3. 의미 오류

의미 오류(semantic error)는 프로그램이 문법적으로 올바르고 끝까지 실행되지만 잘못된 결과를 만드는 오류이다. 계산식의 연산자나 변수를 잘못 사용하여 논리적·의미적으로 잘못 해석되는 명령문을 작성했을 때 발생한다.

오류발생 시점특징
구문 오류실행 전 문법 검사파이썬 문법에 맞지 않아 실행 불가
실행 오류프로그램 실행 중예상하지 않은 값이나 상황으로 실행 중단
의미 오류실행 후 결과 확인정상 실행되지만 의도와 다른 결과 생성

오류를 구분하는 기준

실행 자체가 시작되지 않으면 구문, 실행 도중 멈추면 실행, 끝까지 실행되지만 답이 틀리면 의미 오류를 먼저 의심한다.

제6장 print 함수의 확장

1. 여러 데이터 출력

print()는 쉼표로 구분한 여러 데이터를 한 번에 출력할 수 있다. 기본적으로 각 데이터 사이에는 공백이 들어가며 마지막에는 줄바꿈 문자가 추가된다.

print(vol, suf)

2. sep 매개변수

sep 매개변수는 여러 데이터 사이에 삽입할 문자열을 지정한다. 기본값은 공백 한 칸이다. 다음 예에서는 각 데이터 사이에 콜론을 넣는다.

print("원뿔의 부피는", vol, "입니다.", sep=":")

출력 결과는 원뿔의 부피는:값:입니다.와 같은 형태가 된다. 구분자를 빈 문자열로 지정하면 데이터 사이의 공백을 없앨 수도 있다.

3. end 매개변수

end 매개변수는 출력 마지막에 추가할 문자열을 지정한다. 기본값은 줄바꿈 문자인 \n이다. end=" "처럼 바꾸면 출력 뒤에 줄을 바꾸지 않고 공백을 넣어 다음 출력을 같은 줄에 이어 쓸 수 있다.

print의 기본값

sep의 기본값은 공백, end의 기본값은 줄바꿈이다. sep는 데이터 사이를, end는 전체 출력의 끝을 제어한다.

핵심 개념 정리

4강 핵심 요약

  • 명령형 프로그래밍은 명령문의 연속으로 프로그램 상태를 단계적으로 변경한다.
  • 복잡한 goto 사용은 프로그램의 실행 흐름을 이해하고 통제하기 어렵게 한다.
  • 구조적 프로그래밍은 순차·선택·반복 구조로 흐름을 구성하고 블록을 계층화한다.
  • 순차 구조에서는 명령문을 위에서 아래로 차례대로 실행한다.
  • input()은 사용자의 입력을 문자열로 반환한다.
  • str(), int(), float()를 이용하여 데이터 타입을 변환한다.
  • 원뿔 계산은 입력, 타입 변환, 모선 계산, 부피·겉넓이 계산, 출력 순서로 진행한다.
  • 구문 오류는 문법 문제, 실행 오류는 실행 중 예외 상황, 의미 오류는 잘못된 결과의 문제이다.
  • print()는 여러 데이터를 출력할 수 있으며 sepend로 출력 형식을 조절한다.

최종 정리

구조적 프로그래밍은 실행 흐름을 이해할 수 있는 단위로 조직하는 방법이다. 4강에서는 가장 기본적인 순차 구조를 이용하여 입력값을 적절한 타입으로 변환하고, 필요한 계산을 순서대로 수행한 뒤, 원하는 형식으로 결과를 출력하는 완전한 프로그램 흐름을 익힌다.

예상문제 20선

1. 명령형 프로그래밍 패러다임에 대한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
명령형 프로그래밍은 컴퓨터가 할 일을 순서대로 지시하며 각 명령이 프로그램 상태를 바꾼다.

2. 복잡한 goto 사용의 문제점은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
실행 위치가 여러 곳으로 임의 이동하면 프로그램이 어떤 순서로 실행되는지 이해하기 어려워진다.

3. 구조적 프로그래밍의 세 가지 기본 제어 구조는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
구조적 프로그래밍은 순차, 선택, 반복의 세 제어 구조를 조합하여 프로그램 흐름을 만든다.

4. 구조적 프로그래밍의 효과로 가장 거리가 먼 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
구조적 프로그래밍은 복잡성을 줄이고 흐름을 이해·예측·검증하기 쉽게 만드는 방법이다.

5. 순차 구조의 실행 방식은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
순차 구조에서는 명령문의 위치적 순서에 따라 위에서 아래로 실행한다.

6. 다음 코드가 출력하는 첫 번째 줄은?
print(" *")
print(" ***")

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
첫 번째 print 문이 먼저 실행되며 문자열 안의 앞쪽 공백 두 칸도 그대로 출력된다.

7. input() 함수의 반환 타입은 기본적으로 무엇인가?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
사용자가 숫자 모양을 입력하더라도 input 함수는 입력 내용을 문자열로 반환한다.

8. 사용자에게 입력할 내용을 알려주는 input 함수의 문자열 역할은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
프롬프트는 프로그램이 어떤 값을 요구하는지 사용자에게 안내하는 메시지이다.

9. 문자열 "30"을 정수 30으로 바꾸는 표현은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
int 함수는 정수로 해석할 수 있는 문자열을 정수 타입으로 변환한다.

10. 실수 형태의 문자열을 실수 타입으로 변환하는 함수는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
float 함수는 값을 실수 타입으로 변환한다.

11. rad = int(input("반지름: "))의 실행 순서는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
안쪽 input 함수가 먼저 문자열을 반환하고 바깥쪽 int 함수가 이를 정수로 변환한다.

12. 원뿔의 모선 길이를 구하는 표현으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
모선은 반지름 제곱과 높이 제곱의 합에 제곱근을 취하여 계산한다.

13. 원뿔 계산 프로그램의 올바른 순서는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
필요한 값을 입력받고 계산 가능한 타입으로 바꾼 뒤 중간값과 결과를 계산하여 출력한다.

14. 파이썬 문법에 맞지 않는 명령문 때문에 발생하는 오류는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
구문 오류는 문법에 맞지 않는 코드를 작성했을 때 인터프리터가 실행 전에 발견한다.

15. int("파이썬")을 실행할 때 발생하는 오류 유형은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
문법은 올바르지만 문자열을 정수로 변환할 수 없어 프로그램 실행 도중 오류가 발생한다.

16. 프로그램이 끝까지 실행되지만 계산식이 잘못되어 틀린 답을 출력한다. 오류 유형은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
의미 오류는 프로그램이 정상 실행되더라도 논리나 계산식이 잘못되어 의도와 다른 결과를 만든다.

17. print(10, 20)의 기본 출력에서 두 값 사이는 무엇으로 구분되는가?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③
print 함수의 sep 기본값은 공백이므로 여러 데이터는 공백으로 구분되어 출력된다.

18. print 함수에서 데이터 사이의 구분자를 지정하는 매개변수는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①
sep는 print 함수에 전달한 여러 데이터 사이에 들어갈 문자열을 지정한다.

19. print 함수의 기본 end 값은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②
print 함수는 기본적으로 출력 끝에 줄바꿈 문자 \n을 추가한다.

20. 두 번의 print 출력을 같은 줄에 이어 쓰려 할 때 적절한 방법은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④
end를 바꾸면 첫 출력 뒤의 기본 줄바꿈을 제거하여 다음 출력을 같은 줄에 이어 쓸 수 있다.

댓글