각도 관련된것을 알려면 삼각함수를 알아야 한다.

 

radian - 호 도 법  - 각의크기를 나타내는 방법(각도의 단위)

 

★각도(육십분법)      실수(호도법)

180도                            파이

90도                           2분의 파이

60도                           3분의 파이

45도                           4분의 파이

30도                           6분의 파이

120도                         3분의 2 파이

150도                         6분의 5 파이

300도                         3분의 5 파이

2분의 3 파이(호도법)   270도(육십분법)

 

 

 

 

각도를 구하는 FPS총게임 등 만들수 있다.

 

육십분법 출력 값  = 8.085580866682552

 

 

 

출력값 - 53.13010235415598

 

 

★소스 이용해서 토끼 게임 만들기

 

게임 소스 https://www.raywenderlich.com/

pygame을 검색한다.

 

 

 

here 을 눌러 다운로드 파일을 프로젝트 폴더에 넣는다.

 

파이참에서 새파일을 만들어준다.

 

 

from pygame.locals import * 필요한 라이브러리 를 쓸수 있다. 보통 이렇게 사용한다.

게임 루프 while문

 

#Import library
import math #회전 함수
import random
import pygame
from pygame.locals import *

#초기 게임설정
pygame.init()
pygame.mixer.init()
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("동동 이미지")
#속도 제어
FPS = 50
fpsClock=pygame.time.Clock()

#키 입력 체크
keys = [False, False, False, False]
#플레이어 버니 위치
playerpos = [100, 100]
#화살 발사 횟수
acc = [0, 0]
#화살 각도
arrows = []
#적생성
badtimer = 100
# badtimer만큼 줄인다.
badtimer1 = 0
#적 좌표 리스트
badguys = [[640, 100]]
healthvalue = 194

# Load images
player = pygame.image.load("resources/images/dude.png")
grass = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")
arrow = pygame.image.load("kakao_mu.png")
badguyimg1 = pygame.image.load("resources/images/badguy.png")
badguyimg = badguyimg1
healthbar = pygame.image.load("resources/images/healthbar.png")
health = pygame.image.load("resources/images/health.png")
gameover = pygame.image.load("resources/images/gameover.png")
youwin = pygame.image.load("resources/images/youwin.png")

#Load audio
hit = pygame.mixer.Sound("resources/audio/explode.wav")
enemy = pygame.mixer.Sound("resources/audio/enemy.wav")
shoot = pygame.mixer.Sound("resources/audio/shoot.wav")
hit.set_volume(0.05)
enemy.set_volume(0.05)
shoot.set_volume(0.05)
pygame.mixer.music.load("FIVE.mp3")
pygame.mixer.music.play(-1, 0.0)
pygame.mixer.music.set_volume(0.25)

# keep looping through
running = 1
exitcode = 0
while running:
# 5 - clear the screen before drawing it again
screen.fill(0)

#잔디를 그린다.
for x in range(width//grass.get_width()+1): #잔디 100픽셀 (5)
for y in range(height//grass.get_height()+1):
screen.blit(grass, (x*100, y*100))

#성을 배치
screen.blit(castle, (0, 30))
screen.blit(castle, (0, 135))
screen.blit(castle, (0, 240))
screen.blit(castle, (0, 345))
# 6.1 - Set player position and rotation
position = pygame.mouse.get_pos()
angle = math.atan2(position[1]-(playerpos[1]+32),position[0]-(playerpos[0]+26))
playerrot = pygame.transform.rotate(player, 360-angle*57.29)
playerpos1 = (playerpos[0]-playerrot.get_rect().width/2, playerpos[1]-playerrot.get_rect().height/2)
screen.blit(playerrot, playerpos1)
# 6.2 - Draw arrows
for bullet in arrows:
index = 0
velx = math.cos(bullet[0])*10
vely = math.sin(bullet[0])*10
bullet[1] += velx
bullet[2] += vely
if bullet[1]<-64 or bullet[1]>640 or bullet[2]<-64 or bullet[2]>480:
arrows.pop(index)
#화살을 그려주고 제거하는 역할
index += 1
for projectile in arrows:
arrow1 = pygame.transform.rotate(arrow, 360-projectile[0]*57.29)
screen.blit(arrow1, (projectile[1], projectile[2]))
# 6.3 - Draw badgers
if badtimer == 0: #적이 0이 될때 생성
badguys.append([640, random.randint(50, 430)])
badtimer = 100 - (badtimer1 * 2)
if badtimer1 >= 35:
badtimer1 = 35
else:
badtimer1 += 5
index = 0
for badguy in badguys:
if badguy[0] < -64:
badguys.pop(index)
badguy[0] -= 7
# 6.3.1 - Attack castle
badrect = pygame.Rect(badguyimg.get_rect())
badrect.top = badguy[1]
badrect.left = badguy[0]
if badrect.left < 64:
hit.play()
healthvalue -= random.randint(5,20)
badguys.pop(index)
# 6.3.2 - Check for collisions
# 충돌 체크
index1 = 0
for bullet in arrows:
bullrect = pygame.Rect(arrow.get_rect()) #적을헤치우는 좌표
bullrect.left = bullet[1]
bullrect.top = bullet[2]
if badrect.colliderect(bullrect):
enemy.play()
acc[0] += 1
badguys.pop(index)
arrows.pop(index1)
index1 += 1
# 6.3.3 - Next bad guy
index += 1
for badguy in badguys:
screen.blit(badguyimg, badguy)
# 6.4 - Draw clock
# 시계
font = pygame.font.Font(None, 24)
survivedtext = font.render(str((90000-pygame.time.get_ticks())//60000)+":"+str((90000-pygame.time.get_ticks())//1000%60).zfill(2), True, (0,0,0))
textRect = survivedtext.get_rect()
textRect.topright = [635, 5]
screen.blit(survivedtext, textRect)
# 6.5 - Draw health bar
screen.blit(healthbar, (5, 5))
for health1 in range(healthvalue):
screen.blit(health, (health1 + 8, 8))
# update the screen
pygame.display.flip()
fpsClock.tick(FPS)
# loop through the events
for event in pygame.event.get():
#키를 누를때
if event.type == KEYDOWN:
if event.key == K_w:
keys[0] = True
elif event.key == K_a:
keys[1] = True
elif event.key == K_s:
keys[2] = True
elif event.key == K_d:
keys[3] = True
#키를 뗄때 동작이 자동으로 멈춘다.False
if event.type == KEYUP:
if event.key == K_w:
keys[0] = False
elif event.key == K_a:
keys[1] = False
elif event.key == K_s:
keys[2] = False
elif event.key == K_d:
keys[3] = False
if event.type == QUIT:
# if it is quit the game
pygame.quit()
exit(0)
if event.type == MOUSEBUTTONDOWN:
shoot.play()
position = pygame.mouse.get_pos()
#화살 증가 횟수
acc[1] += 1
arrows.append([math.atan2(position[1]-(playerpos1[1]+32),position[0]-(playerpos1[0]+26)),playerpos1[0]+32,playerpos1[1]+32])
# 9 - Move player
if keys[0]:
playerpos[1] -= 5
elif keys[2]:
playerpos[1] += 5
if keys[1]:
playerpos[0] -= 5
elif keys[3]:
playerpos[0] += 5
badtimer -= 1
# 10 - Win/Lose check
if pygame.time.get_ticks() >= 90000:
running = 0
exitcode = 1
if healthvalue <= 0:
running = 0
exitcode = 0
if acc[1] != 0:
accuracy = acc[0]*1.0/acc[1]*100
else:
accuracy = 0

# 11 - Win/lose display
if exitcode == 0:
pygame.font.init()
font = pygame.font.Font(None, 24)
text = font.render("Accuracy: "+str(accuracy)+"%", True, (255, 0, 0))
textRect = text.get_rect()
textRect.centerx = screen.get_rect().centerx
textRect.centery = screen.get_rect().centery+24
screen.blit(gameover, (0, 0))
screen.blit(text, textRect)
else:
pygame.font.init()
font = pygame.font.Font(None, 24)
text = font.render("Accuracy: "+str(accuracy)+"%", True, (0, 255, 0))
textRect = text.get_rect()
textRect.centerx = screen.get_rect().centerx
textRect.centery = screen.get_rect().centery+24
screen.blit(youwin, (0, 0))
screen.blit(text, textRect)

while 1:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
exit(0)
pygame.display.flip()

 

 

음악이랑 이미지 확인

 

★이미지 보여주기

 

이미지한장을 구해 파이참 프로젝트 폴더 에 넣어준다.

 

 

display_width 와 display_height 나중에 값을 편하게 바꿀수있게 변수를 지정해준다.

보여줄 이미지 업로드 이미지 파일 이름을 넣어준다.

mying이라는 함수를 만들어준다.

스크린에 이미지가 보여줘야하므로 blit 을 사용한다. x,y는 이미지 위치지정

끝나지 않았다면을 설정해주고 이벤트를 만들어준다.

fill은 스크린 색상.

mying(x,y) 이미지 위치

pygame.display.flip() 이 업데이트 코드가 없으면 코드 출력이 안된다.

 

pygame.quit()

quit() 두줄은 없어도 무방하다.

 

pygame.display.set_caption("동동 이미지")

- 이코드를 넣으면 윈도우창 이름 동동 이미지


★음악넣기

 

음악 파일을 파이참 프로젝트 폴더에 넣어준다.

 

pygame.mixer.music.load 에는 음악 파일 이름

mixer를 빼면안된다. 모듈이다.

 

play(0)은 한번 재생이고 무한대로 재생하고 싶으면 (-1)

 

 

창이 뜨자마자 음악이 나오게된다. 음악재생!!!

 

이전에 배운 K_SPACE 말고 K_1 하면 하면 1번키

UP,DOWN 등등

 

사각형을 움직이게 할려면 기존 사각형을 없애는 코드를 만들어야한다

사각형이 옮겨지면 너무 순식간이라 프레임 설정을 해줘야한다.

속도도 설정해주어야 한다.

 

 

x,y 변수를 지정해 x,y좌표를 설정해 준다.

pygame.time.Clock() 초 설정을 해준다.

 

키를 눌르는 이벤트를 만들어 줘야하므로 pressed라는 변수를 만들어 준다.

몇칸을 옮길지 설정.3칸

사각형이 옮겨지면서 기존의 사각형은 없어져야 하므로 ourScreen.fill fill이라는 옵션사용.

너무 빨리 움직이므로 clock.tick(60)사용.

 

 

★윈도우 창 띄우기

 

★pycharm에서 pygame을 시작할때

 

import pygame

pygame.init()

 

이 두 줄은 반드시 시작해야 한다.

 

윈도우 화면 = 윈도우 서피스라 통칭

 

 

코드 대문자 소문자 문법 주의

pygame.event.get() 끊임없는 이벤트 체크

 

flip - ex) 책장계속넘기 면서 그림이 저절로 움직이는 착시현상

 

★게임 루프 개념 구현

 

핸들 이벤트 - 마우스를 눌르던가 키보드 입력

 

update game state - 게임의 변수들 을 업데이트

 

draw screen - 화면에 보여지는

 

★윈도우 창에 사각형 그리기

 

0,128,255 <-색깔 RGB지정

0,0,60,60 <- 0,0 xy좌표  60,60 사각형 크기

 

이벤트 키는 키 스페이스를 누르면 발생

스페이스를 누르면 블루가 아니다

만약 블루 색상 이면 키보드를 누르면 블루가 아니다

그러면은 하얀색으로 발생

 

'Python > Pygame' 카테고리의 다른 글

Pygame/ 삼각함수 math모듈  (0) 2017.07.19
Pygame/ 토끼 슈팅 게임 만들기  (0) 2017.07.14
Pygame/ 이미지, 음악 넣기  (0) 2017.07.13
Pygame/ 사각형 움직이게 하기  (0) 2017.07.08
Pygame/ pycharm 개발환경 구축  (0) 2017.07.06

 

pygame 다운로드 사이트

http://www.pygame.org/download.shtml

 

내가 64비트여도

64비트는 비공식,불안정

32비트는 안정적

 

pycharm 사용 할거면 파이썬이랑 pygame을 32비트로 그리고 둘다 같은버전으로.

pygame-1.9.1.win32-py3.1.msi 3MB

 

Windows x86 MSI Installer (3.1) (sig)

 

pycharm에서는 다른프로그램이 64비트면 안된다.

 

Pycharm

- 자바 이클립스 처럼 파이썬 개발 환경

- JetBrain 님이 개발한 프로그램, 코드분석,그래픽디버깅,통합장치테스트 등의 목적으로 사용되는 프로그램

 

 

pygame 모듈 돌아가는거 확인.

 

pycharm community설치 - https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows

 

 

 

new python file 열어서 파일 생성하고 Alt+shift+F10 pygame 모듈 돌아가는거 확인.

★정규 표현식(Regular Expressions)

- 복잡한 문자열을 처리할때 사용하는 기법

- 문자열을 처리하는 모든 곳에서 사용.

- 줄여서 정규식.

 

정규식은 고급 주제.

 

 

★정규식 기초, 메타 문자

 

. & $ * + ? { } [ ] \ | ( )

 

문자 클래스 []

[]사이에는 어떤 문자도 들어갈수 있다.

[] 안의 두문자 사이에 하이픈(-)을 사용하게 되면 두문자 범위를 의미.

[a-c]는 [abc]동일 [0-5]sms[012345]

[a-zA-z] : 알파벳 모두

 

^는 반대의 의미 [^0-9] 숫자가아닌 문자만을 의미.

 

★자주 사용하는 문자 클래스

 

\d - 숫자와 매치 [0-9]

\D - 숫자가 아닌 것과 매치 [^0-9]

 

★Dot(.)

줄바꿈 문자인 \n을 제외한 모든 문자와 매치됨을 의미

 

하지만 re.DOTALL 옵션을 주면 \n문자와 매치 가능.

 

a.b

"a + 모든 문자 + b"

 

a[.]b

"a + Dot(.)문자 + b"

 

★반복(*)

ca*t

*바로 앞에 있는 문자 a가 0부터 무한대로 반복의미

무한대(2억개)

 

★반복(+)

+최소 1번 이상 반복될때 사용

*가 반복횟수 0부터라면 +는 반복횟수  1부터

 

ca+t

"c+a(1번 이상 반복) + t"

 

ca{2}t

a가 2번 반복매치

 

ca{2,5}t

a가 2~5회 반복매치

 

★?

ab?c

"a + b(있어도 되고 없어도 된다) + c"

 

★정규식 지원 re 모듈

 

re(regular expression의 약어) 모듈 제공

컴파일 된 패턴 객체는 4가지 메소드 제공

 

 

 match, search는 정규식과 매치 될때는 match객체를 리턴하고 매치 되지 않을 경우 none을 리턴.

 

 

 span() : 매치된 문자열의 (시작, 끝) 튜플 리턴

 

 

첫번째 문자가 3이지만 문자열 전체를 검색하기 때문에 3 이후의 python 이라는 문자열과 매치

 

★findall

리스트로 리턴

 

 

★match 객체의 메서드

어떤 문자열이 매치?

매치된 문자열의 인덱스는 어디서부터 어디까지?

 

 

 

'Python > Python' 카테고리의 다른 글

Python-외장함수  (0) 2017.06.16
Python-내장 함수  (0) 2017.06.12
Python-오류 예외 처리  (0) 2017.06.11
Python-모듈  (0) 2017.06.10
Python-Class  (0) 2017.06.08

라이브러리에 대해 조사해보자

 

★sys

sys 모듈은 파이썬 인터프리터가 제공하는 변수들과 함수들을 직접 제어해주는 모듈.

 

갑자기 궁금

컴파일러와 인터프리터 차이점

인터프리터- 프로그램 한줄씩 읽어서 실행하는 방식 (파이썬 , 자바)

컴파일러- 전체 프로그램을 읽어서 한꺼번에 빠르게 실행하는 방식 (c)

 

★명령행에서 인수 전달하기-sys.argv

 

 

명령어 뒤의 모든 것들이 공백을 기준으로 나뉘어서 sys.argv 리스트의 요소가 됨을 알 수 있다.

 

☆강제로 스크립트 종료하기 - sys.exit

sys.exit = Ctrl+z Ctrl+D

 

★자신이 만든 모듈 불러와 사용하기 - sys.path

sys.path는 파이썬 모듈들이 저장되어 있는 위치. 경로 어디서나 불러올 수 있다.

sys.path.append("C:\ .......")

 

★pickle

객체의 형태를 그대로 유지하면서 파일에 저장하고 불러올 수 있게 하는 모듈.

pickle 모듈의 dump 함수를 이용해 딕셔너리 객체인 data를 그대로 파일에 저장하는 방법

 

pickle.load를 이용해 원래 있던 딕셔너리 객체(data) 상태 그대로 불러오는 예.

 

★OS 모듈

OS 모듈은 환경 변수나 디렉터리,파일 등의 OS자원을 제어할 수 있게 해주는 모듈.

 

내 시스템의 환경 변수 값을 알고 싶을때 - os.environ

현재 시스템의 환경 변수값들을 보여준다.

 

os.environ은 환경 변수에 대한 정보를 딕셔너리 객체로 리턴

 

★디렉터리 위치 변경하기 - os.chdir

★디렉터리 위치 리턴받기 - os.getcwd

 

 

 경로가 바뀐것 확인

 

★시스템 명령어 호출하기 - os.system

시스템 자체의 프로그램이나 기타 명령어들을 파이썬에서 호출할 수있다.

 

 

★실행한 시스템 명령어의 결과값 리턴 받기 - os.popen

 

★shutil

파일을 복사해 주는 파이썬 모듈.

 

파일 복사하기 - shutil.copy(src,dst)

src.txt 파일을 dst.txt파일로 복사한다 같은 이름이면 덮어씌운다.

리눅스의 cp 명령어

 

★glob

가끔 파일을 읽고 쓰는 기능이 있는 프로그램을 만들다 보면 특정 디렉터리에 있는 파일 이름을 모두 알아야 할 때

glob 모듈을 사용.

 

디렉터리에 있는 파일들을 리스트로 - glob(경로 이름)

*,?등의 메타 문자를 쓸수도 있다.

 

 

★tempfile

파일을 임시로 만들어서 사용할때 유용한 모듈 tempfile.

tempfile.mktemp()는 중복되지 않는 임시 파일의 이름을 무작위로 리턴

 

 

tempfile.TemporaryFile()은 임시 저장 공간으로 사용될 파일 객체를 리턴 기본적으로 바이너리 쓰기모드.

f.close()가 호출되면 이파일은 사라진다.

 

★time

시간과 관련된 time 모듈에는 유용한 함수가 많다.

 

time.time

time.time()은 UTC(Universal time coordinated 협정 세계 표준시)를 이용하여 현재 시간을 실수 형태로 리턴하는 함수.

 

 

time.localtime

이 함수는 time.time()에 의해 반환된 실수값을 이용해 연도,월,일,시,분,초 형태로 바꿔주는 함수.

 

 

★time.asctime

time.localtime에 의해 반환된 튜플 형태의 값을 인수로 받아 날짜와 시간을 알아보는 함수

 

 

★time.strftime

시간에 관계된것을 세밀하게 표현할 수있는 포맷코드를 제공한다.

 

 

★time.sleep

이 함수는 주로 루프 안에서 많이 사용. 일정한 시간 간격을 두고 루프를 실행할 수 있다.

 

 

1초씩 출력되는 것을 볼수 있다

 

★Calender

파이썬에서 달력을 볼 수 있게 해주는 모듈

 

calendar.calendar(연도)로 사용하면 그해의 전체 달력을 볼수 있다.

 

 

calendar.prmonth(연도, 월)

 

 

★calendar.weekday

weekday(연도,월,일)함수는 그 날짜에 해당하는 요일 정보를 리턴한다.

월요일이 0 화요일 1 일요일 6 값을 리턴한다.

리눅스는 일요일이 0 월요일이 1

 

 

★calendar.monthrange

monthrange(연도,월)함수는 입력받은 달의 1일이무슨 요일인지와 그달이 몇일까지 있는지 확인.

 

 

★random

이 함수는 난수(규칙이 없는 임의의 수)를 발생시키는 모듈  random과 randint

 

 

0.0 에서 1.0 사이의 실수 중 난수 값을 리턴

1 에서 11 사이의 정수중 난수 값 리턴

 

★webbrowser

자신의 시스템에서 사용하는 기본 웹 부라우저가 자동으로 실행되게 하는 모듈.

 

'Python > Python' 카테고리의 다른 글

Python-정규 표현식  (0) 2017.06.16
Python-내장 함수  (0) 2017.06.12
Python-오류 예외 처리  (0) 2017.06.11
Python-모듈  (0) 2017.06.10
Python-Class  (0) 2017.06.08

★abs

abs(x)는 어떤 숫자를 입력으로 받았을때, 그 숫자의 절대 값을 돌려주는 함수이다.

 

 

★all

all(x)은 반복 가능한 자료형 x를 입력 인수로 받으며 이 x가 모두 참이면 True,거짓이 하나라도 있으면 False

를 리턴한다.

 

반복가능한 자료형이란 for문으로 그 값을 출력할수 있는것 리스트,튜플,문자열,딕셔너리,집합 등이 있다.

 

 

요소0은 거짓이므로 Faluse를 리턴한다.

 

★any

any(x)는 x중 하나라도 참이 있을 경우 True를 리턴하고 x가 모두 거짓일 경우에만 False를 리턴한다.

all(x)의 반대 경우라고 할수 있다.

 

 

★chr

chr(i)는 아스키 코드 값을 입력받아 그코드에 해당하는 문자를 출력하는 함수이다.

아스키 코드란 0~127 사이의 숫자들을 각각 하나의 문자 또는 기호에 대응시켜 놓은것

 

 

★dir

dir은 객체가 자체적으로 가지고 있는 변수나 함수를 보여준다.

아래 사진은 리스트와 딕셔너리 객체의 관련 함수들을 보여주는 예다.

 

 

★divmod

divmod(a,b)는 2개의 숫자를 입력받는다. 그리고 나눈 몫과 나머지를 튜플 형태로 리턴하는 함수다.

 

 

★enumerate

enumerate는 열거하다라는 뜻 이함수는 순서가 있는 자료형(리스트,튜플,문자열)을 입력으로 받아 인덱스 값을 포함하는

enumerate객체를 리턴한다.

 

보통 enumerate 함수는 for문과 함께 자주 사용

 

 

현재 순서(index)와 그값을 알수 있다.

 

★eval

eval(expression)은 실행 가능한 문자열(1+2,'hi'+'a')을 입력받아 문자열을 실행한 결과 값을 리턴하는 함수

 

 

eval은 입력받은 문자열로 파이썬 함수나 클래스를 동적으로 실행하고 싶은 경우 사용

 

★filter

filter은 무엇인가를 걸러낸다. 첫번째 인수로 함수 이름을, 두번째 인수로 그함수에 차례로 들어갈 반복 가능한 자료형을 받는다. 두번째 인수인 반복 가능한 자료형 요소들이 첫번째 인수인 함수에 입력되었을때 리턴값이 참인 것만 묶어서

돌려준다.

 

 

positive함수는 리스트를 입력값으로 받아 각각의 요소를 판별해 양수값만 리턴하는 함수

위에 결과 값은 list

밑에 결과 값은 tuple

filter을 빼면 에러가 발생한다

 

★hex

hex(x)는 정수값을 입력받아 16진수(hexadecimal)로 변환하여 리턴하는 함수다.

 

 

★id

id(object)는 객체를 입력받아 객체의 고유주소값을 리턴하는 함수이다.

 

 

id(5)는 다른객체이므로 다른 고유 주소값이 출력된다

 

★int

int(x)는 문자열 형태의 숫자나 소수점이 있는 숫자등을 정수형태로 리턴하는 함수

 

 

3진수로 표현된 22의 10진수 값은8이다.

 

★isinstance

isinstance(object,class)는 첫번째 인수로 인스턴스, 두번째 인수로 클래스 이름을 받는다.

입력으로 받은 인스턴스가 그 클래스의 인스턴스인지를 판단하여 참이면 True, 거짓이면 False를 리턴한다.

 

 

a가 Person 클래스에 의해서 생성된 인스턴스 이므로 트루

b는 Person 클래스에 의해 생성된 인스턴스가 아니므로 False를 리턴

 

★lambda

lambda는 함수를 생성할때 사용하는 예약어 def와 동일한 역할

보통 함수를 한줄로 간결하게 만들때 사용한다.

 

lambda 인수1, 인수2,...:인수를 이용한 표현식

 

def 가 있는데 lambda가 나온이유는 lambda는 def보다 간결하게 사용할수 있기 때문이다.

lambda는 def를 사용할수 없는 곳에서도 사용할수 있다.

 

 

★len

len은 입력한 길이(요소의 개수) 를 리턴하는 함수이다.

 

★map

map(f,iterable)은 함수(f)와 반복 가능한(iterable) 자료형을 입력으로 받는다.

map은 입력받은 자료형의 각 요소가 함수 f에 의해 수행된 결과를 묶어서 리턴하는 함수이다.

 

 

리스트 요소를 입력받아 각 요소에 2를 곱한 결과값을 돌려준다.

 

 

x에 리스트에 있는 값들이 하나씩 들어가 2배의 결과가 나온다

 

 

lambda를 사용하면 간략하게 만들수 있다.

 

 

리스트의 값 요소들을 1씩 증가시킨다.

★max

그 최대값을 리턴하는 함수

 

★min

max와 반대로 최소값을 리턴하는 함수

 

★oct

정수 형태의 숫자를 8진수 문자열로 바꾸어 리턴하는 함수

 

★ord

아스크 코드값을 리턴하는 함수

chr함수와 반대

 

 

★pow

pow(x,y)는 x의 y 제곱한 결과값을 리턴하는 함수

 

 

★range(인수가 3개일 경우)

세 번째 인수는 숫자 사이의 거리를 말한다.

 

 

★sorted

입력값을 정렬한 후 그결과를 리스트로 리턴하는 함수

 

 

sort라는 함수가 있는데 그 함수는 리스트 객체 그자체를 정렬만하고 결과를 리턴하지는 않는다.

 

 

 

★zip

동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수

 

 

 

 

 

'Python > Python' 카테고리의 다른 글

Python-정규 표현식  (0) 2017.06.16
Python-외장함수  (0) 2017.06.16
Python-오류 예외 처리  (0) 2017.06.11
Python-모듈  (0) 2017.06.10
Python-Class  (0) 2017.06.08

프로그램을 만들다 보면 수없이 많은 오류를 만나게 된다.

오류를 무시하고 싶을 때도 있고 별도로 처리하고 싶을 때도 있다.

파이썬은 try,except를 이용해 오류를 처리 할 수 있게 해준다.

 

★오류는 어떤 때 발생할까?

 

오류를 처리하는 방법을 알기 전에 어떤 상황에서 오류가 발생하는지 알아보자.

 

디렉토리 안에 없는 파일을 열려고 시도 했을 때 발생하는 오류이다.

 

 

FileNotFoundError 파일 오류 메시지

 

 

0으로 나누려니까 ZeroDivisionError라는 이름의 오류 발생

 

 

a리스트에서 얻을 수 없는 값이다. 따라서 indexError 발생

 

★오류 예외 처리 기법

 

try, except문

 

try:

...

except [발생 오류[as 오류 메시지 변수]]:

...

 

 

try .. else

 

try문은 else절을 지원한다. else절은 예외가 발생하지 않은 경우에 실행되며 반드시 except절 바로 다음에 위치

해야 한다.

 

 

foo.txt라는 파일이 없으면 except절이 수행되고

파일이 있으면 파일내용 출력하기

 

try .. finally

 

보통 finally절은 사용한 리소스 close해야 할 경우에 많이 사용된다.

 

★여러개의 오류처리하기

 

try문 내에서 여러개의 오류를 처리하기 위해서는 다음과 같은 구문을 이용한다.

 

 

인덱싱 오류가 먼저 발생했으므로 밑에 오류들은 출력되지 않는다.

 

 

2개 이상의 오류를 동시에 처리하기 위해선 괄호를 묶어 사용

 

★오류 회피하기

 

프로그래밍을 하다가 특정 오류가 발생하면 그냥 통과 시켜야 할 때가 있을수 있다.

 

★오류 일부러 발생시키기

 

프로그래밍을 하다보면 종종 오류를 발생시켜야 할 경우도 생긴다.

raise라는 명령어를 이용해 오류를 강제로 발생시킨다.

 

 

 

NotlmplementedError는 파이썬 내장 오류로 일부러 발생시키고자 사용한다.

orange클래스는 fruit클래스를 상속받는다.

그런데 orange클래스에서 apple함수를 구현하지 않아 fruit클래스의 apple함수가 호출된다.

그리고 raise문에 의해 에러메시지가 나온다.

 

상속받는 클래스에서 함수를 재구현하는 것을 메서드 오버라이딩이라 부른다.

 

 

'Python > Python' 카테고리의 다른 글

Python-외장함수  (0) 2017.06.16
Python-내장 함수  (0) 2017.06.12
Python-모듈  (0) 2017.06.10
Python-Class  (0) 2017.06.08
Python-파일 읽고쓰기  (0) 2017.06.06

모듈이란 함수나 변수 또는 클래스 들을 모아 놓은 파일이다.

파이썬으로 프로그래밍을 할때 많은 모듈을 사용한다.

 

★모듈 만들고 불러보기

 

 

import는 현재 디렉터리에 있는 파일이나 파이썬 라이브러리가 저장된 디렉터리에 있는 모듈만 불러올 수 있다.

 

mod.py에 함수 추가

 

 

print(mod.num(3,2))를 해도 출력이 된다.

mod.sum 이런식으로 쓰지 않고 sum,safe_sum처럼 함수를 쓰고 싶은 경우도 있을 것이다.

이럴땐 from 모듈이름 import 모듈 함수 쓰면 된다.

 

 

★if __name__ == "__main__":의 의미

 

 

하지만 import mod를 하면 문제가 생긴다.

 

 

 

__name__ == "__main__"이 참이 되어 if문 다음 문장들이 수행된다.

name대신에 다른걸 쓰면 오류가 발생

 

★클래스나 변수 등을 포함한 모듈

 

 

print(a.solv(3))의 3은 r값이 되어 3.14*6을하면 18.84가 된다.

 

 

★새파일 안에서 이전에 만든 모듈 불러오기

 

 

★모듈을 불러오는 또 다른 방법

 

sys모듈 파이썬을 설치 할때 함께 설치되는 라이브러리 모듈이다.

 

 

sys.path는 파이썬 라이브러리들이 설치되어 있는 디렉터리들을 보여준다. 파이썬 모듈이 위의 디렉터리에

들어 있다면 모듈이 저장된 디렉터리로 이동할 필요없이 바로 불러서 사용 할 수 있다. 실습해보자

 

 

경로가 추가된것을 확인한다.

 

 

나는 안전하게 모듈 접근은 환경 변수 추가를 따로 안하고 그 폴더안에서 진행하는게 낫다고 생각한다.

'Python > Python' 카테고리의 다른 글

Python-내장 함수  (0) 2017.06.12
Python-오류 예외 처리  (0) 2017.06.11
Python-Class  (0) 2017.06.08
Python-파일 읽고쓰기  (0) 2017.06.06
Python-함수  (0) 2017.06.06

프로그래밍 언어중 하나인 c언어에는 클래스가 없다. 굳이 클래스 없이도 프로그램을 만들수 있다는 말이다.

클래스는 지금까지 공부한 함수나 자료형처럼 프로그램 작성을 위해 필요한 요소는 아니다.

하지만 프로그램 작성시 클래스를 사용하면 프로그래머가 얻을 수 있는 이익은 상당하다.

 

계산기에 3이라는 숫자를 입력하고 + 기호를 입력한 후 4를 입력하면 결과값으로 7을 보여준다. 다시 한 번 + 기호를 입력한 후 3을 입력하면 기존 결과값 7에 3을 더해 10을 보여준다. 즉 계산기는 이전에 계산된 결과값을 항상 메모리 어딘가에 저장하고 있어야 한다.

return result문장을 지우면 결과값이 None None출력확인

 

adder 함수는 입력 인수로 num을 받으면 이전에 계산된 결과 값에 더한후 출력하는 함수.

이전에 계산된 결과값을 유지하기 위해서 result라는 전역변수(global)를 사용했다.

 

한 프로그램에서 2개의 계산기가 필요한 상황이 발생하면 어떻할까... 각각의 계산기는 각각 결과값을 유지해야 하기 때문에

adder함수 하나만으로는 결과 값을 유지할수 없다.

함수를 각각 따로 만들어야 한다.

 

하지만 계산기가 점점 늘어날때 이렇게 전역변수와 함수를 추가하긴 힘들것이다. 간단한 해결책이 있다.

 

cal1,cal2 라는 별개의 계산기(객체) 가 각각의 역할을 수행한다.

간단하게 cal3=Calcu()만 추가하므로 간편해진다.

 

programmer()의 결과값을 돌려받은 lee과 dong이 바로 객체이다.

 

객체와 인스턴스의 차이.

- 클래스에 의해서 만들어진 객체를 인스턴스라고 한다. 차이는 lee=programmer() 에서 lee는 객체이다.

lee라는 객체는 programmer의 인스턴스이다. 즉 인스턴스라는 말은 특정 객체(lee)가 어떤 클래스(programmer)의

객체 인지를 관계 위주로 설명할 때 사용된다. 즉 lee은 인스턴스 보다는 lee는 객체라는 표현이 어울리고

lee는 programmer의 객체 보다는 lee는 programmer의 인스턴스 라는 표현이 어울린다.

 

★클래스 함수

 

 

☆self: self라는 변수를 클래스 함수의 첫 번째 인수로 받아야 한다는 것은 파이썬만의 특징이다.

☆__init__: 객체를 만들때 항상 실행된다는 뜻의 함수.

 

★클래스 구조 만들기

대화형 인터프리터에서 pass란 문장만을 포함한 Fourcal 클래스를 만든다.

pass는 아무것도 수행하지 않는 문법. 임시로 코드 작성할때 주로 사용함

 

a=FourCal()로 a라는 객체를 먼저 만들고 type(a)로 a라는 객체가 어떤 타입인지 알아보았다.

a가 FourCal 클래스의 인스턴스임을 알수 있다.

 

★객체에 숫자 지정할수 있게 만들기

 

setdata 메서드의 입력인수

입력인수로 3개의 입력값을 받는다. 그런데 첫 번째 입력 인수는 특별한 의미를 갖는 self변수다.

 

a라는 객체를 만든다음 a.setdata(3,4)처럼 하면 FourCal 클래스의 setdata 메서드가 호출되고

setdata 메서드의 첫 번째 인수에는 자동으로 a라는 객체가 입력으로 들어가게 된다.

 

즉 setdata의 입력인수는 3개지만 a.setdata(3,4)처럼 2개의 입력값만 주어도 a라는 객체가 setdata 함수의

첫 번째 입력을 받는 변수인 self에 대입되게 된다.

 

 

a와 b라는 객체는 모두 first라는 변수를 가지고 있지만 변수의 값은 각각 다르다.

a,b 객체의 first변수는 고유의 저장 영역을 가지고 있는 객체 변수이기 때문이다.

 

객체 변수란??- 그 객체의 고유한 값을 저장할 수 있는 공간이다.

 

★더하기 기능 만들기

 

self.first+self.second= a.first+a.second

 

★곱하기 빼기 나누기 기능 만들기

 

★스토리 있는 클래스 만들기

 

내이름 출력해보기.

 

이동현이 여행을 가다 를 출력해 보자

 

__init__로 바꿔서 해보기

 

★클래스의 상속

상속: 물려받다 .

HouseLee 이라는 클래스가 Housedong 클래스를 상속받는다

 

★연산자 오버로딩

연산자 오버로딩이란 연산자를 객체끼리 사용할 수 있게 하는 기법

 

pey+man처럼 호출되면 __add__(self,other) 메서드의 self는 pey가 되고 other는 man이 된다.

 

 

'Python > Python' 카테고리의 다른 글

Python-오류 예외 처리  (0) 2017.06.11
Python-모듈  (0) 2017.06.10
Python-파일 읽고쓰기  (0) 2017.06.06
Python-함수  (0) 2017.06.06
Python-조건문(if문),반복문  (0) 2017.06.02

★파일 생성하기

파일 객체=open(파일 이름, 파일 열기 모드)

 

 

새파일.txt라는 파일을 C:/Python 디렉터리에 생성하고 싶다면 다음과 같이 작성.

 

close()를 사용해서 열려 있는 파일을 직접 닫아 주는 것이 좋다. 쓰기모드로 열었던 파일을 닫지 않고

다시 사용하려고 하면 오류가 발생하기 때문이다.

 

★파일을 쓰기 모드로 열어 출력값 적기

 

 

★프로그램의 외부에 저장된 파일을 읽는 여러 가지 방법

★readline() 함수 이용하기

 

모든 라인을 읽어서 화면에 출력하고 싶다면 아래와 같이 작성

while True: 라는 무한 루프 안에서 f.readline()을 이용해 파일을 계속해서 한줄씩 읽어 들이도록한다.

만약 더이상 읽을 라인이 없으면 break를 수행한다.

 

★readlines() 함수 이용하기

 

 readlines() 함수는 파일의 모든 라인을 읽어서 각각의 줄을 요소로 갖는 리스트로 리턴한다.

 

★read() 함수 이용하기

 

★파일에 새로운 내용 추가하기

파일 추가모드('a')

★with문과 함께 사용하기

파일을 열면 f.close() 해주어야 한다. 이렇게 파일을 열고 닫는 것을 자동으로 처리해주는 것을 with문이다.

 

★sys 모듈로 입력 인수 주기

type 명령어는 바로 뒤에 적힌 파일 이름을 인수로 받아 그 내용을 출력해주는 도스 명령어 이다.

대부분의 도스 명령어들은 다음과 같이 명령행(도스창)에서 입력 인수를 직접 주어 프로그램을 실행시키는 방식을 따른다.

 

sys모듈의 argv는 명령창에서 입력한 인수들을 의미

 

파일 소문자를 대문자로 만들기.

'Python > Python' 카테고리의 다른 글

Python-모듈  (0) 2017.06.10
Python-Class  (0) 2017.06.08
Python-함수  (0) 2017.06.06
Python-조건문(if문),반복문  (0) 2017.06.02
Python-딕셔너리,집합(자료형)  (0) 2017.05.30

★def 함수

- 함수를 만들때 사용하는 예약어.

- 함수명은 함수를 만드는 사람이 임의로 만들 수 있다.

 

" 이 함수의 함수명은 sum이고 입력 인수로 2개의 값을 받으며 결과핪은 2개의 입력값을 더한 값이다"

 

return - 결과 값을 돌려주는 명령어.

 

★입력값이 없는 함수

박스안에만 출력하면 아무것도 안나온다 그러므로 아래같이 코딩을 해줘야 출력이 나온다.

 

★결과 값이 없는 함수

마지막 문장 sum(숫자,숫자)를 지정해줘야 출력이 나온다.

 

★입력값도 결과값도 없는 함수

 

★여러 개의 입력값을 받는 함수 만들기

ex)여러 개의 입력받을 모두 더하는 함수를 직접 만들어 보자

sum_num라는 함수는 입력값이 몇개든 상관이 없다. *args처럼 입력 변수명 앞에 *을 붙이면

입력값들을 전부 모아서 튜플로 만들어 주기 때문이다.

*args는 임의 변수지만 관례적으로 자주 사용한다

range 함수 접근 실패

 

def sum_num(*args)처럼 함수의 인수로 *args(*입력 변수)만 사용할수 있는 것은 아니다

 

내가 만들어본 코드다.

 

★return의 또 다른 쓰임새

return문을 만나는 순간 결과 값을 돌려준 다음 함수를 빠져나가게 된다

 

또 다른 예제

입력 인수가 name,old, man=True 3개다.

man=True 는 함수의 인수 초깃값을 설정하는 방법이다.

주의 man=True는 마지막에 써야한다. 

 

★함수 안에서 선언된 변수의 효력 범위

2가 출력되어야 할것 같지만 결과값은 1로 나온다. 그 이유는 함수 안에서 새로 만들어진

변수는 함수 안에서만 사용되는 "함수만의 변수"이기 때문이다. 밖의 변수는 아니다.

 

print(a)에서 에러가 발생한다. 이유는 a라는 변수를 어디에서도 찾을수 없기 때문.

 

★함수 안에서 함수 밖의 변수를 변경하는 방법

1.return 이용

 

2.global 이용

프로그래밍 할때 global명령어는 사용하지 않는게 좋다. 독집적으로 존재하는 것이 좋기 때뭄ㄴ이다.

외부 변수에 종속적인 함수는 좋은 함수가 아니다.

첫번째 return 방법 사용을 권한다.

'Python > Python' 카테고리의 다른 글

Python-Class  (0) 2017.06.08
Python-파일 읽고쓰기  (0) 2017.06.06
Python-조건문(if문),반복문  (0) 2017.06.02
Python-딕셔너리,집합(자료형)  (0) 2017.05.30
Python-리스트,튜플(자료형)  (0) 2017.05.29

★if문의 기본 구조

if 조건문:

수행할 문장1

수행할 문장2

...

else:

수행할 문장A

수행할 문장B

...

 

들여쓰기 중요

 

★조건문이란?

-참과 거짓을 판단하는 문장

☆비교 연산자

 

 

☆논리 연산자

 

 

 

★다양한 조건을 판단하는 elif

lf <조건문>:

<수행할 문장1>

<수행할 문장2>

...

elif <조건문>:

<수행할 문장1>

<수행할 문장2>

...

elif <조건문>:

<수행할 문장1>

<수행할 문장2>

...

...

else:

<수행할 문장1>

<수행할 문장2>

...

 

실습

1. 비밀번호가 일치하면 로그인 시켜라.

2. ID와 Passwd가 모두 일치할때,

   lD는 일치하고 Passwd가 불일치 할때,

   lD는 불일치하고 Passwd는 일치할때,

   lD와 Passwd 모두 불일치 할때 출력하라.

 

 

★반복문

while문

☆기본 구조

-조건문이 참인 동안에 while문 아래에 속하는 문장들이 반복해서 수행된다.

 

 while <조건문>:

<수행할 문장1>

<수행할 문장2>

<수행할 문장3>

...

 

10 < 10 거짓 종료

 

★강제로 빠져 나가기-break

 

 

 ★조건에 맞지 않는 경우 맨처음으로 돌아가기-continue

 while문을 빠져나가지 않고 continue사용

 

 continue 대신 break를 쓰면 값이 1 출력

 

 실습

break 대신 continue를 쓰면 오류

 

 ★for문

☆기본 구조

for 변수 in 리스트(또는 튜플, 문자열):

수행할 문장1

수행할 문장2

...

 

☆전형적인 for문

 

☆다양한 for문의 사용

 

☆for문의 응용

총 5명의 학생이 시험을 보았는데 시험 점수가 60점이 넘으면 합격이고 그렇지 않으면 불합격이다.

합격인지 불합격인지 결과를 보여주세요

marks=[90,25,67,45,80]

 

for문이 한 번씩 수행될 때마다 number는 1씩 증가한다

 

 

☆for문과 continue

while문에서만 쓰는게 아니라 for문에서도 continue를 사용할수 있다.

60점이상인 사람에게는 축하메시지를 아닌사람은 아무런 메시지도 전하지 않는 프로그램을 만들자.

mark < 60이 참이 되어 continue문이 수행된다.

 

☆for문과 자주 사용하는 range함수

range(10)은 0부터 10미만의 숫자를 포함하는 range객체를 만들어준다.

range(시작 숫자, 끝 숫자) 이때 끝 숫자는 포함되지 않는다.

 

★range 실습

i변수에 리스트의 숫자들이 1부터 10까지 하나씩 차례로 대입되면서 sum=sum+i라는 문장을

반복적으로 수행하고 최종적 55가 된다.

 

60점이상이면 합격이라는 출력.

len함수는 리스트 내 요소의 개수를 돌려주는 함수이다.

len(makrs)는 5가 되고 range(5)가 된다.

 

★for와 range를 이용한 구구단

 

입력 인수 end를 넣어 준 이유는???

print(i*j, end=" ") end를 넣어준이유는 결과값을 출력할때

다음줄로 넘기지 않고 그줄에 계속해서 출력하기 위해서다.

 

end를 빼면

 

print(" ")를 빼면

 

★리스트 안에 for문 포함하기

for문을 포함하는 리스트 내포(list comprehension)를 이용하면 좀더 편리하고 직관적인 프로그램을 만들수 있다.

 

 

 

 

첫번째 방법이 더 와닿는거 같다.

 

★짝수에만 3을 곱하여 담고 싶다면 if조건을 사용할수 있다.

코딩줄이 줄어드는게 장점이지만 한줄로 길게 쓰는건 보기 않좋은거 같다.

 

 

☆for문 이용해서 평균값 구하기

 

'Python > Python' 카테고리의 다른 글

Python-파일 읽고쓰기  (0) 2017.06.06
Python-함수  (0) 2017.06.06
Python-딕셔너리,집합(자료형)  (0) 2017.05.30
Python-리스트,튜플(자료형)  (0) 2017.05.29
Python-숫자형,문자열,자료형  (0) 2017.05.28

+ Recent posts