Filter()
리스트의 요소 중 조건에 맞는 것만 골라 list 로 리턴
def flunk(s):
return s < 60 # T F 반환
score = [45,89,72,53,94]
for s in filter(flunk,score):
print("낙제점수:",s)
# 낙제점수: 45
# 낙제점수: 53
Map()
리스트를 변환 함수로 처리한 후 그 결과를 list로 리턴
map(function_name, list_data)
def half(s):
return s/2
data = [45,89,72,53,94]
# map은 주소값을 출력하는 것이기 때문에 원소를 보고 싶으면 list 에 넣어야함
# print(list(map(half,data)))
for d in map(half,data):
print(d, end=', ')
# 22.5, 44.5, 36.0, 26.5, 47.0,
Reduce()
리스트를 집계함수로 처리 후 그 결과를 단일의 값으로 리턴
집계함수는 두개의 인자를 받는다(누적자, 현재값)
reduce(function_name, list_data)
from functools import reduce
# import 필요
def sum(a,b): # reduce(누적자, 현재 새로 들어온 값)
return a + b
# a = a+b 와 같다.
score = [45,89,72,53,94]
print(reduce(sum,score)) # 353
alphabat = ['H','e','l','l','o',' ','P','y','t','h','o','n']
print(reduce(sum,alphabat)) # join과 같다
# Hello Python
Lambda()
단일문으로 표현되는 익명 함수. (그러나 코드의 직관성이 떨어지는 편임)
lambda 매개변수 : 리턴할 수식
def myfunc(x,y):
return x+y
result = myfunc(10,20)
print(result) # 30
result2 = lambda x,y : x+y # 주소값을 가짐
print(result2(10,20)) # 30
a = [1,2,3,4,5]
list(map(lambda x : x**2, a)) # a의 원소들을 하나씩 꺼내와 x에 넣어줌
# [1, 4, 9, 16, 25]
x = [1,2,3,4,5]
y = [10,20,30,40,50]
list(map(lambda x1,y1 : x1+y1, x,y))
# [11, 22, 33, 44, 55]
x = [1,2,3,4,5]
reduce(lambda a,b : a+b, x)
# 15
[문제] 1~ 10 사이의 연속된 값을 함수를 이용하여 생성한 후 map과 lambda를 이용하여 짝수에 해당하는 값만 제곱한 값만 제곱하고 홀수는 원래 원소로 갖는 리스트를 생성하세요.
# map(함수이름, 연속형 데이터)
# lambda 매개변수: 리턴 식
print(list(map(lambda x : x**2 if not x%2 else x , range(1,11))))
# [1, 4, 3, 16, 5, 36, 7, 64, 9, 100]
내부 함수 (지역 함수)
파이썬에서는 함수를 값으로 처리한다. 함수를 다른 변수에 대입할 수 있다. 인수로 전달 가능
내부함수 : 함수안에 정의된 함수. 코드 중복을 피하기 위해 주로 사용한다.
closure : 함수안에 정의된 다른 함수. 내부함수는 외부에서 호출할 수 없다.
# 내부함수
def outer(a,b):
def inner(c,d):
return c+d
return inner(a,b)
print(outer(4,7)) # 11
docstring
함수에 대한 설명문. help() 와 __doc__ 를 이용해 출력한다.
def echo(anything):
'echo retutn its input argument'
return anything
echo('Hello')
echo.__doc__ # 가볍게
# 'echo retutn its input argument'
help(echo) # 세부적인 내용까지
# Help on function echo in module __main__:
# echo(anything)
# echo retutn its input argument
표준 모듈
import
- 모듈은 파이썬 코드를 작성해놓은 스크립트 파일. 안에는 함수, 변수, 클래스 등이 정의되어 있다.
- 외부의 모듈을 가져와 사용할때는 import명령을 사용하며 호출할 때에는 함수 앞에 모듈명을 붙인다.
- 특정 함수나 클래스만 import 하는 경우에는 ' from 모듈 import 함수명, 클래스명 작성 '
- 모듈의 모든 함수를 불러올때는 함수명 자리에 * 문자를 사용한다.
- 모듈의 이름이 길고 복잡할때는 as 다음에 별칭 지정이 가능하다. ' import math as m'
time 모듈
날짜와 시간 관련 기능 제공
import time
t= time.time()
print(t) # 초단위의 시간
print(time.ctime()) # 초단위를 -> 날짜 시간 형식으로 출력
# 1699120823.8401725
# Sun Nov 5 03:00:23 2023
import time
start = time.time()
sum = 0
for i in range(1,100000001): # 1~1억
sum += i
end = time.time()
print("1~1억까지 합계 계산 총 소요시간: %.2f초" %(end- start))
# 1~1억까지 합계 계산 총 소요시간: 8.11초
import time
# print(time.localtime()) # 지역 정보 기반 시간에 대한 정보
now = time.localtime() # 로컬타임 객체
print(f"{now.tm_year}년 {now.tm_mon}월 {now.tm_mday}일")
print(f"{now.tm_hour}시 {now.tm_min}분 {now.tm_sec}초")
# 2023년 11월 5일
# 3시 1분 27초
import time
print ('이 문장은')
time.sleep(2) # 매개변수 전달된 초 만큼 프로그램의 실행을 잠시 중단
print('2초 단위로')
time.sleep(2)
print('출력됩니다.')
random 모듈
난수를 생성하는 기능 제공
import random
# 컴퓨터의 난수는 컴퓨터 시스템 시간을 기준(seed value)으로 발생
# 따라서 기준값을 고정해 놓으면 항상 동일한 난수 값이 발생된다.
random.seed(0)
for i in range(5):
print(random.randint(1,10)) # end 포함
import random
food= ['짜장면',"짬뽕","탕수육","군만두"]
random.shuffle(food) # 그냥 섞기만함. 섞은 결과를 반환하지 않는다ㅏ
print(food)
import random
food= ['짜장면',"짬뽕","탕수육","군만두"]
print(random.choice(food)) # 1개를 랜덤으로 뽑음
[문제] 로또 번호 생성기
1 ~ 45 사이의 숫자 6개를 랜덤하게 뽑기. 단, 숫자뽑을때 중복된 숫자는 활용할 수 없다.
결과는 오름차순으로 정렬해서 출력한다.
import random
#1)
lotto = set() # 원소의 중복을 허용하지 않음
while True:
lotto.add(random.randint(1,45))
if len(lotto) == 6: break
print(sorted(lotto,reverse=False))
print(sorted(list(lotto))) # 정렬된 결과를 반환
import random
# 2)
lotto = list()
while True:
num = random.randint(1,45)
if num not in lotto:
lotto.append(num)
if len(lotto) ==6: break
lotto.sort() # 정렬된 결과를 반환하지 않는다. 정렬은 해줌
print(lotto)
import random
# 3) 제일 간단
lotto = random.sample(range(1,46),6)
print(sorted(lotto))
[문제] 숫자 맞추기 게임
1 ~ 100 사이의 난수를 맞추는 게임. 입력값과 생성값을 비교하여 어떤 값이 더 큰지 힌트를 알려준다.
정답을 맞추면 시도 횟수 출력과 함께 게임을 종료한다.
import random
random = random.randint(1,100)
cnt = 0
while True:
num = int(input("입력(00 종료):"))
cnt+=1
if num > random:
print(f"{num} > random : 더 작은 숫자를 입력")
elif num < random:
print(f"{num} < random: 더 큰 숫자 입력")
else:
print("정답! 횟수가",cnt,"번 반복되었습니다.")
break
# 교수님
import random
num= random.randint(1,100)
cnt = 0
while True:
guess = int(input("숫자를 입력하세요:"))
cnt += 1
if num == guess:
print(f"{cnt}번 만에 맞췄습니다.")
break
elif guess > num:
print("입력한 숫자보다 더 작습니다")
else:
print("입력한 숫자보다 더 큽니다")
sys 모듈
파이썬 해석기가 실행되는 환경과 해석기의 여러기능을 조회하고 관리하는 모듈
sys.exit(0) : 프로그램 강제 종료
'국비 교육 > 파이썬' 카테고리의 다른 글
[파이썬] 예외(Exception) (0) | 2023.12.28 |
---|---|
[파이썬] File I/O , File 과 Directory (0) | 2023.11.05 |
[파이썬] 함수 -1 (0) | 2023.11.05 |
[파이썬] Comprehension, zip(), enumerate() (0) | 2023.11.05 |