hw_0311.html
0.30MB
20200311.html
0.34MB

 

#리스트 중에서 홀수에만 2를 곱하여 저장하는 다음과 같은 코드가 있다.
numbers = [1,2,3,4,5]
result = []
for n in numbers:
    if n%2==1:
        result.append(n*2)
        
#위 코드를 리스트 내포(list comprehension)를 사용하여 표현해 보자.
numbers = [1,2,3,4,5]
result = [n*2 for n in numbers if n%2==1]
 
print(result) # 뽑아낸 홀수들에다 2를 곱한 것.

[2, 6, 10]

 

#입력으로 들어오는 모든 수의 평균 값을 계산해 주는 함수를 작성
# ( 단 입력으로 들어오는 수의 개수는 정해져 있지 않다.)

def avg_numbers(*args):
    result = 0
    for i in args:
        result += i
    average = result/len(args)
    return average

avg_numbers(1,2,3)

2.0

 

# 1. 부산발 이몽룡 성춘향 러브 스토리 만들기

# 이몽룡은 부산 클럽에 놀러가고 성춘향도 우연히 3일 동안 부산 클럽네 놀러간다
# 둘은 썸을 타지만 일정 때문에 각자 서울로 돌아간다.
# 1년 뒤 강남 클럽에서 둘은 우연히 재회를 한다.
# 그러다가 연인이 된다.

class HouseLee:
    lastname='이'
    lastname2='성'
    def __init__(self,name, name2):
        self.fullname = self.lastname + name
        self.fullname2 = self.lastname2 + name2
        
    def travel(self,where, day):
        print('%s, %s 에 놀러가고 %s도 우연히 %d일 동안 %s에 놀러 간다.' % (self.fullname, where, self.fullname2, day, where))
    def ssum(self,where):
        print('둘은 썸을 타지만 일정 때문에 각자 %s로 돌아간다' %where)
    def year(self,year,where):
        print('%d년 뒤 %s에서 둘은 우연히 재회를 한다. 그러다가 연인이 된다.' % (year, where))
        
mr = HouseLee('몽룡','춘향')
mr.travel('부산 클럽',3)
mr.ssum('서울')
mr.year(1,'강남 클럽')

# 1. 부산발 이몽룡 성춘향 러브 스토리 만들기

# 이몽룡은 부산 클럽에 놀러가고 성춘향도 우연히 3일 동안 부산 클럽네 놀러간다
# 둘은 썸을 타지만 일정 때문에 각자 서울로 돌아간다.
# 1년 뒤 강남 클럽에서 둘은 우연히 재회를 한다.
# 그러다가 연인이 된다.
#오버로딩 사용 예시

class HouseLee:
    lastname = 'Lee'
    def __init__(self, name):
        self.fullname = self.lastname + name
        
    def travel(self, where):
        print('%s.%s 클럽에가다'%(self.fullname, where))
    def some(self, other):
        print('%s.%s 썸을 타다'%(self.fullname, other.fullname))
    def back(self, other):
        print('%s.%s 서울로 돌아가다.'%(self.fullname, other.fullname))
    def meet(self, other):
        print('%s.%s 재회하다.'%(self.fullname, other.fullname))
    def __add__(self, other):# 오버로딩의 매소드는 __add__식으로 쓴다.
        print('%s.%s 연인이 된다..'%(self.fullname, other.fullname))

class HouseSung(HouseLee):
    lastname='sung'
    def travel(self, where, day):
        print('%s,%s 클럽에 %d일 가네'%(self.fullname, where, day))
mr = HouseLee('몽룡') #매개변수
ch = HouseSung('춘향')
mr.travel('부산')#매개변수
ch.travel('부산',3)
mr.some(ch)
mr.back(ch)
mr.meet(ch)
mr+ch

def sum(a, b):
    return a + b
def safe_sum(a,b):
    if type(a) != type(b):
        print('더할수 있는 것이 아닙니다.')
        return
    else:
        result = sum(a,b)
    return result
# 모듈이란 함수나 변수 또는 클래스를 모아 놓은 파일
# mod1,py가 작업 디렉토리에 있어야함
import mod1
print(mod1.safe_sum(3,4))

5

2

7

mod1

print(mod1.safe_sum(1,'a'))

더할수 있는 것이 아닙니다.

None

print(mod1.sum(10,20))

30

 

from mod1 import safe_sum
#sum(3,4)
safe_sum(1,'a')

더할수 있는 것이 아닙니다.

 

from mod1 import safe_sum
print(sum)
print(__name__)
print(mod1.__name__)

<function <lambda> at 0x00000266BD0FBD38>

__main__

mod1

# if __name__== "__main__"을 사용하면 C:\doit>python mod1.py처럼
# 직접 이파일을 실행 했을 떄는 __name__=='__main__'이 참이 되어 if문 다음 문장이 수행된다.
# 반대로 대화형 인터프리터나 다른 파일에서 이모듈을 불러사 사용 할때는 
#__name__=='__main__'이 거짓이 되어 if문 다음 문장이 수행되지 않는다.
# mod1.py

def add(a,b):
    return a+b
def sub(a,b):
    return a-b

5

2

# if __name__== "__main__"을 사용하면 pythin mod1.py 처럼 직접 이파일을 실행 시켰을 떄는 참이 되어 if문 다음 문장들이 수행된
# 반대로 무튤로 불러서 사용시 거짓이 되어 if 문 다음 문장들이 수행되지 않음.
import mod1
print(safe_sum(5,7))

12

 

#클래스나 변수 들을 포함한 모듈(mod2.py)
PI=3.141592

class Math:
    def solv(self,r):
        return PI*(r**2)
    def sum(self,a,b):
        return a+b
if __name__== "__main__":
    print(PI)
    a=Math()
    print(a.solv(2))
    print(a.sum(PI,4.5))

 

3.141592

12.566368

7.641592

 

#모듈에 포함된 변수,클래스, 함수 사용하기
import mod2
print(mod2.PI)
a=mod2.Math()
print(a.solv(2))
print(a.sum(PI,4.5))

 

3.141592

12.566368

7.641592

 

#새파일 안에서 이전에 만든 모듈 불러오기
import mod2
a=mod2.Math()
result=a.sum(3,4)
print(result)

7

#예외처리
try:
    f=open('nofile','r')
except FileNotFoundError as e:
    print(str(e))
else:
    data=f.read()
    f.close()

[Errno 2] No such file or directory: 'nofile'

 

#finally절은 try문 수행 도중 예외발생 여부에 상관없이 항상 수행
f=open('nofile','w')
try:
    print('nofile')
finally:
    f.close()
    

nofile

 

#파일이 없어도 오류를 발생시키지 않고 통과
try:
    f=open('nofile','r')
except FileNotFoundError:
    pass
#e라는 오류 메세지 출력
try:
    4/0
except ZeroDivisionError as e:
    print(e)
#리스트에서 얻을 수 없는 값이어서 에러 발생
a=[1,2,3]
a[4]

#오류 일부러 발생 시키기
class Bird:
    def fly(self):
        raise NotImplementedError
        
class Eagle(Bird):
    pass
eagle=Eagle()
eagle.fly()

 

#NotImplementedError가 발생되지 않게 하려면 Eagle 클래스 fly 함수를 반드시 구현
class Eagle(Bird):
    def fly(self):
        print('very fast')
        
eagle = Eagle()
eagle.fly()

very fast

 

import mod3
# __init__.py의 용도
# __init__.py파일은 해당 디렉토리가 패키지의 일부임을 알려주는 역할을 함
# 파이선 3.3.버전 부터는 __init__.py가 없이도 패키지로 인식되지만
# 하위버전 호환을 위해 __init__.py 생성이 필요함

import game.sound.echo

 

# __all__의 용도
# 특정 디렉토리의 모듈을 *을 이용하여 import 할 때는 해당 디렉토리의 __init__.py파일에 __all__이라는 변수를 설정하고
# import 할 수 있는 모듈을 정의해 주어야 함
# __all__ = ['echo']
from game.sound import *
echo.echo_test()

 

#내장함수
파이썬 내장함수는 외부 모듈과 달리 import 가 필요하지 않기 때문에 아무런 설정 없이 바로 사용 가능.

 

# 내장 함수
print(abs(-3)) # 절대값
print(all([1,2,3,0])) #x가 모두 참이면 TRUE, 거짓이 하나라도 있으면 FALSE
print(any([1,2,3,0])) #x중 하나라도 참이 있을 경우 TRUE, 모두 거짓일 경우 FALSE
print(chr(97)) #아스키 코드값을 입력으로 받아 해당 문자 출력
#print(dir([1,2,3])) #객체가 자체적으로 가지고 있는 변수나 함수
#print(dir({'1':'a'})) #순서가 있는 자료형을 입력으로 받아 인덱스 값을 포함한 enumerate 객체를 리턴
print(divmod(7,3)) # ★7을 3으로 나눈 몫과 나머지를 튜플형태로 리턴
for i, name in enumerate(['body','foo','bar']): #enumerate 를 하면 순서까지 포함해서 처리가 된다.
    print(i, name)
print()
print(eval('1+2')) # 실행 가능한 문자열 입력으로 받아 문자열을 실행한 결과값을 리턴

# 내장 함수
# 파이썬 내장 함수는 외부 모듈과 달리 import가 필요하지 않기 때문에 아무런 설정 없이 바로 사용

def positive(numberList):
    result=[]
    for num in numberList:
        if num>0:
            result.append(num)
    return result
print(positive([1,-3,2,0,-5,6]))

[1, 2, 6]

 

# filter 함수는 첫번째 인수로 함수 이름을 두번째 인수로 그 함수에 적용하는 반복가능한 자료형
# 을 받고 리턴값이 참인것만 묶어서 반환

def positive(x):
    return x > 0
print(list(filter(positive,[1,-3,2,0,-5,6] )))

[1, 2, 6]

print(hex(234)) #정수 값을 입력 받아 16진수로 변환하여 리턴
#id()메모리 주소
a=3
print(id(3))
print(id(a))
b=a
print(id(b))
print(id(4))

0xea

140735940108752

140735940108752

140735940108752

140735940108784

#input
b=input('숫자만 입력해주세요!')
#정수형태로 리턴
print(int(3.5))
print(int('3'))

3

3

#int(x, radix) : radix 진수로 표현된 문자열 x를 10진수로 변환하여 리턴
print(int('11',2))
print(int('1A',16))

 

# instance(object, class) 입력으로 받은 인스턴스가 그 클래스의 인스턴스인지를 판단하여 참이면 True 리턴
# a 가 Person 클래스에 의해 생성된 인스턴스임을 확인
class Person : pass
a=Person() # 객체이름 , 클래스명 호출
isinstance(a, Person) # class에 의해 만들어진거면 참, 아니면 거짓 (a가 Person 을 이용한 객체인지 True, False 를 가린다.)

True

# 람다는 def 보다 간결하게 사용할 수 있음
sum = lambda a,b:a+b
sum(3,4)

7

#리스트 myList에 람다 함수 2개 추가
myList = [lambda a,b:a+b, lambda a,b:a*b]
print(myList[0](3,4))
print(myList[1](3,4))

7

12

# len(s) 은 입력값 s의 길이(요소의 전체 개수)를 리턴
print(len('python'))
print(len([1,2,3]))
print(len([1,'a']))

6

3

2

# list(s)는 반복 가능한 자료형 s를 입력받아 리스트로 만들어 리턴
print(list('python'))
list((1,2,3))

['p', 'y', 't', 'h', 'o', 'n']

[1, 2, 3]

 

# map(f, iterable)은 입력 받은 자료형의 각 요소가 f에 의해 수행된 결과를 묶어서 리턴
def two_times(x): return x*2 # 아래쪽에 있는 리스트의 각 요소가 대입되면서 순서대로 출력됨

print(list(map(two_times, [1,2,3,4]))) 
# two_times에다가 [1,2,3,4]를 연산해서 결과를 리스트로 프린트 해라 라는 의미(iterable(반복 의미))
print(list(map(lambda a:a*2, [1,2,3,4]))) 
# lambda 로 하면 a:a*2로 연산, 이 때 각각의 1,2,3,4 가 a에 대입되어서 리스트로 출력됨

[2, 4, 6, 8]

[2, 4, 6, 8]

# 최대 최소
print(max([1,2,3]))
print(max('python'))
print(min([1,2,3]))
print(min('python'))

3

y

1

h

 

oct(34) # 정수를 8진수 문자열로 바꾸어 리턴
# open(filename, [mode]) 파일 이름과 읽기 방법을 입력 받아 객체를 리턴
f.open('binary_file','rb')
#모드 부분이 생략 되면 기본값으로 읽기 모드인 r을 갖게 됨
fread=open('read_mode.txt','r')
fread=open('read_mode.txt')
#문자의 아스키코드 값을 리턴
ord('a')

97

#문자의 아스키코드 값을 리턴
ord('a')

16

#range()함수는 입력받은 숫자에 해당되는 범위의 값을 반복가능한 객체
print(list(range(5)))
print(list(range(5,10)))
print(list(range(1,10,2)))#1~10까지인데 간격이 2 남
print(list(range(0,-10,-1)))#0~9까지인데 간격이 -1 남

 

[0, 1, 2, 3, 4]

[5, 6, 7, 8, 9]

[1, 3, 5, 7, 9]

[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

 

print(sorted([3,1,2]))
print(sorted(['a','c','b']))

[1, 2, 3]

['a', 'b', 'c']

 

# str(object)은 문자열 형태로 객체를 변환하여 리턴
print(str(3))
print(str('hi'))
print(str('hi'.upper()))

3

hi

HI

+ Recent posts