7장 반복


* for문

  - 설명 : 실행 횟수가 정해진 반복문으로, 조건문을 지정해 얼마나 반복할지 지정할 수 있다.

  - 형식 

    for [변수] in [리스트] :

      [for-블록]

  

    + [리스트] : 탐색을 수행할 리스트 객체를 놓는다.

    + [변수] : 탐색을 수행할 리스트에서 하나씩 데이터 객체를 꺼내온다.

    + [블록] : 들여쓰리고 블록을 구분한다. 변수에 지정된 데이터 객체를 블록에서 사용한다.

    

  - 특징 

    1) [리스트]에 파일 객체를 놓으면, readline() 메소드를 호출하는 것과 같이 파일을 한줄씩 읽어와 [변수]에 한줄씩 할당한다.

    2) [리스트]에 문자열을 놓으면, 문자 하나씩 읽어와 [변수]에 문자를 할당한다.

      + 예제

        >> for c in 'test' : 

        ..   print c

        ..

        t

        e

        s

        t

        

* for문 활용 

1. 자바나 C에서 처럼 for문으로 인덱스 접근을 통해 루프 사용방법

  - 설명 : 인덱스 접근을 위해 숫자 리스트을 만들어 주는 range() 함수와 리스트 길이를 알아내는 len() 함수를 이용한다.

  - 사용법 : len() 함수로 리스트 길이를 가져온 이후, 그 0부터 길이만큼 숫자 리스트를 range() 함수로 만든다.

  - 형식 

    for index in range(len([리스트])) : 

      print [리스트][index]


2. enumerate()를 활용한 for문

  - 설명 : enumerate() 함수를 사용하면 리스트의 인덱스와 값을 쌍으로 하는 값을 사용할 수 있다.

  - 예제

    >> list = "s a m p l e".split()

    >> for map in enumerate(list) :

    ..   print map

    ..

    (0,'s')

    (1,'a')

    (2,'m')

    (3,'p')

    (4,'l')

    (5,'e')

    

  - 추가 형식 : 파이썬은 다중 값 할당을 지원한다.

    >> list = [1, 2, 3]

    >> for (index, value) in enumerate(list) :

    ..    list[index] = 2 * value

    ..    print list

    ..

    [2,2,3]

    [2,4,3]

    [2,4,6]

    

* enumerate 함수

  - 설명 : 리스트, 튜플, 무자열 같은 시퀀스 타입에 대해 인덱스, 값으로 구성된 리스트를 반환한다.

  -> (0, seq[0]), (1, seq[1]), (2, seq[2]), ...

  

* range 함수

  - 설명 : 숫자 리스트를 생성하는 내장 함수

  - 형식 : range([시작값], [종료값], [간격값])

    + [시작값] : 숫자 리스트를 시작하는 정수

    + [종료값] : 숫자 리스트를 종료하는 정수의 +1 값

    + [간격값] : 숫자 리스트의 간격을 지정할 수 있다.

      -> 시작값은 생략 가능하며, 생략하면 0부터 종료값 -1까지의 숫자 리스트가 생성된다.

      -> 간격값 또한 생략하며, 기본으로 숫자 간격이 1로 설정 된다.

      -> 간격값은 음스로 지정할 수 있으나, 이때 반드시 시작값이 종료값보다 커야한다.

      

  - 예제 

    >> range(0, 4)

    [0, 1, 2, 3]

    >> range(1)

    [0]

    >> range(0)

    []

    >> range(1, 5, 2)

    [1, 3]

    

* 다중 값 할당

  - 설명 : 파이썬은 여러 값을 쓰고 한꺼번에 할당 할 수 있다. 이 값은 리스트, 문자열, 또는 다른 시퀀스 타입에 있더라도 동작한다. 대신 할당할 변수 개수와 값의 개수가 일치해야만 한다.

  

  - 예제

    >> x, y, z = 1, 2  # 우측과 좌측의 개수가 달라 에러 발생

    >> x, y = 1, 2     # 우측 변수 개수 = 좌측 변수 개수

    >> a,b,c = 'STR'

    >> a,b,c = [2,3,4]

    

* while 문

  - 설명 : 조건형 루프라 부르며, 조건이 참일 동안 반복하는 특징이 있다.

  - 형식

    while [조건] : 

      [블록]

      

* 반복문 제어

  - 설명 : java에서 반복문 제어를 위해 break와 continue 지시어를 사용하는 것처럼, 파이썬에서도 동일한 지시어를 사용해 반복문을 제어할 수 있다.

    -> break : 즉시 루프의 블록을 벗어난다.

    -> continue : 다음 반복으로 건너 뛴다.

    

*** 반복문과 조건문을 사용할 때 주의사항

1. 이해하기 쉬운 구조로 코드를 작성할 수 있게 주의를 기울인다.

2. 중첩되는 양을 최대한 줄인다. 

Posted by 빌리 :
6장 선택

파이썬에서는 True와 False라는 불린(Boolean) 값(대문자로 시작하는 것을 주의)을 이용해 참과 거짓을 표현한다. 이러한 불린 값을 이용해 제어 흐름문의 사용 방법을 설명한다.


* 불린 연산자 : and, or, not
  - 우선 순위 : not > and, or
  - not : 단항 영산자로 사용하면 값을 반대로 바꿔준다. 
    + 샘플  
      not False = True
      not True = False
      
  - and : 양쪽의 식이 모두 참일 때 참이다. 
    + 샘플 
      True and True = True
      True and False = False
      False and True = False
      False and False = False
  
  - or : 양쪽의 식 중에 하나라도 참일 때 참이다.
    + 샘플 
      True and True = True
      True and False = True
      False and True = True
      False and False = False
  

* 관계 연산자
  - 설명 : 프로그램에서 불린 값을 만들기 위해서 관계 연산자를 이용한다. 관계 연산자를 이용한 비교를 통해 True,False 값을 만들고, 그것이 제어 흐름문(if, while)을 수행할지 말지를 판단하게 만든다.
  
  - 연산자 : > , < , >= , <= , == , !=
  
  - 우선순위 : 
    1) 산술 연산자(+, -, /, *)는 관계 연산자보다 우선순위가 높다.
    2) 불린 연산자(not, or, and)는 관계 연산자보다 우선순위가 낮다.
    => (+, -, /, *) > 관계 연산자 > (not, or, and)
    
  - 샘플 
    >> 1 > 2
    False
    >> 3 < 5
    True
    
  - 특징 : 여러 비교 수식을 연속해서 쓸 수 있다. 1 < x < 5와 같이 연속해서 사용 가능하다.
  
* 불린값
  - 참과 거짓을 표현하는 값으로 True와 False를 이용한다. 
  - 연산자 별 반환값
    1) 관계 연산자(<,>,<=,>=,==,!=) : True, False로 반환
    2) 불린 연산자(not) : True, False로 반환
    3) 불린 연산자(or, and) : 수식이 종료된 순간의 값을 반환
      + 샘플 
        >> not 1
        False
        >> 1 or 2
        1
        >> 2 and 0
        0
        >> '' and False
        ''
        >> 'test' or True
        'test'

    + 부가설명 : 특이한 점은 True/False를 반환하지 않고 연산이 끝난 값을 반환한다. 이러한 특징을 이용하면 특정 조건에서 값을 할당할 때 사용할 수 있지 않을까하는 생각이 든다.
    
  - 특징 : 숫자 
    1) 수에서 불린값을 사용하면 True는 모든 수로 취급을 하며, False는 0과 0.0으로 취급 한다. 거꾸로도 사용된다. 
      + 샘플 
        >> not 0
        True
        >> not 1
        False
    
    2) and와 or를 포함하는 수식은 왼쪽에서 오른쪽으로 평가한다. 또한 평가를 멈춰도 되면, 아직 평가하지 않은 피연산자가 있더라도 평가를 중단한다. 자바의 &&와 || 연산자와 똑같이 동작한다.
      + 샘플
        >> 0 and 3
        0
        >> 3 and 0
        0
        >> 3 and 5
        5
        >> 1 or 0
        1
        >> 0 or 2
        2
        >> True or 0
        True
 
  - 특징 : 문자열
    1) 문자열에서도 관계 연산자를 사용할 수 있다. 문자열의 문자는 정수로 표현하는데 이 값을 비교해 불린 값을 만든다. 
      + 샘플 
        >> 'A' < 'a'
        True
        >> 'a' > 'z'
        False
        >> 'abc' < 'abz'
        True
        
    2) 빈 문자열은 False, 다른 모든 문자열은 True로 취급된다.
    
  - 특징 : 산술 연산
    1) True는 1, False는 0으로 취급되어 산술 연산이 가능하다.
      + 샘플 
        >> 1 + True
        2
        >> 3 - False
        3


* if 문

  - 설명 : 기본적인 조건문으로 블록을 들여쓰기를 통해 구분한다. elif와 else 키워드를 이용해 중첩 if문을 작성할 수 있다.

  - 형식 :

    if [조건] :

      [if-블록]

    elif [조건] : 

      [elif-블록]

    else :

      [else-블록]

      

    + [조건] : name != ""이나 x<y와 같은 수식. 꼭 불린 값을 필요는 없어서, 결과 값이 자동으로 불린값의 True, False로 자동 변환된다.

    + [블록] : 들여쓰기로 블록을 구분한다. 블록을 적고, 종료되면 빈 한줄을 추가해 if 문이 종료되었음을 표시한다.



Posted by 빌리 :

5장 리스트


* 리스트 생성

  - 형식 : [리스트명] = [[값], [값], [값], ...]
    + 리스트명 : 일반 변수명과 똑같이 사용한다.
    + 값 : 값은 여러가지 타입이 혼합되어 사용될 수 있으며, 각각의 값들은 콤마(,)로 구분되어 진다. 
    -> tip : 문자열 리스트를 만들기 위해 다음과 같이 split메소드를 이용해 배열을 만든다.
      (code) strlist = 'str1 str2 str3 str4 str5'.split()      

* 리스트 값 접근
  - 형식 : [리스트명][[index]]
    + index : 리스트에 접근하려는 번호를 쓰면 된다. 다른 언어와 같이 리스트가 가진 범위를 벚어나는 인덱스를 넣으면 오류가 발생한다. 시작은 0부터이다.
    
* 리스트 값을 거꾸로 접근하기
  - 설명 : 일반 리스트 값 접근 방식에서 인덱스에 음수를 넣어 접근한다. 시작은 -1부터이다.
  
* 리스트 관련 내장 함수
  - len(L) : 리스트에 들어있는 항목 수
  - max(L) : 리스트에 들어있는 항목의 최대값
  - min(L) : 리스트에 들어있는 항목의 최소값
  - sum(L) : 리스트에 들어있는 항목의 합
    -> sum의 경우 모든 항목이 숫자로 이루어져야 동작한다.

* 리스트 관련 메소드
  - L.append(v) : v값을 L리스트에 추가한다.
  - L.insert(i, v) : v값을 L리스트의 i인덱스에 추가한다.
  - L.remove(v) : L리스트에서 처음나오는 v값을 제거한다.
  - L.reverse() : L리스트의 순서를 반대로 바꾼다.
  - L.sort() : L리스트의 순서를 정렬한다.
  - L.pop() : L리스트의 마지막 항목을 제가한 후 반환한다.
  
  => pop를 제외하고, 모든 메소드는 None라는 특별한 값을 반환한다. None는 파이썬에서 '아무것도 없음'을 의미한다.
  
* 리스트 연산
  - [리스트명] + [리스트명] 과 같이 더하기(+) 연산자를 이용해 리스트를 연결할 수 있다.
    (code) ['a','b'] + ['c'] => ['a', 'b', 'c']
  - [리스트명] * [숫자] 과 같이 곱하기(+) 연산자를 이용해 리스트를 반복할 수 있다.
    (code) ['a','b'] * 2 =>  ['a','b', 'a','b']    

* 리스트의 부분 집합 가져오기(Slice)
  - 설명 : 리스트에서 특정 인덱스의 값만 취하고 싶을때 사용한다.
  - 형식 : [리스트명][[시작index]:[종료index]]
    + 시작index : 리스트를 가져올 최초 index 값이다. 값을 생략할 수 있으며, 생략하면 0이 기본값으로 설정된다.
    + 종료index : 리스트를 가져올 마지막 index 값이다. 값을 생략할 수 있으며, 생략하면 마지막 index 값이 기본값으로 설정된다.
  -- 샘플 
 list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
         list[:2]  => ['a', 'b']
         list[1:2] => ['b']
         list[4:]  => ['e', 'f', 'g']
         
  ** TIP : 문자열도 리스트에서 부분 집합을 가져오는 방법으로 부분 문자열을 가져올 수 있다. 파이썬에서 문자열은 문자의 리스트와 같이 취급 된다.
 

* 별칭(alias)
파이썬에서는 두 변수가 동일한 값을 가리킬 때 별칭을 가진다고 한다. 예를 들면 하나의 리스트를 생성해 두개의 변수의 할당하면, 리스트에 접근점이 두개가 된다는 것과 같다. 이 내용은 함수로 객체를 넘겼을 때 call by reference를 설명하기 위해 나온 것 같다.

* 중첩 리스트
리스트에는 어떤 타입의 데이터도 담을 수 있다. 즉, 리스트 안에 리스트를 담을 수 있다는 것이다. 
  - 샘플 
      duplist = [['Canada', 76], ['United States', 75], ['Mexico', 71]]      

* 다른 시퀀스 타입
  - 설명 : 순서가 있는 데이터(sequence)에는 리스트말고도 다른 것이 존재 한다. 순서가 있는 데이터(sequence)라는 말은 인덱스로 참조 가능하며 리스트처럼 슬라이싱해 새로운 문자열을 생성할 수 있다는 것이다. 
  - 시퀀스 타입 : 
    1) 문자열 : 문자의 불변 시퀀스
    2) 튜플 : 리스트의 불편 시퀀스 형식, 괄호를 이용해 생성하며, 리스트 처럼 사용가능하다. 한번 생성한 튜플은 변경할 수 없다.
      - 샘플 
        >> bases = ('A', 'C', 'G')
        >> for t in bases : 
        ..  print t
        A
        C
        G
        >> bases[0] = bases[1]
        에러 발생
      - 튜플을 사용하는 이유 : 특정 연산을 안전하게 만들어 주기 때문이라는데, 파이썬에 자바에는 final과 같은 연산자가 없어서 그런 것 같다.
      
* 파일을 리스트로
  - 설명 : 파일을 open 함수를 이용하면, 파일 객체를 사용할 수 있다. 이 객체를 for 루프에서 사용하면 파이썬은 자동으로 readline을 호출해 준다.
  
  - 샘플 :
    + data.txt
    Mer
    Venu
    Ea
    
    + code
    >> data = opne('data.txt', 'r')
    >> for line in data :
    ..   print len(line)
    4
    5
    3
  
  - 주의점 : readline은 개행 문자를 포함하고 있어 의도하지 않은 결과를 만들 수 있기 때문에 문자열의 strip() 메소드를 이용해 개행 문자를 제거해 줘야 한다.
  
* 커맨드라인 인자
  - 설명 : 파이썬에서는 자바 main함수를 호출할때 arg 변수에 인자를 얻을 수 있는 것처럼 인자를 받는 방법을 제공한다. 이는 sys이라는 모듈의 argv라는 리스트 변수에 저장된다. 첫번째 인자에는 프로그램명이 들어가고, 그 이후에 인자가 저장된다.
  
    sys.argv : 커맨드라인 인자가 저장되는 리스트 변수
    sys.argv[0] : 실행 프로그램명
    sys.argv[1]~[n] : 커맨드라인 인자


Posted by 빌리 :

4장 모듈

모듈은 한 파일에 모아둔 함수 모음이다. 


* 모듈 생성하기

  - 설명 : .py를 확장자로 가진 파일에 def로 함수를 선언하여 저장한다. 이때 [모듈명].py 파일이 저장되며, 이는 [모듈명] 모듈이 생성된 것이다.


  

* 모듈 가져오기 

  - 형식 : import [모듈명]

    + 모듈명 : 보통 파이선 파일 이름이 모듈명이 된다. (test.py -> test)

 

 

* 모듈 도움말 보기

  - 설명 : 모듈을 Import 한 이후 help 명령어를 이용한다.

  - 형식 : help([모듈명])

    

    

* 모듈 사용하기

  - 설명 : 모듈에 선언되어 있는 함수들을 사용하는 방법은 모듈명에 점(.)을 붙여 함수를 호출한다.

  - 형식 : [모듈명].[함수명]([매개변수])

    + 함수명 : 모듈에 def로 지정한 이름을 함수명으로 사용한다.

    + 매개변수 : 함수에 매개변수가 지정되어 있으면 매개변수를 같이 사용한다.

    

    

* 모듈에 있는 특정 함수만 가져오기

  - 설명 : 모듈에 사용하고자 하는 함수만 Import할 수 있으며, 사용할때는 모듈명을 이용하지 않고 함수명을 가지고 바로 실행할 수 있다.

  - 형식 : from [모듈명] import [함수명], [함수명], ...

    + 함수명들 : 여러 개의 함수를 Import할 수 있으며 콤마(,)로 구분한다.


    

* 모듈 도움말 작성

  - 설명 : help 메소드를 이용해 모듈 정보를 확인할 수 있는데 이때 문서화 주석을 작성해 도움말을 제공할 수 있다.

  - 방법 : ''' 문자를 이용해 주석을 작성하면 파이썬이 알아서 help로 출력할 수 있게 해준다.

  - 샘플 : 

      ### module/temp_dic.py  

      ''' 온도 처리 함수 '''

      def to_cel(t) : 

        ''' 화씨를 섭씨로 변환한다. '''

        return round((t-32.0)*5.0/9.0)

        

      def above_freezing(t) : 

        ''' 온도가 섭씨 기준으로 어는 점보다 높으면 True를, 아니면 False를 반환한다.'''

        return t>0

   

  

* 모듈 Import시 동작 원리 

  - 모듈을 Import시 컴파일러는 해당 모듈을 실행시킨다. 그래서 모듈내 함수가 아닌 일반 코드가 Import시 실행되어 진다. 이 말은 모듈 Import시 초기화 작업을 할 수 있으며, 다른 작업도 할 수 있다. 그리고 한번 메모리에 올라온 모듈은 다시 부르지 않는다.

  

  - 모듈이 실행되는 곳이 주프로그램인지 아니면 sub 프로그램인지 '__name__' 변수를 통해 확인할 수 있다.

    + 주 프로그램 : __name__ = __main__

    + sub프로그램 : __name__ = [모듈명]

  => 위 특징을 이용해 라이브러리를 사용하려는 모듈을 실행 시켰을때 도움말을 보여줄 수도 있다.

  

  

* 모듈 사용시 유의사항

  1. 모듈은 파이썬 라이브러리 폴더, 또는 파이썬 실행 위치에 존재해야 불러올 수 있다. 

  2. 내장 함수를 다음 명령어를 이용해 확인할 수 있다. 

    - 형식 : help(__builtins__)

    

  

**** 파이선 단점

  - 모듈에 상수를 정의 할 수 있는데, 다른 언어처럼 final이나 const와 같은 지정자를 이용해 변경 안되도록 할 수 없다. 즉, 상수를 만들수는 있지만, 값이 사용자에 의해 변경될 수 있다.

  

  

* 객체와 메소드

  - 파이썬에서는 모든 것들이 객체이다. 심지어 0이라는 숫자도 객체이다. 그래서 "string"의 문자열이 있으면 문자열 객체가 가진 함수를 호출 할 수 있다.

  

  

* 테스트

  - Junit처럼 파이썬을 위한 테스트 코드를 작성할 수 있는데, Nose라는 라이브러리를 사용할 수 있다.

Posted by 빌리 :

3장 문자열


* 문자열 표현

  작은따옴표(')나 큰따옴표(")로 감싼 문자를 문자열로 표시


* 문자열 합치기

  - 문자열을 나란히 놓아도 되고, 연결 연산자(+)를 이용해 연결할 수도 있다.

  ex) 'str' "str2" -> strstr2

      'str'+"str2" -> strstr2

      

  - 문자열 연결시 같은 타입끼리 해야 하며 타입이 다를경우 str()메소드를 

  이용해 문자열로 타입을 변경해 줘야 한다.

  

* '*' 연산 : 문자열을 * 한 만큼 반복할 수 있다.

  ex) 'str' * 2 -> strstr

      3 * 'str' -> strstrstr

  - 정수가 0보다 작거타 같으면 빈문자열을 출력

  

* 특수문자 표현 

  - 역슬래시와 특수 문자를 연결해 특수 문자를 표현한다. 

    \n, \\, \', \", \t 등을 지원한다.

  - 문자열에 오직 작은따옴표 또는 큰따옴표만 있다면, 반대 따옴표로 감싸면

  표현하고 싶은 따옴표를 표현할 수 있다.

  ex) '"test"' -> "test"

      "'test'" -> 'test'


* 한줄의 문자열을 여러 줄로 입력하고 싶을때 작은 따옴표 또는 큰 따옴표 3개 연속으로 감싼다.


* print 함수

  - 문자열 출력 함수이며, 특수 문자를 표시해준다.

  - print함수는 자동으로 각 값 사이에 공백을 자동으로 집어 넣는다.

  ex) x = 111

      print 'sample is', x, 'value' -> sample is 111 value.

      

  - print함수는 자동으로 개행문자(\n)를 추가해 표현한다.

  - print함수는 자동 추가되는 개행문자(\n)를 없애려면 문자열 끝에 ','를 추가한다.

  - %d, %s와 같이 문자열 내 포멧을 지정할 수 있다.

    ex) print "원의 넓이는 %f 제곱센티미터입니다." % area

      -> 원의 넓이는 78.55 제곱센티미터입니다.


* 사용자 입력 : raw_input() 함수

  - 사용자 입력값을 문자열로 반환

  - 매개변수로 문자열을 넘겨주면 입력 관련 메세지를 출력한다.

Posted by 빌리 :

1장 소개


* 용어

* 설치 방법

  - Python 2.5 버전 사용

  

2장 파이썬 소개


* 수식

  - 나눗셈(/) 연산자 사용시 유의사항 : 결과를 내림을 취함

  - 나머지(%) 연산자 사용시 유의사항 : 결과 값의 부호는 두번째 피연산자의 부호와 일치


* 타입

  - 부동소수점 수는 근사값을 표시 하기 때문에 소수 계산시 값이 변할 수 있으니 주의함

  - 연산자 우선순위 존재 : ** > - > *,/,% > +,-

  - 추가 연산자 : ** 지수승 의미 (ex. 2**2 - 2의 2승 = 2^2 = 4)

  

* 변수와 할당문

  - 변수에 대한 타입 선언이 없음

  - 변수는 문자, 숫자, 밑줄을 사용할 수 있으나 숫자로 시작할 수 없다.

  - 할당문은 '='을 사용하여 우측의 결과가 좌측 변수에 저장되는 형식

    (ex. attribute = x + 1 )

  - 위의 예와 같이 할당문에 x와 같이 변수를 사용하면 해당 변수가 사용된 시점의 값이 

    지정되어 사용된다.

    ex.  x = 1

         y = x + 1

         y            <--- (1)

         x = 2

         y            <--- (2)

         

    --> (1) = 2, (2) = 2 값이 똑같다. y를 재할당 하기 전까지 계속 값과 연결 상태로 남는다

  - 결합연산자 '+=, -=, /=, *=' : 다른 언어와 비슷한 단축 표기법

    -> 연산 순서

      1) '=' 기호 오른쪽의 수식을 계산한다.

      2) '=' 기호에 추가된 연산자와 오른쪽 수식값과 계산을 한다.

      3) 결과 값을 '=' 기호 왼쪽에 할당

      

* 오류 표시

* 함수

  - 다음과 같은 형식으로 함수 시작을 지정 한다.

    'def [함수명] :'

  - 함수의 반환값이 있으면  return을 사용한다.

  - 함수의 끝은 빈줄을 한줄 추가하면 함수의 끝을 표시한다.

  - 함수 안에서 지역변수를 사용할 수 있다.

  

* 기본 내장함수를 지원

  abs(), round(), pow(), int(), float()

Posted by 빌리 :