제어문
if문
자바와 다르게 {}가 없고 탭과 스페이스로 라인을 맞추어 주어야 에러가 안생긴다.
"돈이 있으면 택시를 타고, 돈이 없으면 걸어 간다"를 작성해 보자
Ex01.if01
money = 1
if money:
print('택시 타고 가라')
else:
print('걸어 가라')
print('끝')
money = 1
if money:
print('택시 타고 가라')
else:
print('걸어 가라')
print('끝')
위와 같이 줄 간격을 안맞추고 삐뚤빼뚤하게 하면 에러가 생긴다.
if문의 기본 구조
들여쓰기
조건문
비교연산자
and, or, not
&&, ||, != 이 아니라 and, or, not 문자 그대로 쓴다.
money = 2000
card = 1
if money >= 3000 or card:
print("택시를 타고 가라")
else:
print("걸어 가라")
x in s, x not in s - 문자 검색 기능
print('a' in ('a', 'b', 'c'))
print('j' not in ('python'))
다양한 조건을 판단하는 elif - 자바에서는 else if
pocket = ['paper', 'cellphone']
card = 1
if 'money' in pocket:
print("택시를 타고 가라")
elif card:
print("택시를 타고 가라")
else:
print("걸어 가라")
학점 출력기 구현
grade = 50
if grade >= 90:
print("A 학점")
elif grade >= 80:
print("B 학점")
elif grade >= 70:
print("C 학점")
elif grade >= 60:
print("D 학점")
else:
print("F 학점")
조건부 표현식
score = 80
message = ""
if score >= 60:
message = "success"
else:
message = "failure"
print(message)
score = 80
message = ""
if score >= 60:
message = "success"
else:
message = "failure"
print(message)
message = "success" if score >= 60 else "failure"
print(message)
while문
treeHit = 0
while treeHit < 10:
treeHit = treeHit + 1
print("나무를 %d번 찍었습니다." % treeHit)
if treeHit == 10:
print("나무 넘어갑니다")
while문 직접 만들기
while문 강제로 빠져나가기 = java break
break문 이용해 자판기 작동 과정 만들기
while문의 맨 처음으로 돌아가기
무한 루프 - 채팅시스템(소켓) : 서버 만들때 자주 사용(무한대기때문)
for문
예제 이용해 for문 이해하기
1. 전형적인 for문
test_list = ['one', 'two', 'three']
for i in test_list:
print(i)
['one', 'two', 'three']라는 리스트의 첫 번째 요소인 'one'이 먼저 i 변수에 대입된 후 print(i)라는 문장을 수행한다. 다음에 'two'라는 두 번째 요소가 i 변수에 대입된 후 print(i) 문장을 수행하고 리스트의 마지막 요소까지 이것을 반복한다.
2. 다양한 for문의 사용
a = [(1, 2), (3, 4), (5, 6)]
for (first, last) in a:
print(first + last)
3. for문의 응용
marks = [90, 25, 67, 45, 80]
number = 0
for mark in marks:
number = number + 1
if mark >= 60:
print("%d번 학생은 합격입니다." % number)
else:
print("%d번 학생은 불합격입니다." % number)
각각의 학생에게 번호를 붙여 주기 위해 number라는 변수를 이용하였다. 점수 리스트인 marks에서 차례로 점수를 꺼내어 mark라는 변수에 대입하고 for문 안의 문장들을 수행하게 된다. 우선 for문이 한 번씩 수행될 때마다 number는 1씩 증가한다.
이 프로그램을 실행하면 mark가 60 이상일 때 합격 메시지를 출력하고 60을 넘지 않을 때 불합격 메시지를 출력한다.
for문과 continue
for와 함께 자주 사용하는 range 함수
range 함수의 예시 살펴보기
sum = 0
for i in range(1, 11):
sum = sum + i
print(sum)
range(1, 11)은 숫자 1부터 10까지(1 이상 11 미만)의 숫자를 데이터로 갖는 객체이다. 따라서 위의 예에서 i 변수에 리스트의 숫자들이 1부터 10까지 하나씩 차례로 대입되면서 sum = sum + i라는 문장을 반복적으로 수행하고 sum은 최종적으로 55가 된다.
또한 우리가 앞서 살펴보았던 60점 이상이면 합격이라는 문장을 출력하는 예제도 range 함수를 이용해서 바꿀 수 있다. 다음을 보자.
marks = [90, 25, 67, 45, 80]
for number in range(len(marks)):
if marks[number] < 60: continue
print("%d번 학생 축하합니다. 합격입니다." % (number + 1))
여기서 len이라는 함수가 처음 나왔다. len 함수는 리스트 내 요소의 개수를 돌려주는 함수이다. 따라서 len(marks)는 5가 될 것이고 range(len(marks))는 range(5)가 될 것이다. number 변수에는 차례로 0부터 4까지의 숫자가 대입될 것이고, marks[number]는 차례대로 90, 25, 67, 45, 80이라는 값을 갖게 된다. 마지막 number + 1을 해줘서 0부터 시작되는 특성상 1번이 0이 되므로 +1을 해줘서 이걸 보완해줘 보는 사람으로 하여금 정확한 순번을 출력해준다.
for와 range를 이용한 구구단
for와 range 함수를 이용하여 구구단을 출력할 수 있다. 만들어 보자
for i in range(1, 6):
# 엔터키 포함
print('{0}단\t'.format(i), end='')
for j in range(1, 10):
print('{0}X{1}={2}\t'.format(i, j, (i*j)), end='')
print('')
end가 뒤에 엔터키를 없애라는 뜻이다 왜냐하면 for문을 쓰면 맨 뒤에 자동으로 엔터키가 포함되어 있기 때문이다.
end를 응용하면 원하는 글자를 넣을 수 있다.
리스트 안에 for문 포함하기
a = [1, 2, 3, 4]
result = []
for num in a:
result.append(num*3)
print(result)
result = [num * 3 for num in a]
print(result)
a = [1, 2, 3, 4]
result = []
for num in a:
result.append(num*3)
print(result)
result = [num * 3 for num in a]
print(result)
result = [num * 3 for num in a if num % 2 == 0]
print(result)
result = [x*y for x in range(2, 10)
for y in range(1,10)]
print(result)
구구단 2단부터 9단까지의 출력결과들을 모두 출력
지금껏 우리는 프로그램의 흐름을 제어하는 if문, while문, for문에 대해서 알아보았다. 아마도 여러분은 while문과 for문을 보면서 2가지가 아주 비슷하다는 느낌을 받았을 것이다. 실제로 for문을 사용한 부분을 while문으로 바꿀 수 있는 경우도 많고, while문을 for문으로 바꾸어서 사용할 수 있는 경우도 많다.
함수
함수를 설명하기 전에 믹서기를 생각해 보자. 우리는 믹서기에 과일을 넣는다. 그리고 믹서기를 이용해서 과일을 갈아 과일 주스를 만든다. 우리가 믹서기에 넣는 과일은 "입력"이 되고 과일 주스는 "출력(결과값)"이 된다.
그렇다면 믹서기는 무엇인가?
(믹서기는 과일을 입력받아 주스를 출력하는 함수와 같다.)
우리가 배우려는 함수가 바로 믹서기와 비슷하다. 입력값을 가지고 어떤 일을 수행한 다음에 그 결과물을 내어놓는 것, 이것이 바로 함수가 하는 일이다. 우리는 어려서부터 함수에 대해 공부했지만 함수에 관해 깊이 생각해 본 적은 별로 없다. 예를 들어 y = 2x + 3도 함수다. 하지만 이를 수학 시간에 배운 직선 그래프로만 알고 있지 x에 어떤 값을 넣었을 때 어떤 변화에의해서 y 값이 나오는지 그 과정에 대해서는 별로 관심을 두지 않았을 것이다.
이제 우리는 함수에 대해서 조금 더 생각해 보는 시간을 가져야 한다. 프로그래밍에 있어서 함수는 정말 중요하기 때문이다. 자, 이제 파이썬 함수의 세계로 깊이 들어가 보자.
함수를 사용하는 이유
프로그래밍을 하다 보면 똑같은 내용을 반복해서 작성하고 있는 자신을 발견할 때가 종종 있다. 이때가 바로 함수가 필요한 때이다. 즉, 반복되는 부분이 있을 경우 "반복적으로 사용되는 가치 있는 부분"을 한 뭉치로 묶어서 "어떤 입력값을 주었을 때 어떤 결과값을 돌려준다"라는식의 함수로 작성하는 것이 현명하다.
함수를 사용하는 또 다른 이유는 자신이 만든 프로그램을 함수화하면 프로그램의 흐름을 일목요연하게 볼 수 있기 때문이다. 마치 공장에서 원재료가 여러 공정을 거쳐 하나의 상품이되는 것처럼 프로그램에서도 입력한 값이 여러 함수들을 거치면서 원하는 결과값을 내는 것을 볼 수 있다. 이렇게 되면 프로그램의 흐름도 잘 파악할 수 있고 에러가 어디에서 나는지도 금방 알아차릴 수 있다. 함수를 잘 이용하고 함수를 적절하게 만들 줄 아는 사람이 능력 있는 프로그래머이다.
파이썬 함수의 구조
입력값과 결과값에 따른 함수의 형태
입력값이 없는 함수
결과값이 없는 함수
a의 값은 None이다. None이란 거짓을 나타내는 자료형이라고 언급한 적이 있다. sum 함수처럼 결과값이 없을 때 a = sum(3, 4)처럼 쓰게 되면 함수 sum은 리턴값으로 a 변수에 None을 돌려준다. 이것을 가지고 결과값이 있다고 생각하면 곤란하다.
입력값도 결과값도 없는 함수
Ex01.func01
def func0():
pass
def func1():
print('Hello Function')
def func2(a, b):
print('a : {0}'.format(a))
print('b : {0}'.format(b))
func1()
func2(10, 20)
매개변수 지정하여 호출하기
def func0():
pass
def func1():
print('Hello Function')
def func2(a, b):
print('a : {0}'.format(a))
print('b : {0}'.format(b))
def func3(a, b):
return a + b
func1()
func2(10, 20)
r = func3(20, 30)
print(r)
def func0():
pass
def func1():
print('Hello Function')
def func2(a, b):
print('a : {0}'.format(a))
print('b : {0}'.format(b))
def func3(a, b):
return a + b
func1()
func2(10, 20)
func2(a=10, b=20)
func2(b=10, a=20)
r = func3(20, 30)
print(r)
입력값이 몇 개가 될지 모를 때는 어떻게 하나?
여러 개의 입력값을 받는 함수 만들기 - *는 c의 포인터
def sum_many(*args):
sum = 0
for i in args:
sum = sum + i
return sum
print('sum : {0}'.format(sum_many(1, 2)))
print('sum : {0}'.format(sum_many(10, 20, 30)))
def sum_mul(choice, *args):
if choice == 'sum':
result = 0
for i in args:
result = result + i
elif choice == 'mul':
result = 1
for i in args:
result = result * i
return result
result = sum_mul('sum', 1,2,3,4,5)
print(result)
result = sum_mul('mul', 1,2,3,4,5)
print(result)
def func(**kwargs):
print(kwargs)
func(a=1)
def func(**kwargs):
print(kwargs)
func(a=1)
func(name='dr', age=3)
def func(**kwargs):
print(kwargs)
func(a=1)
func(name='dr', age=3)
def func2(*args, **kwargs):
print(args)
print(kwargs)
func2(1, 2, 3, name='foo', age=10)
값만 있으면 튜플로 들어가서 args이고 인자와 값이 있으면 dictionary로 들어가서 kwargs로 들어간다.
자바와 다르게 변수의 이름을 내가 지정해 줄 수 있는 특징이 있다.
함수의 결과값은 언제나 하나이다 - 리턴값이 여러개 가능(튜플)
def sum_end_mul(a, b):
return a+b, a*b
result = sum_end_mul(10, 20)
print(result)
def sum_end_mul(a, b):
return a+b, a*b
result = sum_end_mul(10, 20)
print(result[0])
print(result[1])
def say_nick(nick):
if nick == '바보':
return
print('나의 별명은 %s 입니다.' % nick)
say_nick('야호')
say_nick('바보')
매개변수에 초깃값 미리 설정하기
def say_myself(name, old, man=True):
print('나의 이름은 %s 입니다.' % name)
print('나이는 %d살입니다.' % old)
if man:
print('남자입니다.')
else:
print('여자입니다.')
say_myself('박응용', 27)
say_myself('박응용', 27, True)
say_myself('박응선', 27, False)
함수 매개변수에 초깃값을 설정할 때 주의할 사항
함수 안에서 선언된 변수의 효력 범위
함수 안에서 함수 밖의 변수를 변경하는 법
1. return 이용하기
2. global 명령어 이용하기
# 전역변수
a = 1
def vartest(a):
# 지역변수 a
a = a + 1
vartest(a)
print(a)
print(a)는 vartest(a)안이 아닌 밖의 a인 즉 1을 찍게 되는 것이라 출력이 1이다
# 전역변수
a = 1
def vartest(a):
# 지역변수 a
a = a + 1
print(a)
vartest(a)
print(a)
지역변수 a를 출력하면 2가 나오는 것을 확인할 수 있다.
a = 1
def vartest():
# 지역변수 a
a = a + 1
print('a : {0}'.format(a))
vartest()
print(a)
# 전역변수
a = 1
def vartest(a):
# 지역변수 a
a = a + 1
print('a : {0}'.format(a))
vartest(10)
print(a)
# 전역변수
a = 1
def vartest():
# 지역변수 a
global a
a = a + 1
print('a : {0}'.format(a))
vartest()
print(a)
lambda = java 익명함수
sum = lambda a, b: a+b
print(sum(10, 20))
함수같이 쓸 수 있는 기능
sum = lambda a, b: a+b
print(sum(10, 20))
myfunc = [lambda a, b: a+b, lambda a, b: a*b]
print(myfunc)
함수로 선언되있다고 위와 같이 출력된다.
sum = lambda a, b: a+b
print(sum(10, 20))
# 일급 함수 - 변수에 할당 할 수 있다.
myfunc = [lambda a, b: a+b, lambda a, b: a*b]
print(myfunc)
print(myfunc[0](3,4))
print(myfunc[1](3,4))
일급 함수 - 변수에 할당 할 수 있다.(현대 언어는 대부분 일급함수이다)
'Web & Mobile > Python' 카테고리의 다른 글
Lecture 85 - Python(6) 패키지, 내시스템정보확인, 시간, 날짜, webbrowser (0) | 2019.07.26 |
---|---|
Lecture 84 - Python(5) 클래스와 객체, 모듈 (0) | 2019.07.25 |
Lecture 83 - Python(4) 사용자 입력과 출력, 주민번호유효검사, 파일읽고쓰기, 내장함수 (0) | 2019.07.24 |
Lecture 81 - Python(2) 숫자형, 문자열, 이스케이프 코드, 인덱싱, 슬라이싱, 포매팅, 문자열 관련 함수, 리스트, 튜플, 딕셔너리 (0) | 2019.07.22 |
Lecture 80 - Python(1) 파이썬 기초, Django, 파이썬 Eclipse에서 설치법 (0) | 2019.07.19 |
댓글