160804: 100회차

종료하기 전 티스토리 네이버 로그아웃 할 것


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 블록은 원하는 만큼 겹칠 수 있다. 겹쳐진 예외 처리 블록의 경우, 만약 예외가 던져지면 오류를 받는
 가장 안쪽의 블록으로부터 프로그램 제어가 바로 윗 블록으로 건너뛰게 된다. 


# 키보드 입력을 통하여 받은 숫자에 대하여 나눗셈을 수행
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:인스턴스변수

 
    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:클래스변수
    def  __init__(self,name):     #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__()은 어떠한 값을 초기화하는 데 쓰인다. 
 - 초기화 메소드는 객체를 생성하기 위해서 어떤 값이 클래스로 전달되도록 한다.
 - 클래스 내의 각 메소드와 함수가 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
 
 - 파이썬은 자바처럼 강력한 데이터은닉 도구인 접근자(private)가 없다.
   대신에 변수 앞에에(__) 언더스코어를 있게함으로써 이름장식(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
Posted by DAVID