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
':: IT > python' 카테고리의 다른 글
20200316 python 판다스(pandas) 기초 (시리즈와 데이터프레임) (0) | 2020.03.20 |
---|---|
20200320 python (전처리_시계열데이터) (0) | 2020.03.20 |
20200310 python (함수, 사용자 입출력, 파일 읽고 쓰기, 클래스, 상속 ,오버라이딩, 오버로딩) (0) | 2020.03.19 |
20200319 python pandas(데이터 전처리) (0) | 2020.03.19 |
20200308~20200309 python 기초 (0) | 2020.03.19 |