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 빌리 :