반복문(while,for) / 일반함수 / 람다 / map

2022. 10. 8. 15:09Dev.Program/Python & R

728x90

======== test3.py

제어문 - 반복문 ( while, for … )

< while 문 >

  • 들여쓰기 띄우고 반복할 문장 적기

 

< break >

  • 원래 무한반복 되어야 하지만 break 구문을 통해 반복문을 빠져나온다.

 

< continue >

  • 1 ~ 10 다 나옴
  • 추가 하면
  • 3의 배수를 제외하고 나옴!

 

< for 문 >

for 변수 in 리스트(튜플, 문자열):
    반복할 명령1
    반복할 명령2
  • 기본 문법

 

> 점수 합계 구하기

li = [85, 95, 90, 80, 75]
sum = 0 # 합계 저장할 변수
for i in li:
  sum += i

print("항목 개수:", len(li))
print("점수 합계:", sum)
print("점수 평균:", sum/len(li))

 

  • 이런식으로 담아올 수도 있다!

 

< range(시작번호, 끝번호, 증가값) >

> 구구단 2단 출력해보기

dan = 2
for i in range(1, 10, 1):
  print(dan, "*", i, "=", dan*i)

 

for i in range(2, 10, 1):
  print("<", i, "단 >")
  for j in range(1, 10, 1):
      print(i, "*", j, "=", i*j)
  • 중복 for문도 가능!

 

< 한줄 for문 >

# 한줄 for
# [반복 실행문 for 변수 in 리스트]
a = [1, 2, 3, 4]
result = [i*3 for i in a]
print(result)
  • result 가 리스트 형태로 출력됨!

 

# [조건에 만족하는 반복실행문 for 변수 in 리스트 if 조건]
# 2의 배수를 구해서 i*3
result = [i*3 for i in a if i % 2 == 0]
print(result)

 

# [반복실행문 for 변수1 in 리스트1 for 변수2 in 리스트2]
# [반복실행문 for 변수1 in 리스트1 if 조건1 for 변수2 in 리스트2 if 조건2]
# 구구단 결과
result = []
result = [dan*i for dan in range(2, 10, 1) for i in range(1, 10, 1)]
print(result)

 

 

======== test4.py

< 일반함수 >

< 기본문법 >

  • 탭이 중요! 탭만큼 띄워져야 인식함

 

# 두 수를 받아서 사칙연산 출력하는 함수
def cal(a, b):
  print(a + b)
  print(a - b)
  print(a * b)
  print(a / b)

# 함수 호출
print(cal(1,2))

 

eng = [90, 80, 70, 60, 50]
# 점수를 받아 합을 구해서 리턴하는 함수 sum2(배열받는 변수)
def sum2(eng2):
  sum = 0
  for s in eng2:
      sum += s
  return sum

# 함수 호출
print(sum2(eng))

 

< 여러 개의 입력값을 받는 함수 >

> 파이썬에만 있는 기능

# 함수의 매개변수 *변수 - 받는 값에 따른 튜플(값을 바꿀 수 없는 배열) 변수
def sum_many(*a):
  # print(a)
  sum = 0
  for b in a:
      sum += b
  return sum

# 함수 호출
print(sum_many(1,2,3))
print(sum_many(1,2,3,4,5,6))
print(sum_many(1,2,3,4,5,6,7,8,9,10))

 

< 함수 초기값 설정 >

# 함수 안에 매개변수에 초기값 설정
def myfun(name, old, man = True):
  print(name)
  print(old)
  print(man)
# 초기값 있으면 함수호출시 생력가능(마지막 인수만 가능)
myfun("홍길동", 20, True)
myfun("이순신", 30)
  • 이순신은 마지막 값을 안넣었는데 초기값인 True 가 나옴

⇒ 마지막 값만 생략이 가능하다! (중간 값은 생략할 수 없음(

 

< ★람다(lambda)함수 >

def sum(a,b):
  return a+b

print(sum(10,20))
  • 원래 우리는 이렇게 쓰는데 이걸 람다함수로 바꿔보자

 

# 람다 lambda 함수 : 한줄 함수
# 함수이름 = lambda 매개변수, 매개변수 : 실행문

sumlam = lambda a,b: a+b
print(sumlam(10,20))
  • 똑같은 결과값 출력됨!

 

# 람다 함수 square() 2**3 변수**변수 두 수를 받아서 2의 3승을 구해서 리턴
square = lambda a,b: a**b
print(square(2,3))

 

< 람다함수를 리스트에 넣기 >

# mylist = [람다함수, 람다함수]
# mylist = [두 수를 더하는 람다함수, 두 수를 곱하는 람다함수]
mylist = [lambda a,b:a+b, lambda a,b:a*b]
print(mylist[0](3,4))
print(mylist[1](4,5))
  • mylist[0]은 +를 수행하고, mylist[1]은 *를 수행함!

< ★map 함수 >

  • 파이썬 내장함수

< 기본 문법 >

map(람다함수, 리트스자료)

> two_times 함수 정의 : 일반함수로 일단 만들어보기

# [1, 2, 3, 4] * 2 => [2, 4, 6, 8]
# 함수 two_times(리스트변수)
# 리스트 변수 result=[]
# for
# result 리스트 값 추가 result.append(값*2)
# 리턴 result
def two_times(li):
  result = []
  for i in li:
      result.append(i*2)
  return result
print(two_times([2, 4, 6, 8]))
  • 이걸 map 함수를 이용하면 한줄로 코드가 간단해짐

> two_times2 함수 정의 : 하나의 값을 받아서 받은 값에 *2 해서 그 값을 리턴

def two_times2(a):
   return a*2
print(two_times2(3))
  • 일반 함수

> two_times3 람다 함수 정의 : 하나의 값을 받아서 받은 값에 *2 해서 그 값을 리턴

two_times3 = lambda a:a*2
print(two_times3(3))
  • 람다 함수
  • 결과는 동일하다

 

> map 함수를 이용해서 만들어보자

# map(람다함수, 리트스자료) => 결과 리스트
li1 = list(map(lambda a:a*2, [1,2,3,4]))
li2 = list(map(two_times2, [1,2,3,4]))
li3 = list(map(two_times3, [1,2,3,4]))
print(li1)
print(li2)
print(li3)
  • 코드가 한줄로 간단해진다! 결과는 전부 동일함
  • 보통은 li1 = list(map(lambda a:a*2, [1,2,3,4])) 이 형태를 가장 많이 씀!

 

< filter 함수 >

  • 파이썬의 내장함수
  • 배열에서 내가 원하는 부분만 걸러서 보여줌

< 기본 문법 >

filter(조건람다함수, 리스트자료)
  • 조건이 있는 람다함수를 받음

 

# filter 함수 : 배열에서 내가 원하는 부분만 걸러서 보여줌
# filter(조건람다함수, 리스트자료) => 함수를 통해 결과 리스트
# [1, -3, 2, 0, -5, 6] => 0보다 큰 값 찾기 [1, 2, 6]
# pos 일반 함수
def pos(x):
   return x > 0
# pos2 람다함수 : 하나의 값을 받아서 0보다 큰 값 리턴
pos2 = lambda x:x>0

 

> 필터함수로 만들기

li1 = list(filter(lambda x:x>0, [1, -3, 2, 0, -5, 6]))
li2 = list(filter(pos, [1, -3, 2, 0, -5, 6]))
li3 = list(filter(pos2, [1, -3, 2, 0, -5, 6]))
print(li1)
print(li2)
print(li3)
  • 결과값은 전부 동일함!
  • 이것도 보통 li1 = list(filter(lambda x:x>0, [1, -3, 2, 0, -5, 6])) 이 형태를 많이 씀

 

< 그 외에 내장함수 >

len()

max()

min()

type()

int()

abs() 절대값

divmod()몫과나머지

pow(2, 3) 2의 3승

range()

 

728x90