제어문이란?
제어문은 코드의 흐름을 제어하는 문법으로 주어진 조건에 따라 반복해서 코드를 실행할 때
사용하는 것으로 조건문, 반복문, 분기문 등이 포함되어 있다.
조건문이란?
특정조건을 만족(True)하면 코드를 실행하는 것이다. 그리고 조건문은 중첩이 가능하다.
조건문은 if, elif, esle을 이용하여 조건문을 만들 수 있다.
- if의 조건이 참이면 실행해라 (단독으로 실행 가능)
- elif(else if 약어) : 그게 아니면... elif의 조건이 참이면 실행해라
- else : if 와 elif 모두 조건이 참이 아니라면 실행해라
조건문의 구조는 다음과 같다.
if <condition>:
code content
elif <condition>:
code content
...
...
...
else:
code content
예시로는 다음과 같다.
accuracy = 0.9
if accuracy >= 0.9:
print("와우 최고의 인공지능 모델이네요")
elif accuracy < 0.9 and accuracy >= 0.8:
print("좋은 모델이네요")
elif accuracy < 0.8 and accuracy >= 0.7:
print("평범한 모델이네요")
else:
print("차라리 제가 예측하겠습니다.")
=> 와우 최고의 인공지능 모델이네요
코딩할 때 0과 None의 객체가 아닐 경우 True를 반환하여 출력이 안되는 경우가 생긴다.
이럴 경우에 if문을 쓰면 이러한 문제를 다음과 같이 해결할 수 있다.
10 / 0
=> ZeroDivisionError: division by zero
-------------------------------------------
num = 0 # True로 인식해서 출력이 안됨
if num != 0:
print(10/num)
=>
-------------------------------------------
num = 0
if num != 0:
print(10 / num)
else:
print("0으로 나눌 수 없습니다.")
중첩 조건문
중첩 조건문은 조건문 안에 조건문을 사용하는 것으로 예시는 다음과 같다.
age = 18
if age > 99 or age < 0:
print("유효한 나이를 입력해주세요.")
else:
if age < 20:
print("20세 이상만 회원가입이 가능합니다.")
else:
print("DB 저장 완료")
=> 20세 이상만 회원가입이 가능합니다.
Quiz)
계좌에 10000원이 들어있습니다.
인출 금액을 입력받습니다.
인출 금액이 'isdigit' 메소드를 이용하여 숫자가 아닐 경우 '유효한 금액을 입력하세요.' 출력
인출 금액이 계좌에 있는 금액보다 크면 '인출 불가능합니다. {}원의 잔액이 부족합니다.' 출력
인출 금액이 계좌에 있는 금액보다 작으면 '{} 원이 인출되었습니다.' 출력
정수가 입력될 경우에는 항상 마지막에 현재 계좌의 잔액을 출력 ('현재 잔액은 {}원입니다.')
money = input("얼마 인출 할래?") # 내 풀이
if money != money.isdigit():
print("유효한 금액을 입력하세요.")
money = int(money)
if money > account:
print(f"인출이 불가능합니다. {money - account}원의 잔액이 부족합니다.")
else:
account -= money
print(f"{money}원이 인출되었습니다.")
print(f"현재 잔액은 {account}원입니다.")
이번 문제를 풀면서 계속 오류가 떠서 뭐가 문제인지 강사님에게 여쭤봤다.
강사님은 내 풀이 한번 보고 난 후 account가 accoount로 되어 있는 것을 확인해주셨다.
이런 기본적인 실수를 다신하지 않도록 조심해야겠다.
그리고 money = int(money)로 정수변환해주는 것도 생각하지 못해 막힌 부분이였다.
나는 숫자가 아닐 경우와 숫자일 경우로 나누었는데 강사님의 코드를 보면 반대로 정수일 경우를 먼저 하였다.
이유는 정수일 경우가 훨씬 많기 때문에 이렇게 코딩을 하셨다고 말씀주셨다.
강사님의 말씀듣고, 더 다양한 시각으로 보는 법을 알게 된 것 같다.
money = input("얼마 인출 할래?") # 강사님 풀이
if money.isdigit(): # 정수 판별 메소드: isdigit
money = int(money)
if account < money:
print(f"인출이 불가능합니다. {money - account}원의 잔액이 부족합니다.")
else:
account -= money
print(f"{money}원이 인출되었습니다")
print(f"현재 잔액은 {account} 원입니다.")
else:
print(f"유효한 금액을 입력하세요.")
반복문(loop)이란?
반복적으로 코드를 수정할 때 사용하는 것으로 while문과 for문이 있다.
그리고 반복문도 또한 조건문처럼 중첩하여 쓸 수 있다.
while
- 조건이 참(True)인 동안 반복
- 무한 반복 주의
while의 구조
while <condition>:
code context
예시로는 다음과 같다.
i = 1
while i < 10:
print(f"{i+1}단 입니다.")
i += 1
j = 1
while j < 10:
print(f"{i} X {j} = {i*j}")
j += 1
=> 2 단 입니다.
2 X 1 = 2
2 X 2 = 4
...
2 X 9 = 18
...
...
...
9 단 입니다
9 X 1 = 9
9 X 2 = 18
...
9 X 9 = 81
while 문에는 break와 continue기능이 있다.
break는 해당 반복문을 빠져나오는 것이고, continue는 진행을 중단하고 다음 반복으로 넘어가는 것이다.
이 기능은 이미 많이 알려져 있는 기능이라 예시를 제외하겠다.
Quiz)
다음과 같이 한영사전이 dict 형태로 되어있다.
{'사과' : 'Apple', '바나나': 'Banana', '딸기' : 'Strawberry'}
사용자의 입력을 받아 사전에 없는 단어(Key)를
입력받으면 "사전에 없습니다. 다시 입력하세요" 출력하고 입력대기!
사전에 단어(key)가 있으면 해당되는 단어(value)를 출력하고 반복문을 빠져나오게 하자.
fruits = {'사과' : 'Apple', '바나나' : 'Banana', '딸기' : 'Strawberry'}
while True:
word = input("과일단어 입력: ")
word = fruits.get(word) # 0과 none이 들어가면 실행이 안된다.(그래서 get함수 사용)
if word:
print(word)
break
else:
print("사전에 없습니다. 다시입력하세요")
=> 과일단어 입력: 참외
사전에 없습니다. 다시입력하세요
과일단어 입력: 포도
사전에 없습니다. 다시입력하세요
과일단어 입력: 딸기
Strawberry
이번 문제는 dict와 while문, 조건문의 개념을 이해하고, 풀어야하는 문제로 처음에 문제를 받았을 때 감도 안잡혔다.
이 후 강사님의 풀이로 get 함수를 쓰시는 것을 보고, 문제를 이해할 수 있었다.
for
for문은 while문과 달리 많이 쓰인다고 한다. 개념을 확실히 이해해야한다.
- 반복 가능(iterable)한 객체를 더이상 꺼낼 수 없을 때까지 반복한다.
- list, tuple, set, dict, str
for문의 구조
for <variable> in <iterable>:
code content
예시는 다음과 같다.
for n in range(2,10): # 바깥쪽
print(f"{n}단 입니다.")
for i in range(1,10): # 안쪽
print(f"{n} X {i} = {n*i}")
=> 2 단 입니다.
2 X 1 = 2
2 X 2 = 4
...
2 X 9 = 18
...
...
...
9 단 입니다
9 X 1 = 9
9 X 2 = 18
...
9 X 9 = 81
range 함수
- 특정 구간의 숫자의 범위를 만들어 주는 함수
- 슬라이싱 기법을 이용해서 숫자의 범위를 만들어준다.
- 파이썬의 range 라는 숫자의 범위를 가진 iterable한 특수한 객체를 반환
- for문과 자주 사용된다.
range와 슬라이싱은 역순에서 차이가 난다.
list(range(10,0,-1)) # 역순 (슬라이싱과 살짝 차이남)
list[-1:-10:-1] # 슬라이싱
=> [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Quiz)
for문과 조건문을 이용하여 다음의 리스트에서 음수만 출력하세요
lst = [-2,1,4,-88,-12,-12]
lst = [-2,1,4,-88,12,-12]
for i in lst: # lst를 i(변수) 안에 넣음
if i < 0: # 그래서 lst가 아닌 i를 넣어야함
print(i)
=> -2
-88
-12
'AI 공부 > 파이썬' 카테고리의 다른 글
파이썬 (함수 - 1) Argument 와 parameter, 깊은 복사, 얕은 복사 (0) | 2022.08.01 |
---|---|
파이썬 (제어문 = 조건문, 반복문....) - 2 (0) | 2022.07.26 |
파이썬 (문자열) (0) | 2022.07.22 |
파이썬 (연산자를 이용한 리스트) (0) | 2022.07.22 |
[ 배열 ], ( 튜플 ), { 딕셔너리 }의 차이점과 사용법 (0) | 2022.07.22 |
댓글