수업 로드맵
1. CS101 강의 소개
2. 조건문과 while반복문
3. 변수와 기초 자료형
4. 매개 변수와 반환값을 가진 함수
5. 지역/전역 변수와 그래픽 객체들
6. 시퀀스: 리스트, 문자열, 튜플
7. 다양한 자료구조와 ( 문자열, 집합, 사전 )
8. 자료구조를 활용한 이미지 및 텍스트 프로세싱
9. 객체: 생성과 속성
10. 프로그램 작성 고급 기술
1-1 . 강의 소개
#1. 컴퓨팅 사고(Computational Thinking)
: 컴퓨터를 사용한 문제 해결
-여러 단계의 추상화에 대한 이해
-문제를 여러 문제로 나눠서 푸는 방법
-사람의 체계적인 사고 방법 != 컴퓨터처럼 생각하기
-문제 해결 방법에 대한 생각 (알고리즘)
30년 전에는 과학, 엔지니어링 분야에서 수식을 통해 문제를 해결했다면, 최근에는 알고리즘을 통해 문제를 해결한다
#2. 프로그램이란?
1) 프로그램: 문제를 해결하거나 목표를 달성하기 위한 순차적인 명령
ex. 레시피
2) 명령: 컴퓨터가 수행할 수 있는 일 하나하나
-> 하나에 국한하지 않고 명령들을 결합하여 보다 추상적인 새로운 명령을 정의할 수 있다.
3) 알고리즘: 문제를 풀기 위한 방법
#3. 디버깅이란?
1)버그: 프로그램에서 잘못된 부분
2)디버깅: 프로그램의 오류를 찾고 고치는 일
-> 디버깅 = 실험 : 실험을 하고 가설을 세우고 프로그램을 변경해서 가설을 증명한다
3) 버그의 종류:
(1) Syntax error: python이 작성한 프로그램을 이해하지 못합니다. 프로그램을 실행할 수 없습니다.
-> 문법 오류
(2) Runtime error: 프로그램 실행 중에(runtime) 에러 메시지와 함께 프로그램이 갑자기 종료된다.
-> 다 실행 못하고 죽음
(3) Semantic error: 프로그램이 에러 메시지 없이 실행되지만, 사용자가 기대하지 않은 실행 결과가 나온다.
-> 결과가 잘못됨
#4. 프로그램의 유용성
- 산업 로봇, 컴퓨터로만 풀 수 있는 문제들
- 자동차: 반도체와 수백만 줄로 이뤄진 프로그램
- 수학자: 그래프나 집합 등의 수학적 구조들을 프로그램을 통해 만들어 연구의 단서를 찾기 위해 사용
- 실험 결과: 필요성에 맞게 가공되거나 분석될 필요가 있음. Python을 사용하면 이런 일들을 훨씬 쉽게 할 수 있다.
또한, 최근의 실험 결과들은 사람들이 직접 분석할 수 없을 만큼 커지고 있다.
#5. 왜 프로그래밍은 재미있는가?
-프로그래밍은 창작 활동입니다.
우주선의 복잡한 소프트웨어 시스템을 혼자서도 만들 수 있습니다. 다른 어떤 분야에서도 비슷한 일을 하기는 힘듭니다.
-프로그래머들은 거대한 오픈 소스 커뮤니티를 만들고 있습니다. 프로그램을 재미 삼아 만드는 사람들이나, 자신의 프로그램을 공개하고 싶은 사람들은 프로그램 코드를 무료로 인터넷에 공개하고 있습니다. 공개된 코드는 누구나 사그러므
#6. Python
-인공지능 프로그램 작성에 사용
-NASA 등 수학자나 물리학자들이 과학적 계산 위해 사용
-Google에서 웹 프로그래밍 할 때 사용
-스마트폰과 같은 임베디드 환경에서도 사용
-많은 게임들의 개발에 사용
-다른 프로그래밍 언어 공부에 도움
1-2. Python 소개
-python 프로그램의 형태 및 동작 이해
-하향식 프로그램 설계 방식 이해
[목차]
1. 함수
2. 프로그램 실행 순서
3. 하향식 설계
4. 간단한 반복
5. 반복된 코드 제거
#1. 함수
-함수: 여러 개의 프로그램 명령어들을 모아 놓은 것
= 새로운 함수의 이름 + 함수가 호출될 때 실행될 명령
= "함수의 이름과 실행할 명령들을 모아놓은 코드"
Ex. def print_message(): -> 함수의 이름
print("CS101") -> 실행할 명령들
print("Program")
-> 함수 안에서 다른 함수를 호출할 수 있다.
Ex. def repeat_message():
print_message()
print_message()
=> 위 예시는 모두 함수를 정의한 것
=> print_message()라고 다시 쳐야 함수가 실행된다
#2. 프로그램의 실행 순서
-첫번째 명령부터
-명령은 위에서 아래로 하나씩 실행
-함수의 정의 : 함수를 정의할 뿐 실행하지 않는다
-함수를 호출하면 정의대로 실행
-그 다음 명령 실행
#3. 하향식 설계
-하나의 큰 문제-> 중간 크기의 여러 문제
중간 크기의 문제에 대한 해결책 -> 더 작은 크기의 문제들로 나눈다
-작은 문제에 대한 해결책 작성 뒤 모아서 중간, 중간 모아서 큰 문제에 대한 해결책으로 활용
Ex. 로봇이 4개의 계단을 올라가서 비퍼를 놓고 다시 원위치하는 명령 [큰 문제]
-> 1) 중간 문제 : 4개의 계단을 올라간다/ 비퍼를 놓는다 / 뒤돈다 / 다시 내려온다
2) 작은 문제: 한개의 계단을 올라간다*4/ 비퍼를 놓는다/ 뒤돈다 / 한개의 계단을 내려온다*4
-> #1. 로봇 생성 hubo = Robot(Beeper = 1) -> 인자의 default값을 가진 객체 : 매개변수 beeper에 인자를 넣지 않 으면 default로 1이 들어간다는 말
#2. 함수 정의 hubo.turn_left()/ def turn_right(): -> .뒤의 함수는 멤버함수/ turn_right()는 hubo라는 객체의 멤버함 수로 정의되지 않았기 때문에 hubo.turn_right()로 쓰지 않는다.
hubo.turn_left()
hubo.turn_left()
hubo.turn_left()
#3. 2)작은 문제
2-1) def climb_up_stair():
hubo.turn_left()
hubo.move()
turn_right()
hubo.move()
hubo.move()
def turn_around():
hubo.turn_right()
hubo.turn_right()
같은 방법으로 climb_down_stair() 정의
cf. hubo.drop_beeper()-> 이미 정의된 함수(메소드)
3)중간문제
def climb_up_four_stairs():
climb_up_stair()
climb_up_stair()
climb_up_stair()
climb_up_stair()
같은 방법으로 climb_down_four_stairs() 정의
4)큰 문제
def up_dropbeeper_down():
hubo.move()
climb_up_four_stairs()
hubo.drop_beeper()
turn_around()
climb_down_four_stairs()
#4. 반복문
for i in range(4) : <- for 반복문
print("CS101")
print("program") -> 이 두줄은 : 아래 indent되므로 for 반복문에 해당되어 range(4): 0~3 즉 4번 반복이 된다
print("program") -> 하지만 마지막 줄은 indent되지 않아 for 반복문에 들어가지 않으므로 1번 출력된다.
#5. 반복문 활용
: 반복문을 활용해 반복된 코드를 제거할 수 있다.
def climb_up_four_stairs():
climb_up_stair()
climb_up_stair()
climb_up_stair()
climb_up_stair()
def climb_up_four_stairs():
for i in range(4):
climb_up_stair()
=> 코드의 반복을 피할 수 있다.