구조적 프로그래밍
구조적 프로그래밍 패러다임
Section titled “구조적 프로그래밍 패러다임”프로그래밍 패러다임은 제품 생산 공정처럼 순차, 선택, 반복, 구조로 표현될 수 있다.
명령형 프로그래밍 패러다임의 하위 개념
- 제어 흐름만으로 구성하는 프로그래밍 패러다임
- 순차(sequence)구조
- 선택(selection)구조
- 반복(iteration)구조
- 제어 흐름을 블록 단위로 계층화하고 지역화
- 프로그램 실행 흐름이 간결하고 작은 규모로 조직화가 용기
- 프로그램 예측 가능성과 검증 가능성을 보장
순차 구조의 이해
Section titled “순차 구조의 이해”실행의 흐름을 주어지는 명령의 위치적 흐름에 따라 수행하는 구조
설계 → 생산 → 조립
- 명령 라인 위에서 아래로 흐르는 가장 직관적인 구조
- 다버깅 용이
프로그램 오류
Section titled “프로그램 오류”설계, 결함 논리적 실수 또는 문법 오류로 프로그램이 의도한 대로 결과를 생성하지 못하는 상황
- 구문 오류 (syntax error) 문법 체계에 적합하지 않는 명령문 입력 시 발생 프로그램이 실행되기 전, 인터프리터/컴파일러가 탐지
- 실행 오류 (runtime error) 실행되지만 실행 중에 잘못된 상황 발생으로 프로그램이 중단되는 오류
- 의미 오류 (semantic error) 프로그래머의 의도와 다른 잘못된 결과를 생성 논리적/의미적으로 잘못 해석되는 명령문 작성 시 발생
데이터 타입 변환
Section titled “데이터 타입 변환”한 데이터를 다른 데이터 타입으로 변환
데이터 타입 변환 내장 함수
- 문자열 : str()
- 정수 : int()
- 소수 : float()
print 함수의 확장
Section titled “print 함수의 확장”여러 개의 데이터 단일 함수로 출력 가능
- 파라미터로 데이터를 콤마(,)로 구분하여 입력
- 데이터 사이에 공백(default)이 자동으로 추가
- sep 옵션을 변경하여 공백 변경 가능
print(“상자에”, “사과가”, number, “개”, “들어있습니다.”) → 상자에 사과가 5 개 들어있습니다.
print(“상자에”, “사과가”, number, “개”, “들어있습니다.”, sep="") → 상자에사과가5개들어있습니다.
원뿔의 부피&겉넓이 계산 프로그램
Section titled “원뿔의 부피&겉넓이 계산 프로그램”rad = int(input('반지름을 입력하세요 :'))hei = int(input('높이를 입력하세요 :'))sla = pow(rad ** 2 + hei ** 2, 0.5)#부피 & 겉넓이 출력vol = 1 / 3 * 3.14 * rad ** 2 * heisuf = 3.14 * rad ** 2 + 3.14 * rad * slaprint("원뿔의 부피는 : ", str(vol) + "입니다.", sep='|')print("원뿔의 겉넓이는 : ", str(suf) + "입니다." )특정 영역 내의 명령문에 대한 실행 여부를 프로그램 실행 과정 중 조건의 참, 거짓에 따라 결정하는 구조
- 동일한 입력에 대해 항상 같은 행동을 하는 게 아닌 상황에 따라 다르게 행동하게 만드는 지능의 시작
- 오류 처리, 예외 상황 대응 등 프로그램의 안정성을 책임
if rad >= 0 and hai >= 0 # 모선 계산 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("원뿔의 부피는", str(vol) + "입니다.") print("원뿔의 겉넓이는", str(suf) + "입니다.")불리언식과 비교 연산자
Section titled “불리언식과 비교 연산자”- 비교 연산자를 사용하여 결과가 불리언(Boolean) 타입으로 생성되는 표현식
- 비교 연산자의 종류
| 연산자 | 수학적 표현 | 의미 |
|---|---|---|
< | < | 작다. |
<= | ≤ | 작거나 같다. |
> | > | 크다. |
>= | ≥ | 크거나 같다. |
== | = | 같다. |
!= | ≠ | 같지 않다. |
연산자 우선 순위
Section titled “연산자 우선 순위”표현식에 사용된 여러 연산자의 연산 순서를 결정
① 괄호 내부의 수식 ② 거듭제곱(**) 연산자 ③ 곱셈, 실수 나눗셈, 정수 나눗셈, 모듈로 연산자 (왼쪽에서 오른쪽 순서로 적용) ④ 덧셈, 뺄셈 연산자 - (왼쪽에서 오른쪽 순서로 적용) ⑤ 비교 연산자(<, <=, >, >=, ==, !=) ⑥ 할당 연산자
불리언 타입
Section titled “불리언 타입”논리값인 참(Frue)과 거짓(False)의 값만 표현할 수 있는 데이터 타입
논리 연산자
Section titled “논리 연산자”참, 거짓을 구별할 수 있는 명제를 대상으로 명제의 집합을 위해 고안한 연산자
- 명제 : 참과 거짓 중 하나의 진리값만을 갖는 서술문
- 불리언식에 작용하여 또 하나의 불리언 값을 산출하는 연산체계
두 개의 논리값을 연산하여 참 또는 거짓을 결과로 생성하는 연산자
- and(논리곱), or(논리합), not(논리부정), 연산자 가용
- 왼쪽에서 오른쪽의 방향으로 결합
and 연산자
Section titled “and 연산자”두 논리값이 모두 True 일 때 True이고 어느 하나가 False일 경우 False를 반환
or 연산자
Section titled “or 연산자”두 논리값이 모두 False일 때 False이고 어느 하나가 True일 경우 True 반환
not 연산자
Section titled “not 연산자”단항 연산자로 논리값을 반전하여 False는 True로 True는 False로 반환
불리언식의 논리 연산 결과가 이미 결정되면, 전체 연산 결과를 도출하기 전 나머지 피연산자를 평가하지 않는 기법
대상 연산자: and, or
- A and B : A가 False이면, B의 평가를 생략
- A or B : A가 True면 B의 평가를 생략
이분 선택 구조의 구문 형식과 제어의 흐름
Section titled “이분 선택 구조의 구문 형식과 제어의 흐름”if 불리언식 : 명령문 집합1 else : 명령문 집합2
반복 구조의 이해
Section titled “반복 구조의 이해”반복 구조의 정의
Section titled “반복 구조의 정의”특정 영역의 명령문을 여러 번 재실행하는 구조
- 동일한 코드를 반복적으로 작성하지 않고도 지정된 작업을 여러 번 수행 가능
- 반복 횟수를 조건에 따라 결정
- loop, iterate, repeat 용어를 혼용
반복 구조의 구문 형식
Section titled “반복 구조의 구문 형식”- 조건 제어 반복의 구문 형식
while 반복-계속-조건:
명령문 집합 - 계수 제어 반복의 구문 형식
for 계수-제어-변수 in 시퀀스:
명령문 집합
# 메시지 저장msg = "저는 파이썬을 잘 합니다."
# 5회 반복 출력count = 0while count < 5: print(msg) count += 1변수의 현재 값에 특정 값을 증가 또는 차감한 후 그 결과를 동일한 변수에 재할당하는 연산
- 카운팅, 값의 누적, 문자열 연결 등의 목적으로 사용
읽기: 메모리에서 count의 현재 값 읽기
계산: 현재 값에 + 1 연산
저장: 결과를 같은 이름 count에 덮어쓰기
복합 할당 연산자
Section titled “복합 할당 연산자”변수의 값을 변경하고 결과를 다시 그 변수에 할당하는 과정을 간결하게 처리하는 연산자
일반 이항 연산자(+, // 등)와 할당 연산자의 결합
| 연산자 | 예시 | 의미 |
|---|---|---|
| += | a += b | a = a + b |
| -= | a -= b | a = a - b |
| _= | a _= b | a = a * b |
| /= | a /= b | a = a / b |
| %= | a %= b | a = a % b |
| **= | a **= b | a = a ** b |
| //= | a //= b | a = a // b |
반복 구조 설계 전략
Section titled “반복 구조 설계 전략”- 단계 1: 반복되어야 하는 명령 블록을 작성
- 단계 2: 반복되어야 하는 명령문을 다음과 같이 반복 구조로 작성
while True:
명령 블록 - 단계 3: 반복-계속-조건을 작성하고 반복 구조를 제어하기 위해 반복 제어 명령문을 추가
while 반복-계속-조건:
명령 블록
반복 제어 명령문
# 단계 1sum += i
# 단계 2while True: sum += i
# 단계 3sum = 0i = 1last = int(input("합산할 숫자를 입력하세요: "))while i <= last: sum += i i += 1print("1부터", str(last)+"까지의 합은", str(sum)+"입니다.")리스트의 개념
Section titled “리스트의 개념”여러 개의 데이터(값)를 순서대로 묶어서 저장하는 자료구조
- 원소(element)의 나열을 저장할 수 있는 시퀀스 타입 · 시퀀스: 리스트, 튜플 등
- 데이터가 저장된 순서가 명확하게 유지
- 단일 식별자로 연속된 저장 공간 접근 수단 제공 · 각 데이터는 0부터 시작하는 고유한 ‘순번’(인덱스)이 지정
- 개별 원소의 값을 수정, 추가, 삭제 가능
- 중복된 값 뿐만 아니라 숫자, 문자열, 다른 리스트 등 서로 다른 데이터 타입의 데이터 저장 가능
리스트의 구성
Section titled “리스트의 구성”직접 참조하는 일반 변수와 달리, 리스트는 값들의 주소가 담긴 목록을 참조하는 간접 참조 방식
구문 형식 : 인용부호 [와]를 사용하여 표현, 각 원소는 콤마(,) 로 구분
인덱스 연산자
Section titled “인덱스 연산자”시퀀스 타입의 원소에 접근하는 연산자
- 접근 연산자 [ , ] 사용
- 원소에 부여된 인덱스 번호로 지칭
- 인덱스 번호는 0부터 시작 [0] [1] [2] [4]
계수 제어 반복의 구문 형식
Section titled “계수 제어 반복의 구문 형식”- 계수-제어 변수와 시퀀스 사용
- 반복 시 계수-제어-변수에 원소를 순차적으로 할당
# 구문 형식for 계수-제어-변수 in 시퀀스: 명령문 집합
# 리스트 생성hei_list = [1, 4, 14, 26, 31]
# 리스트 원소 출력for hei in hei_list: print(hei)