160804: 100회차
Programming
2016. 8. 4. 12:18
종료하기 전 티스토리 네이버 로그아웃 할 것
1. 툴
동일
추가시:
2. 폴더
동일
추가시:
3. 사용할 사이트
동일
추가시:
4. 공부하는 것
[09] 제어문, 키보드 입력, 출력문
[01] 제어문
1. 조건문
- if 문은 단순히 식에 대한 평가를 수행해서 그것이 참인지 거짓인지에 따라
다른 일을 한다.
if <검사할 식>:
작업을 수행
else:
다른 작업을 수행
>>> x = 3
>>> y = 2
>>> if x == y:
print 'x는 y와 같습니다'
elif x > y:
print 'x는 y보다 큽니다'
else:
print 'x는 y보다 작습니다'
x는 y보다 큽니다
2. 반복문
- while 문
while 참
연산을 수행
>>> x = 9
>>> y = 2
>>> while y < x:
... print 'y is %d less than x' % (x-y)
... y += 1
...
y is 7 less than x
y is 6 less than x
y is 5 less than x
y is 4 less than x
y is 3 less than x
y is 2 less than x
y is 1 less than x
- for 문
for 각각의 값 in 정의된 집합:
연산의 묶음을 수행
>>> for x in range(10):
... print x
...
0
1
2
3
4
5
6
7
8
9
- range는 파이썬의 내장 함수로서 단순히 특정한 값에서 다른 값까지의 범위를 제공한다.
위 예제에서, range에 10이라는 값을 넘겨주고서 0에서 10 사이의 모든 값을 돌려받았는데,
앞쪽의 0을 포함되었고 끝의 값은 제외되었다.
[02] 키보드 입력
1. 키보드 입력
- 파이썬 언어는 사용자 입력을 허용하는 애플리케이션의 작성을 지원하기 위해 키보드
입력을 받는 한 쌍의 내장 함수를 갖고 있다. 바로 raw_input()과 input()을 사용하여
명령행에서 입력을 요청하고 사용자의 입력을 받아들일 수 있다.
- raw_input()과 input()함수 사용
# 함수 내의 텍스트는 선택사항이며, 사용자에게 프롬프트로 사용됨
>>> name = raw_input("Enter Your Name:")
Enter Your Name:Josh
>>> print name
Josh
# 사용자가 입력한 식을 평가하는 input 함수를 사용
>>> val = input ('Please provide an expression: ')
Please provide an expression: 9 * 3
>>> val
27
# 식이 제공되지 않으면 입력 함수가 에러를 제기
>>> val = input ('Please provide an expression: ')
Please provide an expression: My Name is Josh
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
My Name is Josh
^
SyntaxError: invalid syntax
val = input("Please provide an expression:")
Please provide an expression:"My name is Josh"
val
Out[174]: 'My name is Josh'
[03] 출력문
1. 출력문
- 출력print 문은 프로그램 결과를 화면에 출력하는데 사용된다.
프로그램 내에서 출력되는 메시지를 표출하고, 계산된 값을 출력할 수도 있다
>>>print 'This text will be printed to the command line'
>>> my_value = 'I love programming in Jython'
>>> print my_value
I love programming in Jython
- 문자열에 숫자 값을 추가하려고 하면 오류를 맞이하게 될 것이다.
>>> z = 10
>>> print 'I am a fan of the number: ' + z
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
- 변수의 내용이나 식의 결과를 print 문에 포함하고 싶으면, 다음의 구문을 사용한다.
print 'String of text goes here %d %s %f' % (decimalValue, stringValue, floatValue)
%s - 문자열
%d - 십진수
%f - 부동소수점수
>>> string_value = 'hello world'
>>> float_value = 3.998
>>> decimal_value = 5
>>> print 'Here is a test of the print statement using the values: %d, %s, and %f' % (decimal_value, string_value, float_value)
Here is a test of the print statement using the values: 5, hello world, and 3.998000
>>> x = 1
>>> y = 2
>>> print 'The value of x + y is: %d' % (x + y)
The value of x + y is: 3
>>> x = 2.3456
>>> print '%s' % x
2.3456
>>> print '%d' % x
2
>>> print '%f' % x
2.3
[10] 예외처리, 함수, 클래스
[10] 예외처리
- 일부 자바코드는 try-catch-finally 문 안에서 예외를 처리하지 않으면 컴파일조차 되지 않는다.
파이썬은 자바와 유사한 구조를 가지고 있다.
- throw 라고 하는 것은 자바에서 쓰이는 표현이다. 파이썬에서는 예외를 던지는 것이 아니라,
그저 예외를 일으킨다(raise). 서로 다르게 표현하고는 있지만 기본적으로 두 용어는 같은 것이다.
# 다음 함수는 try-except 문을 통하여 사용자가 0을 분모로 전달하면
# 친절한 에러 메세지를 제공한다.
>>> from __future__ import division
>>> def divide_numbers(x, y):
... try:
... return x/y
... except ZeroDivisionError:
... return 'You cannot divide by zero, try again'
…
# 8 나누기 3을 시도
>>> divide_numbers(8,3)
2.6666666666666665
# 8 나누기 0을 시도
>>> divide_numbers(8, 0)
'You cannot divide by zero, try again'
- 파이썬에서는 또한 else 절을 제공하여 try-except-else 논리를 구성할 수 있다. else는 선택사항으로서
아무런 예외도 찾을 수 없을 경우에 수행할 코드를 넣을 수 있다.
- 아무런 예외가 발생하지 않을 경우에만 수행하여야 하는 작업과 같은 예외 처리 논리를 다루기 위하여
else 절을 사용할 수 있다. else 절 내의 코드는 아무런 예외도 던져지지 않았을 때에만 시작되며,
else 절 내에서 어떠한 예외가 발생하게 되면 except로 돌아가지 못한다.
- try-except 블록은 원하는 만큼 겹칠 수 있다. 겹쳐진 예외 처리 블록의 경우, 만약 예외가 던져지면 오류를 받는
가장 안쪽의 블록으로부터 프로그램 제어가 바로 윗 블록으로 건너뛰게 된다.
# 키보드 입력을 통하여 받은 숫자에 대하여 나눗셈을 수행
quotient - 몫
[02] 함수
1. 함수의 정의
[03] 클래스
- 파이썬은 C++, JAVA처럼 객체지향 언어이다.
- 파이썬의 모든 것은 객체라는 것으로 이루어져 있으며 클래스는 이 객체를 만들기 위한
설계도, 명세서라 할 수 있다.
>>> var = '파이썬 객체 지향'
>>> id(var) #var의 식별자확인(java의 hashcode)
60456245
>>> type(var) #var의 타입 확인
<class 'str'>
- 파이썬의 클래스 역시 하나의 객체이다.
- 문자열형 클래스 str은 type 클래스의 객체이다.
- type 클래스 역시 type클래스의 객체이다.
>>> str # 문자열형
<class 'str'>
>>> type(str)
<class 'type'>
>>> id(str) # 식별자 존재
17481545
1. 클래스 정의 및 사용
- test01.py 로 저장
- read_book 메소드 앞에 def생략시 에러
- self 생략이 에러 조심
2. __init__() 함수 정의, 인스턴스 변수, 클래스 변수
- 클래스 초기화 함수 이다 자바의 생성자 함수처럼 사용함
- 멤버변수를 이 클래스 초기화 함수에 선언하여 초기화하여 사용할 수 있다.
- __init__()함수 선언하면 BookReader() 가로안에 매개변수를 전달하지 않으면 에러 주의
- 클래스 변수 country = "korea" 를 __init__() 위에 선언한다.
3. 데이터 은닉, Name Mangling
- 파이썬은 자바처럼 강력한 데이터은닉 도구인 접근자(private)가 없다.- 파이썬에서는 또한 else 절을 제공하여 try-except-else 논리를 구성할 수 있다. else는 선택사항으로서
아무런 예외도 찾을 수 없을 경우에 수행할 코드를 넣을 수 있다.
- 아무런 예외가 발생하지 않을 경우에만 수행하여야 하는 작업과 같은 예외 처리 논리를 다루기 위하여
else 절을 사용할 수 있다. else 절 내의 코드는 아무런 예외도 던져지지 않았을 때에만 시작되며,
else 절 내에서 어떠한 예외가 발생하게 되면 except로 돌아가지 못한다.
- try-except 블록은 원하는 만큼 겹칠 수 있다. 겹쳐진 예외 처리 블록의 경우, 만약 예외가 던져지면 오류를 받는
가장 안쪽의 블록으로부터 프로그램 제어가 바로 윗 블록으로 건너뛰게 된다.
# 키보드 입력을 통하여 받은 숫자에 대하여 나눗셈을 수행
try:
# 작업을 수행
try:
x = raw_input ('Enter a number for the dividend: ')
y = raw_input('Enter a number to divisor: ')
x = int(x)
y = int(y)
except ValueError:
# 예외를 처리하고 바깥의 try-except로 이동
print 'You must enter a numeric value!'
z = x / y
except ZeroDivisionError:
# handle exception
print 'You cannot divide by zero!'
except TypeError:
print 'Retry and only use numeric values this time!'
else:
print 'Your quotient is: %d' % (z)
quotient - 몫
[02] 함수
1. 함수의 정의
def times2(n):
return n * 2
- 함수는 보통 ‘def’정의한다. 위의 예제는 함수명이 times2이며
n을 매개변수로 가진다.
- 함수의 몸체는 단 한 줄이지만, 매개변수를 숫자 2로 곱하는 곱셈이 이루어진다.
그 결과는 변수에 저장하지 않고, 함수를 호출하는 코드로 바로 반환한다.
>>> times2(8)
16
>>> x = times2(5)
>>> x
10
- 함수 정의는 코드의 어떤 수준에서도 발생할 수 있으며 어느 시점에서든지 일어날 수 있다.
- C나 자바와 같은 언어에서와는 달리, 함수의 정의는 선언이 아니다.
- 파이썬에서의 함수 정의는 실행가능한 서술이다. 함수를 중첩시킬 수 있으며,
또한 조건부로 함수를 정의하는 것과 같은 일도 할 수 있다.
variant = True
if variant:
def f():
print "이렇게"
else:
def f():
print "혹은 저렇게"
f()
- 파이썬의 모든 매개 변수는 참조에 의해 전달된다.
그러한 점은 자바에서의 개체 매개변수와 동일하다.
- 자바에서는 원시 자료형을 값으로 전달하는데 비해, 파이썬에는 그러한 속성은 없다.
- 파이썬에서는 모든 것이 개체인 것이다. 불변immutable 개체에는 변경이 일어날 수 없으므로,
- 문자열을 함수로 넘겨주고 변경하는 경우에는 문자열의 복사본이 만들어진다.
# 다음의 함수는 문자열 텍스트를 변경하기 위해 문자열의 사본을
# 만든 다음에 그것을 변경한다. 원래의 문자열은
# 불변이기 때문에 손댈 수 없다.
def changestr(mystr):
mystr = mystr + '_changed'
print 'The string inside the function: ', mystr
return
mystr = 'hello'
changestr(mystr)
mystr
# 두 개의 값과 수학 함수를 매개변수로 받는 함수를 정의
>>> def perform_calc(value1, value2, func):
... return func(value1, value2)
...
# 넘겨줄 수학 함수를 정의
>>> def mult_values(value1, value2):
... return value1 * value2...
>>> perform_calc(2, 4, mult_values)
8
# 또 다른 함수를 정의하여 넘겨줌
>>> def add_values(value1, value2):
... return value1 + value2
...
>>> perform_calc(2, 4, add_values)
6
>>>
중첩 함수 정의가 용이함
[03] 클래스
- 파이썬은 C++, JAVA처럼 객체지향 언어이다.
- 파이썬의 모든 것은 객체라는 것으로 이루어져 있으며 클래스는 이 객체를 만들기 위한
설계도, 명세서라 할 수 있다.
>>> var = '파이썬 객체 지향'
>>> id(var) #var의 식별자확인(java의 hashcode)
60456245
>>> type(var) #var의 타입 확인
<class 'str'>
- 파이썬의 클래스 역시 하나의 객체이다.
- 문자열형 클래스 str은 type 클래스의 객체이다.
- type 클래스 역시 type클래스의 객체이다.
>>> str # 문자열형
<class 'str'>
>>> type(str)
<class 'type'>
>>> id(str) # 식별자 존재
17481545
1. 클래스 정의 및 사용
- test01.py 로 저장
- read_book 메소드 앞에 def생략시 에러
- self 생략이 에러 조심
# -*- coding:utf-8 -*-
class BookReader:
name = str()
def read_book(self):
print self.name + 'is reading Book!!'
reader = BookReader()
reader.name = '홍길동 '
reader.read_book()
2. __init__() 함수 정의, 인스턴스 변수, 클래스 변수
- 클래스 초기화 함수 이다 자바의 생성자 함수처럼 사용함
- 멤버변수를 이 클래스 초기화 함수에 선언하여 초기화하여 사용할 수 있다.
- __init__()함수 선언하면 BookReader() 가로안에 매개변수를 전달하지 않으면 에러 주의
# -*- coding:utf-8 -*-
class BookReader:
def __init__(self,name): #name: 매개변수
self.name = name #self.name:인스턴스변수
self.name = name #self.name:인스턴스변수
def read_book(self):
print self.name + 'is reading Book!!'
reader = BookReader("홍길동")
reader.read_book()
- 클래스 변수 country = "korea" 를 __init__() 위에 선언한다.
# -*- coding:utf-8 -*-
class BookReader:
country = "korea" #country:클래스변수
country = "korea" #country:클래스변수
def __init__(self,name): #name: 매개변수
self.name = name #self.name:인스턴스변수
self.name = name #self.name:인스턴스변수
def read_book(self):
print self.name + 'is reading Book!!'
reader1 = BookReader("홍길동")
reader2 = BookReader("박길동")
reader1.read_book()
reader2.read_book()
print BookReader.country #reader1.country 가능
- 클래스의 인스턴스변수 더하기 곱하기 예제
- 초기화 함수 __init__()은 어떠한 값을 초기화하는 데 쓰인다.
- 클래스의 인스턴스변수 더하기 곱하기 예제
- 초기화 함수 __init__()은 어떠한 값을 초기화하는 데 쓰인다.
- 초기화 메소드는 객체를 생성하기 위해서 어떤 값이 클래스로 전달되도록 한다.
- 클래스 내의 각 메소드와 함수가 self 인자를 받는 것을 볼 수 있을 것이다.
- self 인자는 객체 자신을 참조하는데 쓰이는데, 이것을 통해 클래스는
인스턴스변수 공유한다.
- self 자바 코드에서의 this와 비슷하다.
>>> class my_object:
... def __init__(self, x, y):
... self.x = x
... self.y = y
...
... def mult(self):
... print self.x * self.y
...
... def add(self):
... print self.x + self.y
...
>>> obj1 = my_object(7, 8)
>>> obj1.mult()
56
>>> obj1.add()
15
3. 데이터 은닉, Name Mangling
대신에 변수 앞에에(__) 언더스코어를 있게함으로써 이름장식(Name Mangling) 기법을 제공한다.
이름장식이된 변수는 직접 접근이 불가하다 이변수의 접근하기 위한 수정변수나 값반환 함수를
만들어 접근하거나 클래스 이름으로 접근할 수 있다.
class BookReader:
country = "korea" #country:클래스변수
print BookReader.country
--------------------------------------------------------------
class BookReader:
__country = "korea" #__country:클래스변수에 직접 접근 안됨.
print BookReader.__country #오류
--------------------------------------------------------------
class BookReader:
__country = "korea" #country:클래스변수
BookReader.__country = "USA" #대신 수정함수사용가능
print BookReader.__country #반환함수 사용가능
4. 상속
- 중복코드를 최소화 함과 동시에 클래스간의 계층 관계를 형성함으로써
부모의 속성과 메소드를 물려받는다.
# -*- coding:utf-8 -*-
class Animal(object):
def sound(self):
return "I don't make any sounds"
class Goat(Animal):
def sound(self):
return "Bleeattt!"
class Rabbit(Animal):
def jump(self):
return "hippity hop hippity hop"
class Jackalope(Goat, Rabbit):
pass
animal = Animal()
goat = Goat()
rabbit = Rabbit()
jack = Jackalope()
print animal.sound()
print goat.sound()
print rabbit.sound()
print rabbit.jump()
print jack.sound() #Goat함수 호출
print jack.jump() #Rabbit함수 호출
print isinstance(animal, Animal)
print isinstance(goat, Goat)
print isinstance(rabbit, Rabbit)
print isinstance(jack, Jackalope)
5. 수업
진도:
hw:
6. 할것
'Programming' 카테고리의 다른 글
160808: 102회차 (0) | 2016.08.08 |
---|---|
160805: 101회차 (0) | 2016.08.05 |
160803: 99회차 (0) | 2016.08.03 |
160802: 98회차 (0) | 2016.08.03 |
160801: 97회차 (0) | 2016.08.01 |