2016년 7월 10일 일요일

[파이썬] 인트로

파이썬을 이용해서 게임을 만들어보자. 저자는 파이썬을 거의 써본 적이 없음을 밝힌다. 이 프로젝트를 진행하면서 배우려 한다. 다음 책을 참고하였다. 헬로! 파이썬 프로그래밍

파이썬은 2.7.3 버전을 사용한다. 파이썬 3 버전은 단순히 기존 버전을 업그레이드한 버전이 아니다. 파이썬 3 사용시 파이썬 2의 코드가 제대로 동작하지 않을 수 있다.

몇 가지 기억할 것
1. 파이썬은 대소문자를 구분한다.
2. 제곱은 다음과 같이 한다. 3 ** 5 = 3*3*3*3*3 정수가 아닌 수로도 제곱할 수 있다. e.g., 3 ** 5.5
3. 나머지를 구하려면 % 기호를 쓴다. 7%2 = 1
4. 자료형 변환
    1) float()는 문자열이나 정수로부터 새로운 실수를 만든다.
    2) int()는 문자열이나 실수로부터 새로운 정수를 만든다. (항상 버림을 한다.)
    3) str()은 숫자로부터 새로운 문자열을 만든다.
    4) type()은 변수의 자료형이 무엇인지 알려준다.
5.  comma를 사용하면 print문을 한 줄로 만들 수 있다.
6. 기다리는 함수 time.sleep(1)    // 1초 기다린다.
7. 주석은 # 를 이용.
8. 전역변수를 함수 안에서 사용해도 함수 밖에서 전역변수는 변하지 않는다. 이름은 왠만하면 재사용하지 마라.
9. 함수 내에서 global 키워드를 이용하면 전역변수를 사용한다.
10. pass 키워드는 코드를 채우는 용도로 사용할 수 있다. (나중에 구현할 함수 내용에 pass 라고 써놓으면 된다.)

입력받기
raw_input()
e.g, someName = raw_input("Enter your name: ")
사용자가 문자열로 입력한 내용이 someName에 할당된다.

실수 입력받기
e.g., fahrenheit = float(raw_input())

헷갈리지 않기 위해 input 대신 raw_input 함수를 권장한다. input은 숫자를 받는 함수이다.

반복하기
e.g, for looper in range (1,5):    // 4번 반복 [1, 2, 3, 4]
e.g., for i in range(5):    // 5번 반복 [0, 1, 2, 3, 4]
e.g., for i in range(1, 10, 2):    // 2간격을 두고 반복함. [1, 3, 5, 7, 9]
e.g., for i in range(10, 1, -1):    // 1씩 감소해서 2까지. [10, 9, 8, 7, 6, 5, 4, 3, 2]
e.g., for i in range(0, numStars)

e.g., while someInput == '3':
break 와 continue를 이용하여 반복문에서 벗어난다. continue는 다음 반복으로 건너뛴다.

리스트와 딕셔너리
1. 리스트
리스트에 항목추가하기
>>> friends = []    # 빈 리스트를 새로 만듦
>>> friends.append('David')    # 리스트에 "David" 항목 추가
>>> print friends[0]    # 리스트에서 인데그 0번 항목 가져오기

리스트 자르기
>>> print friends[1:4]    # 1, 2, 3인덱스를 가져온다. 복사한 것이지 실제로 자른 것은 아님.
축약형
>>> friends[:2]    # 0, 1 인덱스 가져옴
>>> friends[2:]    # 2부터 끝까지 가져옴
>>> friends[:]    # 전체 리스트의 사본 만들기
리스트에 항목추가
1. append() 끝에 하나 추가
2. extend() 끝에 여러 개 추가
3. insert() 특정 위치에 항목 추가. 특정 위치의 내용부터 끝까지 한 칸 씩 밀린다.

리스트에서 삭제하기
1. remove() 선택한 항목을 삭제하고 버림.
2. del() 인덱스를 이용하여 삭제
3. pop() 마지막 항목을 가져와 돌려줌. 특정 인덱스를 지정하여 가져올 수도 있음.

리스트에서 찾기
in 키워드 이용
e.g., if 'a' in letters:
index() 함수 이용: 해당 항목이 어느 위치에 있는지 확인
>>> letters = ['a', 'b', 'c', 'd', 'e']
>>> print letters.index('d')
리스트에 값이 발견되지 않으면 오류가 발생하므로 다음과 같이 사용한다.
if 'd' in letters:
    print letters.index('d)

리스트 정렬
letters.sort() 이 메서드는 리스트 자체를 수정한다.
letters.reverse() 역순 정렬
letter.sort(reverse = True) 역순 정렬
newer = sorted(original) 원본 리스트는 그대로 두고 정렬함.

불변 리스트 - 튜플
변경 불가능한 리스트가 튜플이다.
my_tuple = ("red", "green", "blud")    # 대괄호 대신 중괄호를 사용한다.

2. 딕셔너리
딕셔너리는 두 개의 항목을 서로 연관 시키는 방법이다. 두 항목은 key, value이다.
딕셔너리를 만들자.
>>> phoneNumbers = {}
항목 추가
>>> phoneNumbers["John"] = "555-1234"
혹은
>>> phoneNumvers = {"John": "555-1234"
항목 찾기
>>> print phoneNumbers["John"]
리스트와 달리 딕셔너리는 항목간에 정해진 순서가 없다. 딕셔너리 내의 항목은 키를 통해 접근한다.

키, 값의 리스트 보기
>>> phoneNumbers.keys()
>>> phoneNumbers.values()

항목 삭제
>>> del phoneNumbers["John"]

모든 항목 삭제
>>> phoneNumbers.clear()

in 키워드를 이용해 특정 키가 존재하는지 확인
>>> "Bob" in phoneNumbers
True or False

함수
def printMyAddress(myName):    # 함수 정의
    print myName
    print "Warren Sande"
    print "Main Street"
    return myName

printMyAddress("jsim")    # 함수 호출

객체
함수와 데이터를 함께 묶는다. class

모듈
모듈을 import 해서 사용. 사용 시에 구체적으로 어떤 모듈인지 알려줘야 한다.
e.g., Animal.Animal(1, "jsim")

import Animal

from을 이용해 가져올 수도 있다.
from Animal import Animal    # 이렇게 하면 Animal. 을 넣지 않고도 Animal 클래스를 이요할 수 있다.

표준모듈
time 모듈 - sleep()
random 모듈 - 난수를 만들어낼 떄 사용 random.randint(0,100)