2019 모두를위한코딩

IVIS wiki

Top

강의 개요

  • 컴퓨터 프로그래밍을 통해 문제해결을 할 수 있는 능력을 익힌다
  • 파이썬 프로그래밍 프로그래밍을 통하여 기초적인 프로그래밍 기법을 익힌다.
  • 기초적인 자료형의 이해와 프로그래밍의 원리를 익히도록 한다.

강의 진행

  • 강사의 강의와 토론 그리고 프로그래밍 실습을 통하여 프로그래밍 기법을 익힌다
    • 주당 3시간의 강의이며 이론 강의와 프로그래밍 실습을 병행한다.
  • 강의실 : 51호관 310호실
    • 강의시간 : 매주 월요일 오후 15:00-16:15, 수요일 오후 16:30-17:45,

강사

  • 정보통신공학과 교수 박동규
  • 이메일 : dongupak at gmail.com
    • 수시상담 환영

강의조교(TA)

  • 여러분의 강의를 도와줄 조교입니다
  • 김동욱 조교님

강의 교재

  • 파이썬
    • 강사의 자체 제작 교재로 진행함 2020년 출간 예정
  • 교재설명
창의적인 문제해결을 위한 프로그래밍 입문서. 이 책은 프로그래밍의 기본 개념을 정립하고 이를 바탕으로 문제를 해결할 수 있는 능력을 키우는 것에 초점을 두고 있다. 이를 위해 파이썬의 가장 쉬운 일부 기능만을 다루면서 다양한 문제해결 능력을 키워주는 예제와 실습으로 구성되어 있다.

과제관련

  • 과제 제출 기간은 제출일로부터 일주일
  • 각 문제 마다 아래 채점 기준을 만족 못할 시 한 문제당 1점씩 감점

  • 과제 표지
    • 매 표지 마다 과제 번호를 기입한다. ex) #1, #2, ...
    • 스탠플러는 왼쪽 상단에 찍는다.
  • 이론 문제
    • 문제와 답을 적는다.
      • 문제를 적지 않을 시 감점
      • 타이핑 가능
      • 스캔 불허
  • 실습 문제
    • 문제와 소스코드을 적는다.
      • 문제를 적지 않을 시 감점
      • 타이핑 가능
      • 스캔 불허
    • 실행 결과를 캡쳐하여 삽입한다.
      • 배경은 흰색으로 한다.
    • 코드에는 주석을 달도록한다.
      • 주석 달지 않을 시 감점
    • 각 실습문제마다 느낀점이나 어려웠던 점을 2문장 이상 적어서 제출한다.
      • 느낀점을 적지 않을시 감점
      • 풀지 못한 문제나 어려운 문제도 반드시 느낀점을 적도록 한다.
  • 과제 샘플

2017 VP Reportform1.png 2017 VP Reportform2.png

맥 활용

파이썬과 PyCharm 편집기 통합개발환경 설치

1주차 강의

  • 9월 2일, 4일(월요일, 수요일)
    • 강사소개
    • 강의내용, 교재등에 대한 소개
    • 프로그래밍을 알아야 하는 이유
    • 컴퓨터 프로그래밍의 간단한 역사등
  • Code.org 활용( http://code.org/ )
    • Code.org에서 계정만들기
    • Code.org에서 리사와 함께 그림그리기
    • 마인크래프트 문제 풀어보기
      • 섹션 코드 : SYJNBB

강의자료(강의 소개, 1장)

과제 #1

  • code.org에 계정만들기
  • 안나 엘사와 함께하는 코드
    • 섹션코드 : JWHVHJ
      • 안나 엘사와 함께하는 코드의 섹션코드를 입력한 섹션의 모든 문제를 해결한 후 제일 마지막 문제의 결과와 수료증을 출력하여 제출하세요
  • 가장 마지막 문제는 자유롭게 그림을 그리는 것으로 여러분이 만들고자 하는 그림을 자유롭게 그려보세요
    • 단 반복문을 2개 이상 사용하여야 합니다.
    • 제출일 : 9월 9일 월요일 강의시작 전에 제출
  • 위의 블럭코딩 과제를 하면서 느낀점과 어려웠던 점을 2문장 이상 적어서 제출할 것
  • 재수강 학생이나 블록코딩을 미리 한 학생들은 기존 계정을 삭제하고 새 계정을 만들어서 하세요
  • 과제 샘플

2018 BP Reportform1.png 2018 BP Reportform2.png

  • 위와같이 영문으로 수료증을 생성한 후 다음과 같이 포트폴리오와 함께 수료증을 출력한다
  • 느낀점과 어려웠던 점도 손으로 적어서 제출한다
    • Your Ice Art 가 나타나지 않을 경우 아래와 같이 결과를 출력하여 제출하도록 한다

2018 BP Reportform3.png

  • 마지막 작품 제출하는 방법
    • 다음과 같은 방법으로 여러분이 만든 그림의 블럭과 결과를 캡쳐하시오

2018 BP Report1-1.png 2018 BP Report1-2.png 2018 BP Report1-3.png 2018 BP Report1-4.png

2주차 강의

  • 9월 9일, 9월 11일
  • 내용
    • 컴퓨터란 무엇인가?
    • 프로그래밍 언어
    • 파이썬의 역사
    • 파이썬 시작하기
    • 프로그래밍 스타일과 문서화
    • 프로그래밍 오류
    • 변수와 연산자
  • 파이썬 소개
    • 파이썬 설치하기(www.python.org)
    • 파이썬 실행하기
      • 윈도우에서 경로 설정하기

강의자료(2장)

과제 #2

  • 수강생들은 각자 개인용 컴퓨터나 노트북에 python 3.x 를 다운받아서 설치한다
    • 또한 통합개발환경으로 pyCharm을 설치하도록 한다.(설치방법은 구글링을 통해서 하도록 할 것)
    • 구글계정을 만들고 구글의 코랩에 접속한다.
    • 교재의 문제는 ex1_1.py, ex1_2.py 형식의 파일로 작성하도록 한다(-(하이픈)문자가 아닌 _(언더스코어)로 만들기).
    • colab 환경일 경우 파일이 아닌 코드 셀로 만든다.
  • 제목 : 교재 1장 프로그래밍 연습 문제 풀이
  • 제출일자 : 9월 23일 강의시작전까지 제출
    • 1장 연습문제 문제 풀이하기
    • 소스코드와 그 수행결과를 제출할 것
    • 모든 문제 각각에 대해 어려웠던점 느낀점을 한 문장 이상 적어서 제출하기
    • 제출요령은 위의 과제관련 페이지 참조할 것

3주차 강의

  • 수업 9월 16일, 18일
    • 파이썬 변수, 연산자에 대해 알아봅시다.

4주차 강의

  • 9월 23일, 9월 25일
  • 파이썬 프로그래밍기초
    • 콘솔에서 입력 받기
    • 식별자
    • 변수, 할당문과 표현식
    • 동시 할당문
    • 이름 상수
    • 수치 데이터 타입과 연산자
    • 표현식과 연산자 우선순위
    • 확장 할당 연산자
    • 조건문, for, while을 이용한 반복문

강의자료(3장)

과제 #3

  • 제목 : 교재 2장 연습문제 풀이
  • 제출일자 : 2019년 9월 30일
    • 교재 2장의 프로그래밍 연습문제 풀이
    • 2.1부터 2.26까지 짝수번 문제를 풀어보세요.
      • 소스코드와 수행결과를 캡쳐하여 제출하시오
      • 모든 문제에 대하여 느낀점과 어려웠던 점을 한 문장 이상 적어서 제출하시오
      • 모든 코드에 대해서 2줄 이상의 주석문을 다음과 같이 달도록 하시오
# 섭씨 온도를 화씨로 변경하는 프로그램
# 다음의 공식을 이용하였다
# fahrenheit = (9/5) * celsius + 32

참고할 내용들

5주차 강의

  • 9월 30일, 10월 2일
    • 3장 제어문과 반복문

과제 #4

  • 제목 : 3장 연습문제 풀이
  • 제출일자 : 2019년 10월 9일 수요일
    • 교재 3장의 프로그래밍 연습문제 풀이
    • 3.1 ~ 3.10까지 풀이
      • 소스코드와 수행결과를 캡쳐하여 제출하시오
      • 모든 문제에 대하여 느낀점과 어려웠던 점을 한 문장 이상 적어서 제출하시오
      • 모든 코드에 대해서 2줄 이상의 주석문을 달도록 하시오

알림(퀴즈)

  • 10/2일 강의시간에는 연습문제의 문제풀이 퀴즈가 있습니다.
    • 2, 3장의 연습문제를 많이 풀어보시기 바랍니다.

6주차 강의

  • 10월 7일, 10월 9일(한글날)
  • 3장 제어문
    • 부울타입과 부울식
    • if문, if-else문, if-elif-else 명령문을 이용한 선택적 제어
    • 제어문을 이용한 문제 풀이

7주차 강의

  • 10월 14일, 10월 16일
  • 선택문
    • 연산자 우선순위
    • 반복문
    • while 문, for 문을 이용한 문제해결 방법

강의자료( 5장 )

과제 #5

  • 제목 : 3장 연습문제 풀이
  • 제출일자 : 2019년 10월 28일
    • 교재 3장의 프로그래밍 연습문제 풀이
    • 3.13 ~ 3.22번 문제
      • 소스코드와 수행결과를 캡쳐하여 제출하시오
      • 모든 문제에 대하여 각각 느낀점과 어려웠던 점을 한 문장 이상 적어서 제출하시오
      • 모든 코드에 대해서 2줄 이상의 주석문을 달도록 하시오

8주차 강의

  • 10월 21일은 정상 강의합니다.
    • 함수와 매개 변수, 인자의 전달방식
  • 중간평가 시험 10월 23일
  • 반복문
    • for, while 문을 이용한 문장의 반복수행
    • 무한루프

중간평가 시험

  • 10월 23일 수요일 16:30 - 17:45
  • 시험범위 : 교재 1장 - 3장
    • 주관식과 객관식문제 혼용

과제 #6

  • 제목 : 4장 연습문제 4.1 ~ 4.9번 풀이
  • 제출일자 : 2019년 10월 31일
    • 교재 4장의 프로그래밍 연습문제 풀이
    • 4.1 ~ 4.9번 문제
      • 교재의 프로그램을 colab 환경에서 작성하여 작성된 문서를 공유하여 제출
      • 공유할 주소는 다음의 두 곳으로 이 주소에 모두 공유를 해야합니다.
        1. dongupak@gmail.com (교수)
        2. dkfnfn9871@gmail.com (조교님)
      • 모든 문제에 대하여 각각 느낀점과 어려웠던 점을 한 문장 다음과 같이 colab의
      • 모든 코드에 대해서 2줄 이상의 주석문을 달도록 하시오
  • 과제 제목 붙이는 방법
    • 과제의 제목에는 과제 번호, 제목 소속, 이름이 나오도록 할 것

Report6 colab title.jpg

  • 과제의 내용에는 코드와 코드에 대한 설명을 추가할 것
    • 느낀점 어려웠던 점을 적으시오.

Report6 colab report2.jpg

  • 이 파일을 공유해 주십시오.
    • 날짜는 10월 31일에 보내세요 날짜 준수해 주세요

Report6 colab share2.jpg

9주차 강의

  • 10월 28일, 10월 30일
  • 파이썬 함수
    • 함수의 특징
    • 매개변수
    • 참조값의 전달

과제 #6

  • 제목 : 중간 평가 시험 문제 풀이
  • 중간시험 문제를 적고 정답을 구하여 적으시오
  • 코딩 문제는 코딩을 한 후 소스코드와 결과를 함께 제출하여야 합니다
  • 마지막 문제는 안해도 됩니다.
    • 제출 일 : 10월 30일까지

10주차 강의

  • 11월 4일, 11월 6일
  • 파이썬의 입출력 함수와 format() 메소드의 기능을 알아봅시다.

11주차 강의

  • 11월 11일, 11월 13일
  • 함수와 매개변수
    • 객체와 클래스
    • 데이터 필드와 메소드를 이용하여 클래스를 만들어 보자
    • 변경가능 클래스와 변경불가능 클래스를 구분하여 보자
  • 다양한 함수 프로그래밍을 해 보도록 합시다

과제 #8

  • 제목 : 6장 연습문제 풀이
    • 문제 6.2, 6.3, 6.4, 6.5, 6.9 풀이
      • 소스코드와 수행결과를 캡쳐하여 제출하시오
      • 모든 문제에 대하여 느낀점과 어려웠던 점을 한 문장 이상 적어서 제출하시오
      • 모든 코드에 대해서 2줄 이상의 주석문을 달도록 하시오
  • 제출일 : 5월 24일까지

멘토링 알림

  • 알림 : 기초 프로그래밍 멘토링
    • 멘토 : 여러분을 도와주는 조교선생님
    • 멘티 : 수강생 여러분 모두
  • 멘토링 시간 : 매주 목요일 오후 6:00 - 6:30
  • 장소 : 310강의실
  • 준비물 :
    • 여러분이 기초프로그래밍 문제에 대해서 궁금한 질문거리를 가져오세요
    • 멘토님이 1:1 로 상담을 도와줍니다.
    • 주의 : 숙제를 대신해 주는 것이 아닙니다. 숙제를 하거나 문제를 풀다가 막히는 부분을 상담하고 알려주는 것이 멘토의 할 일 입니다. 멘토님과 함께 즐거운 프로그래밍 시간 되시기 바랍니다.

12주차 강의

  • 11월 28일, 11월 20일
  • 객체지향 프로그래밍
    • 객체의 개념, 객체와 클래스
  • 8장 문자열
    • 문자열관련 함수

강의자료( 7장 )

13주차 강의

  • 11월 25일, 11월 27일
  • 문자열과 특수 메소드
    • 문자열의 길이, 가장 작은 문자, 큰 문자를 얻기위해 사용하는 함수
    • 다양한 문자열 함수에 대해 살펴봅시다

강의자료( 8장 )

Lab( CheckPalindrom.py )

def main():
    # 사용자로부터 문자열을 입력받는다.
    s = input("문자열을 입력하세요: ").strip()

    if isPalindrome(s):
      print(s, "은/는 회문입니다.")
    else:
      print(s, "은/는 회문이 아닙니다.")

# 문자열이 회문인지 검사한다.
def isPalindrome(s):
    # 문자열의 첫 문자 인덱스
    low = 0

    # 문자열의 마지막 문자 인덱스
    high = len(s) - 1

    while low < high:
        if s[low] != s[high]:
            return False # 입력한 문자열은 회문이 아니다.

        low += 1
        high -= 1

    return True # 입력한 문자열은 회문이다.

main() # main 함수를 호출한다.

400px

Lab( HexToDecimalConversion.py )

def main():
    # 사용자로부터 16진수 숫자를 입력받는다.
    hex = input("16진수 숫자를 입력하세요: ").strip()

    decimal = hexToDecimal(hex.upper())
    if decimal == None:
        print("잘못된 16진수 숫자입니다.")
    else:
        print("입력된 16진수 숫자",
            hex, "에 대한 10진수 표현은", decimal, "입니다.")

def hexToDecimal(hex):
    decimalValue = 0
    for i in range(len(hex)):
        ch = hex[i]
        if 'A' <= ch <= 'F' or '0' <= ch <= '9':
            decimalValue = decimalValue * 16 + \
                hexCharToDecimal(ch)
        else:
            return None

    return decimalValue

def hexCharToDecimal(ch):
    if 'A' <= ch <= 'F':
        return 10 + ord(ch) - ord('A')
    else:
        return ord(ch) - ord('0')

main() # main 함수를 호출한다.

400px

14주차 강의( 12월 2일, 12월 4일 )

  • 터틀그래픽, Tkinter를 이용한 GUI 프로그래밍 살펴보기

강의자료( 9장 )

강의자료( 10장 )

Lab( SimpleGUI.py )

from tkinter import * # tkinter의 모든 정의를 임포트한다.

window = Tk() # 창을 생성한다.
label = Label(window, text = "파이썬에 오신것을 환영합니다.") # 레이블을 생성한다.
button = Button(window, text = "저를 클릭해주세요") # 버튼을 생성한다.
label.pack() # 창 내부에 레이블을 배치한다.
button.pack() # 창 내부에 버튼을 배치한다.

window.mainloop() # 이벤트 루프를 생성한다.

Lab( ProcessButtonEvent.py )

from tkinter import * # tkinter로부터 모든 정의를 임포트한다.

def processOK():
    print("OK 버튼이 클릭되었습니다.")

def processCancel():
    print("Cancel 버튼이 클릭되었습니다.")

window = Tk() # 창을 생성한다.
btOK = Button(window, text = "OK", fg = "red", command = processOK)
btCancel = Button(window, text = "Cancel", bg = "yellow",
                  command = processCancel)
btOK.pack() # OK 버튼을 창 내부에 배치한다.
btCancel.pack() # Cancel 버튼을 창 내부에 배치한다.

window.mainloop() # 이벤트 루프를 생성한다.

Lab( ProcessButtonEvenAlternativeCode.py )

from tkinter import * # tkinter의 모든 정의를 임포트한다.

class ProcessButtonEvent:
    def __init__(self):
        window = Tk() # 창을 생성한다.
        btOK = Button(window, text = "OK", fg = "red",
                      command = self.processOK)
        btCancel = Button(window, text = "Cancel", bg = "yellow",
                          command = self.processCancel)
        btOK.pack() # OK 버튼을 창 내부에 위치시킨다.
        btCancel.pack() # Cancel 버튼을 창 내부에 위치시킨다.

        window.mainloop() # 이벤트 루프를 생성한다.

    def processOK(self):
        print("OK 버튼이 클릭되었습니다.")

    def processCancel(self):
        print("Cancel 버튼이 클릭되었습니다.")

ProcessButtonEvent() # __init__ 메소드를 호출하기 위해 객체를 생성한다.

Lab( WidgetsDeom.py )

from tkinter import * # tkinter의 모든 정의를 임포트한다.

class WidgetsDemo:
	def __init__(self):
		window = Tk() # 창을 생성한다.
		window.title("위젯 데모") # 제목을 설정한다.

 		# 체크 버튼과 라디오 버튼을 frame1에 추가한다.
		frame1 = Frame(window) # 프레임을 생성하고 창에 추가한다.
		frame1.pack()
		self.v1 = IntVar()
		cbtBold = Checkbutton(frame1, text = "굵게",
			variable = self.v1, command = self.processCheckbutton)
		self.v2 = IntVar()
		rbRed = Radiobutton(frame1, text = "빨간색", bg = "red",
			variable = self.v2, value = 1,
			command = self.processRadiobutton)
		rbYellow = Radiobutton(frame1, text = "노란색",
			bg = "yellow", variable = self.v2, value = 2,
			command = self.processRadiobutton)
		cbtBold.grid(row = 1, column = 1)
		rbRed.grid(row = 1, column = 2)
		rbYellow.grid(row = 1, column = 3)

 		# 레이블, 엔트리, 버튼, 메시지를 frame2에 추가한다.
		frame2 = Frame(window) # 프레임을 생성하고 창에 추가한다.
		frame2.pack()
		label = Label(frame2, text = "이름을 입력하세요: ")
		self.name = StringVar()
		entryName = Entry(frame2, textvariable = self.name)
		btGetName = Button(frame2, text = "이름 가져오기",
			command = self.processButton)
		message = Message(frame2, text = "위젯 데모입니다.")
		label.grid(row = 1, column = 1)
		entryName.grid(row = 1, column = 2)
		btGetName.grid(row = 1, column = 3)
		message.grid(row = 1, column = 4)

		# 텍스트를 추가한다.
		text = Text(window) # 텍스트를 생성하고 창에 추가한다.
		text.pack()
		text.insert(END,
			"팁\nTkinter를 학습하는 최고의 방법은 잘 짜여진 ")
		text.insert(END,
			"예제를 세세히 읽고 애플리케이션을 생성하는데 ")
		text.insert(END, "직접 사용해 보는 것이다.")

		window.mainloop() # 이벤트 루프를 생성한다.

	def processCheckbutton(self):
		print("체크 버튼이 "
			+ ("선택되었습니다. " if self.v1.get() == 1 else "해제되었습니다."))

	def processRadiobutton(self):
		print(("빨간색" if self.v2.get() == 1 else "노란색")
			+ " 이 선택되었습니다." )

	def processButton(self):
		print("당신의 이름은 " + self.name.get() + "입니다.")

WidgetsDemo() # GUI를 생성한다.

400px

15주차 강의

  • 12월 9일, 12월 11일
  • 보충강의주

마지막 강의자료(프로그래밍 잘하기)

16주차 강의( 12월 16일 )

  • 기말시험주
    • 학기말 시험 : 12월 16일 월요일 12:00 예정
    • 중간시험과 비슷한 형식의 문제로 주관식, 객관식, 코딩문제가 출제됩니다.
    • 시험 범위 : 교재1장부터 학기말까지 배운 장까지(10장)
  • 예상문제 1(코드 6-1 참고)
1-1 두 수 중에서 큰 수를 반환하는 함수 max(num1, num2) 를 정의하라.
1-2 max 함수에 5와 2를 넣어 두 수 중에서 큰 수를 출력하는 함수 main 함수를 정의하여라
  • 예상문제 2(코드 6-2 참고)
2-1 score를 매개변수로 받아서 90점 이상이면 'A', 80점 이상이면 'B', 70점 이상이면 'C', 60점 이상이면 'D', 나머지는 'F'를 출력하는 printGrade(score) 함수를 정의하여라
2-2 사용자로부터 점수를 입력받아서 printGrade 함수를 호출하여 성적을 출력하는 main 함수를 정의하여라 
  • 위와 같이 교재의 코드나 연습문제를 푸는 코딩 문제가 출제됩니다.