IF문
if 조건문:
수행할_문장1
수행할_문장2
...
else:
수행할_문장A
수행할_문장B
...
들여쓰기로 구분이 되어짐
# indent_error.py
money = True
if money:
print("택시를")
print("타고") # 들여쓰기가 안되면 오류가 난다.
print("가라")
# indent_error.py
money = True
if money:
print("택시를")
print("타고")
print("가라")
# 들여쓰기를 할 경우
# 택시를
# 타고
# 가라 가 출력된다.
특히 조건문은 : 을 잊지않도록 하자
조건문이란?
- 조건문이란 참/거짓을 판단하는 문장이다.
비교연산자
money = 2000
if money >= 3000:
print("택시를 타고가라")
else:
print("걸어가라") #현재는 2000원이 있기때문에 False가 출력되며, 걸어가라고 표현된다.
and, or, not
money = 2800
card = True
if money >= 3000 or card:
print("택시를 타고가라")
else:
print("걸어가라")
# 조건이 두개 주어졌으며, 3000원 이상이 있거나 카드가 있다면 택시를 타고가라가 출력되고,
# 3000원이 없거나, 카드가 없다면 걸어가라가 출력된다.
in, not in
쉽게 이야기해서 안에 포함되어있냐, 아니냐에 대해 물어보는 조건문이다.
in은 문자가 문자열에 포함되어있으면 'True'를 출력해주고, 포함되어있지않으면 'False'를 출력해준다.
not in은 문자가 문자열에 포함되어있으면 'False'를 출력해주고, 포함되어있지않으면 'True'를 출력해준다.
1 in [1, 2, 3]
True #1이 리스트안에 포함되어있는가? 에 대한부분이기때문에 포함되어있어 True가 출력되고
1 not in [1, 2, 3]
False #1이 리스트안에 포함되어있지않은가? 에 대한부분이기때문에 포함되어있어 False가 출력된다
'a' in ('a', 'b', 'c')
True # 포함됨
'j' not in 'python'
True # 포함되지않음
'p' not in 'python'
False # 포함됨
'p ' not in 'python'
True # 포함되지않음, 공백도 반영된다.
응용
pocket = ['paper', 'cellphone', 'money']
if 'money' in pocket: #money가 포함되어있기때문에
print("택시를 타고 가라") # 택시를 타고가라가 출력된다.
else:
print("걸어가라")
pocket = ['paper', 'cellphone', 'money']
if 'money' not in pocket:
pass #조건문을 패스할수 있는데, money가 포함되어있으나 not in 명령어이기때문에
else:
print("걸어가라") # 걸어가라가 출력된다.
다양한 조건을 판단하는 elif (다중조건문)
pocket = ['paper', 'cellphone']
card = True
if 'money' in pocket: #돈이 있으면 택시를 타고가라
print("택시를 타고가라")
elif card: #카드가 있으면 택시를 타고가라
print("택시를 타고가라")
else: # 두 조건 다 아니라면 걸어가라
print("걸어가라")
# 때문에 위 조건은 카드가 있기때문에 택시를 타고가라가 출력된다.
if 조건문:
수행할_문장1
수행할_문장2
...
elif 조건문:
수행할_문장1
수행할_문장2
...
elif 조건문:
수행할_문장1
수행할_문장2
...
...
else:
수행할_문장1
수행할_문장2
...
로 다중 조건을 걸어줄 수 있다.
조건부 표현식
message = "success" if score >= 60 else "failure"
# 참을 먼저 작성해주고, 조건부, 그다음 거짓을 작성해준다.
변수 = 조건문이_참인_경우의_값 if 조건문 else 조건문이_거짓인_경우의_값
조건부 표현식은 한줄로 표현되어 가독성이 유리하고, 활용성이 좋다.
반복문(While문)
문장을 반복적으로 사용해야 할 경우 While문을 쓴다. 그래서 While을 반복문이라고 한다.
아래 예시가 어떻게 진행되는지 표현되었는데, 나는 VSCODE 디버깅으로
하나하나 확인하는게 더 직관적으로 이해되었다.
treeHit = 0 # 초기엔 0이다.
while treeHit < 10: # While문을 실행시켰고 10까지 반복하겠다고 선언했다.
treeHit = treeHit +1 # TreeHit은 반복이 한번 될때마다 1씩 + 카운트된다. <TreeHit += 1도 동일하게 사용가능>
print("나무를 %d번 찍었습니다." % treeHit) #카운트 된 TreeHit을 출력해준다.
if treeHit == 10: # TreeHit이 10이랑 같냐일때 False이므로 다시 While문 초기로 돌아간다.
# TreeHit이 10이 되면 True가 되므로 While문을 종료한다.
print("나무 넘어갑니다.") #10번을 찍으면 나무 넘어갑니다가 출력된다.
while 문 강제로 빠져나가기
While문을 강제로 빠져나올때 쓰는 명령어(break)
또 다른 예가 있다.
오히려 다음것이 이해하고 학습하는데 더 도움이 된것같다.
# coffee.py
coffee = 10
while True:
money = int(input("돈을 넣어 주세요: ")) #input 명령어로 사용자의 돈을 투입한다.
if money == 300: # 그 돈이 300원과 같다면 커피를 하나 내어준다.
print("커피를 줍니다.")
coffee = coffee -1
elif money > 300:# 그 돈이 300원 이상이라면 사용자의 돈에서 300원을 차감하고 커피를 하나 내어준다.
print("거스름돈 %d를 주고 커피를 줍니다." % (money -300)) # 그리고 거스름돈을 돌려준다.
coffee = coffee -1
else: # 돈이 300원보다 작다면 커피를 내어주지않고 while문 처음으로 돌아간다.
print("돈을 다시 돌려주고 커피를 주지 않습니다.")
print("남은 커피의 양은 %d개 입니다." % coffee)
if coffee == 0: #coffee가 0이 되면 판매중지 메세지를 출력해주고, break되어 while문이 종료된다.
print("커피가 다 떨어졌습니다. 판매를 중지 합니다.")
break
While문 맨 처음으로 돌아가기 (continue)
a = 0
while a < 10:
a = a + 1 #a 값에 1을 무한으로 넣어준다.
if a % 2 == 0: continue #짝수가 나오면 2로 나눠주고 몫이 0이되면 continue명령어로 while문 처음으로 돌아간다.
print(a) # 몫값은 처리해주고 남는 1, 3, 5, 7, 9 (조건이 10 미만이니)가 출력된다.
While문의 무한루프가 있을때가 있는데, 컨트롤+c나 break문, exit()문으로 종료조건을 주어야 할것이다.
반복문(for문)
while 문과 비슷한 반복문인 for 문은 문장 구조가 한눈에 들어온다는 장점이 있다.
for문과 while문의 차이는 for문은 리스트나 튜플같은 여러개의 값이 있는 하나씩 뽑아와서 쓰고,while문은 어떤 상황을 쥐어지고 계속 반복하는것을 기본으로 하는 방향으로 쓰이는 방법이 조금씩 다르다.
for 변수 in 리스트(또는 튜플, 문자열):
수행할_문장1
수행할_문장2
...
for문의 기본구조이다.
test_list = ['one', 'two', 'three']
for i in test_list:
print(i) # test_list의 one, two, three를 한번씩 i에 넣으며 print 해준다.
인덱스 0부터 순차적으로 출력시켜준다.
a = [(1,2), (3,4), (5,6)]
for (first, last) in a: # 튜플의 앞 번호와 뒷 번호를 각각 first, last에 담아준다.
print(first + last) # 0번째 인덱스는 3, 1번째 인덱스는 7, 2번째 인덱스는 11이 출력된다.
for 문의 응용
# marks1.py
marks = [90, 25, 67, 45, 80] # 학생들의 시험 점수 리스트
number = 0 # 학생에게 붙여 줄 번호
for mark in marks: # 90, 25, 67, 45, 80을 순서대로 mark에 대입
number = number +1
if mark >= 60:
print("%d번 학생은 합격입니다." % number)
else:
print("%d번 학생은 불합격입니다." % number)
# 1번 학생은 합격입니다.
# 2번 학생은 불합격입니다.
# 3번 학생은 합격입니다.
# 4번 학생은 불합격입니다.
# 5번 학생은 합격입니다. 가 출력된다.
위와 관련해서 While문에 있던 continue와 break도 동일하게 사용할 수 있다.
# marks1.py
marks = [90, 25, 67, 45, 80] # 학생들의 시험 점수 리스트
number = 0 # 학생에게 붙여 줄 번호
for mark in marks: # 90, 25, 67, 45, 80을 순서대로 mark에 대입
number = number +1
if mark >= 60:
print("%d번 학생은 합격입니다." % number)
continue
# 1번 학생은 합격입니다.
# 3번 학생은 합격입니다.
# 5번 학생은 합격입니다.
for 문과 함께 자주 사용하는 range 함수
add = 0
for i in range(1, 11): #리스트자료형처럼 1부터 10까지의 숫자가 나열되있는 뜻이며,
add = add + i # 1+2+3+4+5+6+7+8+9+10을 진행해준다.
print(add) # 따라서 출력은 55가 나온다.
for문으로 구구단 만들기
for i in range(2,10): # 1번 for문
for j in range(1, 10): # 2번 for문(1번 for문에서 2를 가져온다.)
print(i*j, end=" ") # i=2 j=2이기때문에 4의 값이 출력되고, 끝나면 띄워쓰기로 넘어가고 1번 for문으로 넘어간.
print('') # 위 과정이 1번for문이 9번까지 반복되며 구구단이 출력된다.
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
추가적으로 print 함수에는 기본적으로 줄바꿈이 내장되어있다. 그 방법을 없애주기위해 end=" "명령어를 통해 띄워쓰기로 가로로 배치해줄 수 있다.
이번 정리로 제어문도 끝내게되었다.
응용을 더 해보고 내 지식으로 만들수있게 많이 사용해봐야되고, 오늘부터 과제가 출제되었는데
GPT로 뼈대를 구성하고 내용을 보니 확실히 이전보다 이해되는게 많아져서 1번과제는 좀 수월하게 진행할 수 있을것같다.