배꼽파지 않도록 잘 개발해요

방송대 파이썬 프로그래밍 기초 - 15강. 체크포인트2 (9-14강) 본문

방송대 컴퓨터과학과/파이썬 프로그래밍 기초

방송대 파이썬 프로그래밍 기초 - 15강. 체크포인트2 (9-14강)

꼽파 2023. 6. 3. 21:58


문제 1번

유사한 유형의 문제를 해결할 수 있도록 특정 작업을 수행하는 명령문의 집합을 단일 식별자로 구성한 개념은? [9강]

 

① 함수

② 인터프리터

③ 파일

④ 명령 블럭


• 함수

- 특정 작업을 수행하는 명령문의 집합단일 식별자로 구성한 개념

- 특정 작업을 함수의 이름으로 대체

유사한 유형의 문제를 해결할 수 있도록 고려

  (전체적인 흐름은 같으나, 값은 다름)

 

 반환값에 따른 함수의 종류

- 반환값이 없는 함수 : print (모니터에 값을 출력만 함)
- 반환값이 있는 함수 : input, format, int 등

인터프리터 소스 코드를 한 줄씩 읽어들여 해당 코드를 실행하는 프로그램 또는 시스템
파일 컴퓨터 시스템에서 데이터를 저장하고 관리하기 위해 사용되는 단위
명령 블럭 프로그래밍에서 명령어들을 하나의 논리적인 단위로 묶는 데 사용되는 구조
명령 블럭은 보통 중괄호 {}로 표시되며, 코드의 실행 흐름을 제어하거나 반복 작업을 수행하는 등의 역할을 함.

문제 2번

line 클래스의 인스턴스 m의 멤버 __len을 10으로 수정하기 위한 올바른 표현은? [10강]

① m.__len = 10

② m.len = 10

③ m.set_length(10)

④ m.set_length( ) = 10


'__'로 시작하는 private 데이터 필드는 외부에서 접근 불가
→ 세터 또는 변경자라 불리는 메소드를 통해 수정해 주어야 함.


문제 3번

math 모듈 사용을 위한 빈칸의 올바른 표현은? [11강]

① import math

② import math.sin, math.radians

③ from sin, radians import math

④ from math import sin, radians


sin(radians(60))을 보면 함수를 정의하지 않아도 사용되는 걸 알 수 있음.

'from math import sin, radians' 을 쓰면 (math 모듈에서 sin과 radians를 import해라)

→ sin함수에 'math.'를 붙이지 않아도 사용할 수 있음.


문제 4번

특정 목적 또는 분야에서 사용되는 함수, 상수 및 클래스를 모아 놓은 집합체는? [11강]

① 모듈

② 패키지

③ 라이브러리

④ 프레임워크


모듈 패키지 라이브러리
· 클래스, 함수, 상수의 집합
· 하나의 파이썬 파일로 되어 있음.
· 하위 패키지 및 모듈의 집합
· 하나의 폴더 단위
· 패키지 및 모듈의 집합
· 한 분야의 일을 할 수 있는 모듈과 패키지를 묶어 놓은 단위

프레임워크 : 애플리케이션의 개발과 실행을 도와주는 도구와 라이브러리의 모음


※ 프레임워크와 라이브러리의 차이점 [수업X, 참고O]

  라이브러리 (Library) 프레임워크 (Framework)
정의 독립적으로 동작하는 코드의 모음 개발을 위한 구조와 규칙을 갖춘 코드의 집합
사용 방식 개발자가 필요할 때 선택적으로 사용 개발자가 제공된 규칙에 따라 개발
제어 흐름 개발자가 직접 제어 프레임워크가 제어
개발자의 역할 개발자가 코드를 호출하여 사용 개발자가 프레임워크에 코드를 작성하여 제어
유연성 높은 유연성, 개발자가 자유롭게 선택 및 조합 가능 일정한 구조와 규칙에 따라 개발
특징 특정 기능을 수행하기 위한 도구 모음 개발 프로세스를 단순화하고 일관성 있는 코드 작성을 도와주는 구조와 규칙을 제공
예시 NumPy, pandas, matplotlib Flask, Django, React

• 라이브러리 : 개발자가 필요할 때 선택적으로 사용할 수 있는 도구 모음

• 프레임워크 : 개발을 위한 구조와 규칙을 갖춘 코드의 집합


문제 5번

특정한 배열 순서나 규칙적인 의미가 없는, 임의의 수는? [11강]

 

① 복소수

② 시드

③ 난수

④ 정수


난수(random number) : 특정한 배열 순서나 규칙적인 의미가 없는, 임의의 수를 의미

•  RNG (난수 발생기) : 번호들 사이에는 규칙이 없으나 프로그램을 실행할 때마다 동일한 값들이 도출되는 난수 발생

→ 같은 번호가 계속 나오면 시드(시작점)을 바꿔주면 됨.

 시드(seed) : 난수 생성기에 사용되는 초기값

- 난수 생성기는 시드 값을 입력으로 받아서 매번 다른 값을 생성함.

동일한 시드 값을 사용하면 항상 동일한 난수 시퀀스가 생성됨.


문제 6번

대규모 소프트웨어 개발에 자원을 투입하여 초기에 예상한 결과물 구현을 목적으로 소프트웨어 전체 개발 과정을 하나의 프로세스로 정의한 것은? [13강]

 

① 프로그램 빌드 과정

② 소프트웨어 모델링

③ 소프트웨어 개발 라이프사이클

④ DevOps


소프트웨어 개발 라이프사이클

대규모 소프트웨어 개발에 자원을 투입하여 초기에 예상한 결과물 구현을 목적으로 소프트웨어 전체 개발 과정을 하나의 프로세스로 정의한 것

1) Planning : 비용, 기간, 자원 계획 수립

2) Analysis : SW 기능/비기능 요구 정의 및 자료수집

3) Design : 구조, 데이터, 인터페이스, UI 정의

4) Implementation : 언어 선택, 코딩 규칙 정의, 프로그램 작성

5) Testing & Integration : 예상 결과 유사 검증 및 오류 파악

6) Maintenance : 프로그램 오류 수정, 새로운 요구 추가, 사용환경 변화 반영

 

DevOps

- "Development"와 "Operations"의 합성어

- 소프트웨어 개발과 운영을 통합하고 개선하기 위한 문화, 철학, 방법론

- 기존의 소프트웨어 개발 및 운영 프로세스에서의 갈등과 협업의 한계를 극복하고, 소프트웨어를 빠르게 제공하고 안정적으로 운영하기 위한 방법을 제시함.


문제 7번

매개변수 값의 합을 반환하는 summation 함수에 대해 빈칸에 알맞은 표현은?  [9강]

(단, 빈칸 뒤에 'sum = 0'이 있다고 가정한다.)

① i = numbers

② for i in numbers

③ i = i + 1

④ if i in numbers


매개변수 'numbers'가 다음 코드에 나와야 하므로 ③은 답에서 제외됨.

① i에 numbers를 대입하면, 다음 줄에서 sum은 매개변수로 들어오는 numbers 한 가지만 더해지고 끝남.

④ numbers에 i가 있다면 sum에 sum과 i를 더함. → i가 뭔지 모르는데?

  

매개변수 앞에 '*'가 있으면 가변매개변수 (ex. *numbers)


문제 8번

딕셔너리의 구성요소와 용어가 올바르게 짝지어진 것은?  [12강]

① 값(value)

② 항목(item)

③ 딕셔너리(dictionary)

④ 키(key)


· 딕셔너리(dictionary) : 키와 값의 쌍(pair)을 저장하는 시퀀스 (④)

· 키(key) : 딕셔너리 내에서 고유한 식별자 역할, 값에 접근하기 위한 인덱스 (①)

· 값(value) : 키와 연결된 데이터 (③)

· 항목(item) : 딕셔너리에서 키와 값의 쌍 (②)


문제 9번

매개변수로 전달된 숫자를 역순으로 출력하는 함수이다. 빈칸에 알맞은 연산자는?  [9강]

① ==

② /

③ %

④ //


% (모듈로 연산자): 나눗셈의 나머지를 계산

• // (정수 나누기 연산자): 나눗셈의 을 계산

num = 1234

def reverse_number(num) : # 매개변수 역할의 num
	while num !=0 :   # 0이 아닐 때까지 반복해라
    	digit = num % 10  # 10으로 나눴을 때 나머지 (123.4에서 4)
        num = num // 10   # 10으로 나눴을 때 몫 (123)
        print(digit, end="") (4가 출력됨)

reverse_number(num)       # 1번 줄에서 정의한 변수 num

문제 10번

객체와 객체 사이의 상호작용으로 프로그램을 구성하는 프로그래밍 패러다임은?  [10강]

 

① 명령형 프로그래밍

② 객체지향 프로그래밍

③ 구조적 프로그래밍

④ 객체관계 프로그래밍


객체지향

- 객체와 객체 사이의 상호작용으로 프로그램을 구성하는 프로그래밍 패러다임

- 프로그램을 유연하고 변경을 쉽게 만들어 대규모 소프트웨어 개발에 사용

 

객체지향 패러다임의 특징

- 명령형 프로그래밍, 절차적 프로그래밍의 특징을 계승하면서 코드의 재활용률을 높이고, 객체 사이사이의 상호작용 관점을 제공하는 객체지향 프로그래밍 → 추상화, 캡슐화, 상속, 다형성

추상화 : 공통의 속성이나 기능을 도출

캡슐화 : 데이터 구조와 데이터의 연산을 결합

상속 : 상위 개념의 특징이 하위 개념에 전달

다형성 : 유사 객체의 사용성을 그대로 유지


문제 11번

아래는 'khan.txt' 파일을 읽고 처리하는 프로그램이다. 다음 물음에 따라 답하시오.  [12강]

11-1.

파일 전체의 내용이 리스트로 저장되도록 (가)에 들어갈 알맞은 표현은?

① readlines(khan_fp)

② readlines( )

readlines(khan_mottos)

khan_fp.readlines( )

 


11-2.

파일 처리 후 프로그램이 종료되기 전 파일에 대한 마무리 작업으로 (나)에 들어갈 올바른 표현은?

① khan_fp.close()

 khan_fp.write("close")

close(khan_fp)

④ 없음


• '객체.메서드'의 형식으로 적어야 함.

ex. file.read(10), file.close()

①처럼 적어야 하고, ③처럼 적을 수 없음.

 

• 파일을 사용한 후에는 close()를 호출하여 메모리 누수를 방지


문제 12번

함수의 처리 결과 반환 시 사용하는 키워드는?  [9강]

 

① break

② result

③ return

④ continue


break : 반복문(for 또는 while)을 종료하고 반복문 바로 다음의 코드로 이동

for i in range(1, 6): # 1 ~ 5까지 반복
    if i == 3:        # i가 3일 때 멈추기
        break
    print(i)          # 2, 3이 출력됨.

위의 코드는 1부터 5까지의 숫자를 반복하여 출력하며, i가 3일 때 break 문을 만나 반복문이 종료됨.

→ 1과 2까지만 출력됨.

 

result : 일반적으로 변수 이름으로 사용되며, 결과값을 저장하는 변수를 의미함.

 

return : 함수에서 값을 반환하고 함수의 실행을 종료하는 역할을 함.

def add(a, b):    # 매개변수 a와 b를 입력받음
    return a + b  # a, b를 더한 값을 반환

result = add(3, 4)
print(result)

 

continue : 반복문에서 해당 반복 회차를 건너뛰고 다음 반복 회차로 진행함.

for i in range(1, 6): # 1부터 5까지 반복
    if i == 3:        # i가 3이면
        continue      # 건너뛰기
    print(i)          # 1, 2, 4, 5

위의 코드는 1부터 5까지의 숫자를 반복하여 출력하며, i가 3일 때 continue 문을 만나 다음 반복 회차로 건너뜀.

→ 3은 출력되지 않고, 1, 2, 4, 5가 출력됨.


문제 13번

다음은 EDP 구동 구조이다. 이벤트 루프의 역할에 대한 올바른 설명은?  [13강]

① 이벤트 생성 여부 확인 및 전달

② 이벤트 유형에 따른 이벤트 생성

③ 이벤트 저장

④ 이벤트 발생에 따른 코드 실행


· 이벤트 루프 : 이벤트 생성 여부 확인 및 전달

· 이벤트 발생 장치 : 이벤트 유형에 따른 이벤트 생성

· 이벤트 큐 : 이벤트 저장 구조

· 이벤트 핸들러 : 이벤트 발생에 따른 실행코드


문제 14번

소프트웨어 개발 라이프사이클에서 요구 반영, 예상 결과 유사 검증 및 오류 파악이 진행되는 단계는?  [13강]

① 계획

② 분석

③ 구현

④ 테스트


1) Planning (계획) : 비용, 기간, 자원 계획 수립

2) Analysis (분석) : SW 기능/비기능 요구 정의 및 자료수집

3) Design (설계) : 구조, 데이터, 인터페이스, UI 정의

4) Implementation (구현) : 언어 선택, 코딩 규칙 정의, 프로그램 작성

5) Testing & Integration (테스트) : 예상 결과 유사 검증 및 오류 파악

6) Maintenance (보수) : 프로그램 오류 수정, 새로운 요구 추가, 사용환경 변화 반영


문제 15번

다음 클래스의 인스턴스를 생성하는 표현은?  [10강]

① r1 = robot("android1")

② r1 = __init__("android1", , "cook")

③ r1 = create_skill("cook")

④ r1 = info( )


생성자_이름 = 클래스_이름("인자")

r1 = robot("안드로이드1")

인스턴스 r1의 이름을 출력하고 싶으면 'r1.info()'

→ 제 이름은 android1 입니다!

__init__(self, name)  · 클래스의 인스턴스를 초기화
· 인스턴스 생성 시 호출되며, 인자로 이름(name)을 받아 인스턴스의 속성으로 설정
· 빈 리스트로 초기화된 "skill" 속성도 설정
create_skill(self, skill)  · 인자로 스킬을 받아 해당 스킬을 "skill" 속성의 리스트에 추가
info(self) · 인스턴스의 이름(name)을 출력
class robot:
	def __init__(self, name):
		self.name = name
		self.skill = [ ]
	def create_skill(self, skill) :
	    self.skill.append(skill)
	def info(self):
	    print('제 이름은', self.name, '입니다!')
	    
# robot 클래스의 인스턴스 생성
my_robot = robot("노밧")

# create_skill 메서드 호출하여 스킬 추가
my_robot.create_skill("공격")
my_robot.create_skill("방어")
my_robot.create_skill("회복")

# robot name 확인
my_robot.info()

# skill 속성 출력하여 스킬 확인
print(my_robot.skill)


문제 16번

객체지향 프로그래밍에서 객체의 구성요소가 아닌 것은? [10강]

 

① 메소드

② 초기자

③ 데이터 필드

④ 내장 함수


객체지향 프로그래밍에서 객체의 구성요소로는 메소드, 초기자, 데이터 필드가 포함됨.

메소드 객체가 수행할 수 있는 동작이나 기능을 정의한 함수
객체의 특정 동작을 구현하고 해당 객체에 대한 행위를 수행
초기자 객체가 생성될 때 호출되는 특별한 메소드
주로 객체의 초기 상태를 설정하는 데 사용됨.
데이터 필드 객체의 상태를 저장하는 변수로서, 객체의 속성이나 정보를 나타냄.

내장 함수는 파이썬에서 기본적으로 제공되는 함수로, 특정 객체에 속하지 않고 독립적으로 사용됨.

ex. print(), len() 등



문제 17번

아래는 구구단 게임 소스코드이다. 다음 물음에 따라 답하시오.

a,b가 1~9의 임의의 정수가 되도록 (가), (나)에 공통적으로 사용되는 표현은? [11강]

① random.randrange(1, 9, 3)

random.randint(1, 9)

 random.choice(2, 9)

random.random( )


① random.randrange(1, 9, 3): 

1부터 9 사이의 숫자 중에서 3의 배수만을 고려하여 임의의 정수를 반환함.

1, 4, 7 중 하나의 숫자를 반환할 수 있음.

③ random.choice(2, 9): 

random.choice() 함수는 리스트나 튜플 등의 시퀀스에서 임의의 요소를 선택함.

→ random.choice([2, 9])와 같이 시퀀스를 전달해야 함.

④ random.random(): 

random.random() 함수는 0 이상 1 미만의 부동소수점 숫자를 반환함.


문제 18번

아래는 2차원 리스트 board에 포함된 모든 항목을 출력하는 함수이다. 다음 물음에 답하시오.

행마다 원소의 값이 새로운 라인에서 출력되도록 (가)에 print() 앞에 삽입되는 들여쓰기의 칸 수는? [12강]

(단, 들여쓰기 단위는 3칸이라고 가정한다.)

① 0

② 3

 6

④ 9


행마다 새로운 라인

→ 'for item in row:'의 반복문에서 라인을 나누어야 함.

→ 두 번째 반복문 끝나고 실행되므로 6칸 띄어쓰기임.

 

·3칸 : 첫 번째 반복문 끝나고 실행

·6칸 : 두 번째 반복문 끝나고 실행

·9칸 : 두 번째 반복문과 같이 실행

    for row in board:
        for item in row:
            print(item, end=" ")
            print(" ")
for row in board:
        for item in row:
            print(item, end=" ")
        print(" ")
row(행)의 각 숫자들이 반복될 때마다 한 줄씩 띄어씀.
1
2
3
4
5
6
한 row(행)의 각 숫자들이 반복된 후, 한 줄씩 띄어씀.
1 2 3
4 5 6
7 8 9


board = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

def show_board():
    for row in board:
        for item in row:
            print(item, end=" ")

# show_board() 함수 호출하여 board 출력
show_board()


문제 19번

아래는 파일에 포함된 단어의 출현 횟수를 세는 프로그램이다. 다음 물음에 따라 답하시오.

19-1.

wdict 딕셔너리에 word에 대한 항목 생성 여부를 확인하기 위한 표현으로 (가)에 들어갈 올바른 것은?  [12강]

① wdict.keys( )

② wdict.pop(word)

wdict.popitem( )

④ wdict.get(word)


① wdict.keys( )

wdict = {
    "apple": "사과", 
    "banana": "바나나", 
    "cherry": "체리"}

# wdict.keys()를 사용하여 모든 키(key)를 확인
keys = wdict.keys()
print(keys)

# < 출력 결과 >
# dict_keys(['apple', 'banana', 'cherry'])


② wdict.pop(word)

wdict = {
    "apple": "사과", 
    "banana": "바나나", 
    "cherry": "체리"}

word = "apple"

# wdict.pop(word)를 사용하여 word 키에 해당하는 항목 제거
value = wdict.pop(word)
print("제거된 항목의 값:", value)
print("수정된 딕셔너리:", wdict)

# < 출력 결과 >
# 제거된 항목의 값: 사과
# 수정된 딕셔너리: {'banana': '바나나', 'cherry': '체리'}


③ wdict.popitem( )

wdict = {
    "apple": "사과", 
    "banana": "바나나", 
    "cherry": "체리"}

# wdict.popitem()을 사용하여 임의의 항목 제거
item = wdict.popitem()
print("제거된 항목:", item)
print("수정된 딕셔너리:", wdict)

# < 출력 결과 >
# 제거된 항목: ('cherry', '체리')
# 수정된 딕셔너리: {'apple': '사과', 'banana': '바나나'}


④ wdict.get(word)

wdict = {
    "apple": "사과", 
    "banana": "바나나", 
    "cherry": "체리"}

word = "orange"

# wdict.get(word)를 사용하여 word에 대한 값을 확인
if wdict.get(word) is not None:
    print("'{0}'에 대한 항목이 이미 존재합니다.".format(word))
else:
    print("'{0}'에 대한 항목이 존재하지 않습니다.".format(word))

# < 출력 결과 >
# 'orange'에 대한 항목이 존재하지 않습니다.

19-2.

wdict에서 word 항목의 값을 가져오거나 저장하기 위해 (나)와 (다)에 공통으로 들어갈 올바른 표현은?

① wdict[word]

② wdict.get(word)

 wdict.pop(word)

④ wdict.values( )


딕셔너리 wdict에서 word 키에 해당하는 값을 가져오는 방법

 

① wdict[word]
wdict[word] = "사과" (값을 저장)

value = wdict[word] (값을 가져오기)

② wdict.get(word)

word 키에 대한 값을 반환하고, 해당 키가 존재하지 않는 경우에는 None을 반환함.

value = wdict.get(word)  (값을 가져오기)


문제 20번

아래는 3X3 2 차원 리스트 board 의 대각선 항목이 모두 X 기호로 채워져 있는지 검사하는 함수이다 .

다음 물음에 따라 답하시오. [14강]

아래와 같은 방향에 위치한 항목이 X로 채워졌을 때 True 가 반환되도록 각각 들어갈 (가)와 (나)의 표현은?

① i, i

② 3, 3 - i

i, 3 - 1 - i

④ 3 - i, i


행의 값은 0에서 1씩 증가

열의 값은 2에서 1씩 감소


연습문제 1.

다음과 같은 형식으로 실수를 출력할 때, 숫자 앞에 삽입된 공백(스페이스)의 개수는? [9강]

> 오른쪽 정렬
20  필드 폭
.3 소수점 이하 3자리까지 소수 


연습문제 2.

private 데이터 필드에 값을 설정하는 메소드를 접근자(accessor)라고 한다. [10강]

private 데이터 필드에 접근하는 메소드
· 접근자(accessor) : 데이터 필드 반환
· 변경자(mutator) : 데이터 필드 설정


연습문제 3.

다음은 객체의 생성 과정을 도식화한 것이다. 빈칸에 들어갈 알맞은 말은?

ⓙ 초기자 호출
② private 데이터 필드 생성
③ self 매개변수 전달
④ 객체 참조 변수 생성


• 클래스의 생성자는 클래스의 이름과 동일

• 클래스의 이름과 초기자의 매개변수를 사용하여 생성자를 호출

(생성자를 호출할 때 사용하는 파라미터가 초기자의 파라미터와 동일할 뿐임)

class Myclass:
    def __init__(self):
        self.__private_field = 10 
        # private 데이터 필드를 10으로 초기화
        
    def get_private_field(self):
        return self.__private_field
        # 접근자 메소드
    
    def set_private_field(self, value):
        self.__private_field = value
        # 변경자 메소드

# 클래스 인스턴스 생성
my_object = Myclass()

# private 데이터 필드에 접근하여 값 얻기
value = my_object.get_private_field()
print(value) 
# 출력: 10

# private 데이터 필드에 값을 설정하기
my_object.set_private_field(100)

# 변경된 값을 확인하기 위해 다시 접근
value = my_object.get_private_field()
print(value)
# 출력 : 100
728x90