본문 바로가기

Python

[Python] 2. 반복문(while, for), 함수(def), 1급 함수(def_firstclass)

#정리

#04while - 반복문 

#while (조건): (~continue) ~break뼈대로 작성한다.

 - while True: ~ if i==5: continue ~ if i==10: break

#do - while 은 없다.


#for - 반복문

#for (변수) ~  in  (범위)  뼈대로 작성한다.

 - range()를 이용해서 필요만큼 반복할 수 있다.

 - for i in range(10,20):
#다른 언어에서 사용되는 for문 형태는 사용하지 못한다.

 - for(;;) #error
#range()는 다양하게 작성할 수 있다.
 - print(range(10))
 - print(range(0,10))
 - print(range(0+1,10+1))

#list 배열 원소 갯수를 활용하여 foreach처럼 사용할 수 있다.
 - for item in lst : ~
#list 배열 인덱스를 활용하여 반복시킬 수 있다.

 - for index in range(len(lst)) : ~



#06def_function - 함수 

#def : function 역할을 한다고 선언하는 의미
** 함수의 4가지 형태 알아보기 **
<1. void - void  >

# 매개변수와 리턴이 모두 없는 형태
 - def aaa():
<2. void - return >
#함수의 리턴 타입을 선언할 필요가 없고, 아무 타입이나 리턴 가능하다.
def bbb(): ~ return 100
<3. para - void>
# 함수의 매개변수 타입을 선언할 필요가 없어, 아무 타입이나 받아준다.
 - def ccc(x): 

<4. para - return >
# 매개변수와 리턴이 모두 있는 형태
 - def ddd(x):  ~ return 123

//mission : 07함수 생성 연습

#para [11,22,33], return [110,220,330] - test04
 - lst2.append(x*10) # 배열 원소 활용할 때는 append( ) 적용 필요
#para 11,22,33 or 11,22,33,44 , return x - test05
  ** def test05(*args): # * : 여러 매개변수를 숫자를 정하지 않고 받겠다. (포인터 변수 아님)
 - (11,22,33) >> 소괄호로 감싸져있는 것을 tuple type이라고 한다.

 - args[i] = args[i]*10 #read only error >> tuple은 출력이 가능하지만, 값 변경은 불가하다

** 터미널에서  python3 >> dir(tuple) 명령어를 통해 사용가능한 함수를 볼 수 있다.




**할당연산("=") 우측에 오는 것을 리터럴(Literal)이라고 한다.

 

#08def_firstclass

#일급함수(first class)란, 함수 그대로의 사용 이외에 함수를 변수값(리터럴), 매개변수값(인자), 함수리턴값으로 사용할 수 있는 함수 형태를 말한다.

<1.argument value>

#함수(test01)의 매개변수 "x"을 콜하는 것으로 매개변수에 넣은 함수(fn_arg)를 실행시킬 수 있다.  
 - test01(fn_arg)
<2.return value>

#함수(test02) 안에 정의된 함수(fn_return)를 콜할 때는 ( )를 두번 붙여 안의 함수를 콜할 수 있다.
 - test02( )( )
<3.variable value>

#특정 변수(a)에 함수를 넣어 변수 명으로 해당 함수(fn_var)를 콜할 수 있다.
 - a = fn_var  >>  a( )

//mission : 08def_firstclass2  - 리턴이 1급 함수 생성 연습

#타입 선언이 없기 때문에, 여러가지 타입을 섞어서 입력 혹은 출력할 수 있다.

 

 

 

#04while - 반복문 

#while (조건): (~continue) ~break뼈대로 작성한다.

 - while True: ~ if i==5: continue ~ if i==10: break

#do - while 은 없다.

 

--예문 코드 보기--

더보기
#!/usr/bin/env python
# -*- coding: utf-8 -*-

print("Hello python")
print("---------------")
i=0
while True:
	print("{}:{}".format(i,"100"))
	if i==10: break
	i+=1
	
	if i==5: continue
	print("Hello python")

print("---------------")

while True:
	print("end....input[x]:")
	txt = input()
	if txt=="x": break
	
print("---------------")

 

 

 

-----------------------------------------------

# mission : 04while_score 

#학생 이름, 국어, 수학, 영어 성적을 받아 총점/평균/학점을 계산하는 반복 코드를 작성하시오.

 

--예문 코드 보기--

더보기
#!/usr/bin/env python
# -*- coding: utf-8 -*-

print("-- while score mission --")
while True:
    name=input("name:")
    kor=int(input("kor:"))
    eng=int(input("eng:"))
    math=int(input("math:"))

    total=kor+eng+math
    avg=total/3
    grade = 'A'

    if avg >= 90:
        grade = 'A'
    elif avg >= 80:
        grade = 'B'
    elif avg >= 70:
        grade = 'C'
    elif avg >= 60:
        grade = 'D'
    else:
        grade = 'F'

    print("name:{},kor:{},eng:{},math:{}".format(name,kor,eng,math))
    print("total:{}".format(total))
    print("avg:{:.2f}".format(avg))
    print("grade:{}".format(grade))

    print("---------------")
    print("end....input[x]:")
    txt = input()
    if txt=="x": break
    
print("---------------")

 

 


#for - 반복문

#for (변수) ~  in  (범위)  뼈대로 작성한다.

 - range()를 이용해서 필요만큼 반복할 수 있다.

 - for i in range(10,20):
#다른 언어에서 사용되는 for문 형태는 사용하지 못한다.

 - for(;;) #error
#range()는 다양하게 작성할 수 있다.
 - print(range(10))
 - print(range(0,10))
 - print(range(0+1,10+1))

#list 배열 원소 갯수를 활용하여 foreach처럼 사용할 수 있다.
 - for item in lst : ~
#list 배열 인덱스를 활용하여 반복시킬 수 있다.

 - for index in range(len(lst)) : ~

 

--예문 코드 보기--

더보기
#!/usr/bin/env python
# -*- coding: utf-8 -*-

print("---------------")
#for(;;) #error
#for .. in .. : #OK

#range()는 다양하게 작성할 수 있다.
print(range(10))
print(range(0,10))
print(range(0+1,10+1))
print(range(10,20))

#range()를 이용해서 필요만큼 반복할 수 있다.
for i in range(10):
	print(i,end=" ")
print()
print("---------------")

for i in range(10,20):
	print(i,end=" ")
print()


print("---------------")
#9*9=81 mission
for x in range(2,10):
	for i in range(1,10):
		print("{}*{}={}".format(x,i,x*i),end=" ")
	print()
	
	
print("---------------")
#list 형태의 배열 원소 갯수를 활용하여 foreach처럼 사용할 수 있다.
lst = [11,22,33]
for item in lst:
	print(item,end=" ")
	print()
	
#list 형태의 배열 인덱스를 활용하여 반복시킬 수 있다.
lst = [11,22,33]
for index in range(len(lst)):
	print(lst[index],end=" ")
	print()
	
print("-------mission--------")
lst = [11,22,33]
sum_lst = 0
for item in lst:
	sum_lst += item
print(sum_lst)

sum_lst = 0
for index in range(len(lst)):
	sum_lst += lst[index]
print(sum_lst)

 

 


#06def_function - 함수 

#def : function 역할을 한다고 선언하는 의미
** 함수의 4가지 형태 알아보기 **
<1. void - void  >

# 매개변수와 리턴이 모두 없는 형태
 - def aaa():
<2. void - return >
#함수의 리턴 타입을 선언할 필요가 없고, 아무 타입이나 리턴 가능하다.
def bbb(): ~ return 100
<3. para - void>
# 함수의 매개변수 타입을 선언할 필요가 없어, 아무 타입이나 받아준다.
 - def ccc(x): 

<4. para - return >
# 매개변수와 리턴이 모두 있는 형태
 - def ddd(x):  ~ return 123

 

--예문 코드 보기--

더보기
#!/usr/bin/env python
# -*- coding: utf-8 -*-

print("Hello python")
print("---------------")
#def : function 역할을 한다고 선언하는 의미
#함수의 4가지 형태 알아보기

print("-- void - void --")
def aaa():
	print("aaa()...")
	
#function call	
aaa()

print("-- void - return --")
#함수의 리턴 타입을 선언할 필요가 없고, 아무 타입이나 리턴 가능하다.
def bbb():
	print("bbb()...")
	return 100
b = bbb()
print(b)

print("-- para - void --")
#함수의 매개변수 타입을 선언할 필요가 없어, 아무 타입이나 받아준다.
def ccc(x): 
	print("ccc()...",x)
#둘 다 가능
ccc(888)
ccc("kim")

print("-- para - return --")
#매개변수와 리턴이 모두 있는 형태
def ddd(x): 
	print("ddd()...",x)
	return 123
d = ddd(999)
print(d)
d = ddd("lee")
print(d)

 

 

-----------------------------------------------

#mission : 07함수 생성 연습

#para [11,22,33], return [110,220,330] - test04
 - lst2.append(x*10) # 배열 원소 활용할 때는 append( ) 적용 필요
#para 11,22,33 or 11,22,33,44 , return x - test05
  ** def test05(*args): # * : 여러 매개변수를 숫자를 정하지 않고 받겠다. (포인터 변수 아님)
 - (11,22,33) >> 소괄호로 감싸져있는 것을 tuple type이라고 한다.

 - args[i] = args[i]*10 #read only error >> tuple은 출력이 가능하지만, 값 변경은 불가하다

** 터미널에서  python3 >> dir(tuple) 명령어를 통해 사용가능한 함수를 볼 수 있다.

#score function mission

 

 

--예문 코드 보기--

더보기
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print("---------------")

#para 11 22 33, return x - test01
print("----test01---")
def test01(lst):
	print("test01()",lst)
	
test01([11,22,33])

#para x, return "kim" - test02
print("---test02---")
def test02():
	return "kim"
	
print(test02())
	
#para x, return [11,22,33] - test03	
print("---test03---")
def test03():
	return [11,22,33]
	
print(test03())
for item in test03():
	print(item,end=" ")
print()

print("---------------")
#para [11,22,33], return [110,220,330] - test04
def test04(lst):
	print("test04()...",lst)
	#1. 배열 길이 활용
	#for i in range(len(lst)):
	#	lst[i] = lst[i]*10
	#2. 배열 원소 활용 - append() 적용 필요
	lst2 = []
	for x in lst:
		lst2.append(x*10)
	return lst2
	
lst = test04([11,22,33,44,55])
print(lst)

print("---------------")
#para 11,22,33 , return x - test05
#para 11,22,33,44 , return x - test05

def test05(*args): # * : 여러 매개변수를 숫자를 정하지 않고 받겠다.
	print("test05()...",args) #(11,22,33) >> 소괄호로 감싸져있는 것을 tuple type이라고 한다.
	#1. 배열 길이 활용
	for i in range(len(args)):
		print(args[i]) #tuple은 출력이 가능하지만, 값 변경은 불가하다.
		#args[i] = args[i]*10 #read only error 
	#2. 배열 원소 활용 
	for x in args:
		print(x)
	
test05(11,22,33)
test05(11,22,33,44)

print("---------------")

#py04while_score.py 내용을 함수로 정의
#def score_fn(): return x


def score_fn():
	name=input("name:")
	kor=int(input("kor:"))
	eng=int(input("eng:"))
	math=int(input("math:"))
    
	total=kor+eng+math
	avg=total/3
	grade = 'A'
    
	if avg >= 90:
		grade = 'A'
	elif avg >= 80:
		grade = 'B'
	elif avg >= 70:
		grade = 'C'
	elif avg >= 60:
		grade = 'D'
	else:
		grade = 'F'
        
	print("name:{},kor:{},eng:{},math:{}".format(name,kor,eng,math))
	print("total:{}".format(total))
	print("avg:{:.2f}".format(avg))
	print("grade:{}".format(grade))    
	
	    
while True:        
	print("---------------") 
	print("end....input[x]:")
	txt = input()
	if txt=="x": break    
	score_fn()

 


 

**할당연산("=") 우측에 오는 것을 리터럴(Literal)이라고 한다.

 

#08def_firstclass

#일급함수(first class)란, 함수 그대로의 사용 이외에 함수를 변수값(리터럴), 매개변수값(인자), 함수리턴값으로 사용할 수 있는 함수 형태를 말한다.

<1.argument value>

#함수(test01)의 매개변수 "x"을 콜하는 것으로 매개변수에 넣은 함수(fn_arg)를 실행시킬 수 있다.  
 - test01(fn_arg)
<2.return value>

#함수(test02) 안에 정의된 함수(fn_return)를 콜할 때는 ( )를 두번 붙여 안의 함수를 콜할 수 있다.
 - test02( )( )
<3.variable value>

#특정 변수(a)에 함수를 넣어 변수 명으로 해당 함수(fn_var)를 콜할 수 있다.
 - a = fn_var  >>  a( )

 

--예문 코드 보기--

더보기
#!/usr/bin/env python
# -*- coding: utf-8 -*-

#first class
#1.argument value
#2.return value
#3.variable value
print("-- 1.argument value ---")
#함수의 매개변수 "x"을 콜하는 것으로 매개 변수에 넣은 함수를 실행시킬 수 있다.  
def test01(x):
	x()

def fn_arg():
	print("test01~fn_arg()...")

test01(fn_arg)


print("-- 2.return value ---")
#함수 안에 정의된 함수를 콜할 때는 ()를 두번 붙여 안의 함수를 콜할 수 있다.
def test02():
	def fn_return():
		print("test02~fn_return()...")
	return fn_return
	
test02()()


print("-- 3.variable value ---")
#특정 변수에 함수를 넣어 변수 명으로 해당 함수를 콜할 수 있다.
def fn_var():
	print("test03~fn_var()...")
	
a = fn_var
a()

print("---------------")

 

 

-----------------------------------------------

#mission : 08def_firstclass2  - 리턴이 1급 함수 생성 연습

#타입 선언이 없기 때문에, 여러가지 타입을 섞어서 입력 혹은 출력할 수 있다.

 

--예문 코드 보기--

더보기
#!/usr/bin/env python
# -*- coding: utf-8 -*-

print("-- 1.argument value ---")
def test01(fn,x,y):
	print("test01()...",x,y)
	print("test02 name:", fn(3,4))
	
	return "kim"

def test02(x,y):
	print("test02()...",x,y)
	return "lee"

name = test01(test02,100,200)
print("test01 name:",name)


print("-- 2.return value ---")
#리턴 값이 있는 함수로 연습
def test03(a,b):
	print("test03()...",a,b)
	
	def test04(c,d):
		print("test04()...",c,d)
		return 100
		
	return test04

test03(5,"kim")(6,"lee")


print("-- 3.variable value ---")
#리턴 값이 있는 함수로 연습
def test05(i,j):
	print("test05()...",i,j)
	return "park"

name1 = test05
name2 = name1(7,"kim")
print("return name:",name2)

print("---------------")