👉 👉 조건문
👉 if-else
money = 5000
if money > 3800:
print("Take a taxi!")
else:
print('Just Walk!!')
print('what should I do?')
이 명령 코드와
money = 5000
if money > 3800:
print("Take a taxi!")
else:
print('Just Walk!!')
print('what should I do?')
이 코드는 다르다. 파이썬에서는 들여 쓰기와 띄어쓰기 엔터가 전부 의미를 갖고 있기 때문이다.
👉 elif : 2개 이상의 조건 판단할 때 쓴다.
money = 1000
if money > 3800:
print("Take a taxi!")
elif money > 1200:
print('Take a bus!')
else:
print('Just Walk!!')
# Just Walk!!
👉 👉 반복문
👉
fruits = {'apple', 'banana','melon', 'mango'}
for fruit in fruits:
print(fruit)
# apple
# melon
# banana
# mango
fruit은 아무 단어나 입력해도 상관없다. 잠깐 동안 배열을 담을 변수이기 때문이다.
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
print(people[0])
#{'name': 'bob', 'age': 20}
for person in people:
name = person['name']
age = person['age']
print(name, age)
# bob 20
# carry 38
# john 7
# smith 17
# ben 27
# bobby 57
# red 32
# queen 25
전형적인 for-if 구문
for person in people:
name = person['name']
age = person['age']
if age > 20:
print(name, age)
# carry 38
# ben 27
# bobby 57
# red 32
# queen 25
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
for i, person in enumerate(people):
name = person['name']
age = person['age']
print(i, name, age)
if i > 3:
break
# 0 bob 20
# 1 carry 38
# 2 john 7
# 3 smith 17
# 4 ben 27
왜 4 ben 27 이 배열은 나오지? i가 3보다 크니까 안 나와야 하는 거 아닌가...?
4까지 출력이 되고 나서야 3보다 크다는 걸 인식하는 건가??
>> 이게 맞다. 구문을 바꿔서 보면 의문 해결😎
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
for i, person in enumerate(people):
name = person['name']
age = person['age']
if i > 3:
break
print(i, name, age)
Q1-1) 아래 코드를 이용하여 짝수만 출력하는 함수 만들기
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
내가 쓴 코드
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
for num in num_list:
if num % 2 == 0:
print(num)
Q1-2) 짝수의 개수를 출력
처음에 변수를 바깥이 아니라 if문 안에 넣어서 에러 났었음.
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
count = 0
for num in num_list:
if num % 2 == 0:
count = count+1
print(count)
Q1-3) 리스트의 모든 숫자 합 구하기
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
sum=0
for num in num_list:
sum += num
print(sum)
Q1-4) 리스트의 최댓값 구하기
내가 쓴 코드가 틀린 이유 : 난 설정한 변수가 제일 커야만 한다고 생각했는데 사실은 그 반대, max가 최댓값보다 작아야 한다. 그래야 큰 숫자가 max에 담기기 때
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
max = 0
for num in num_list:
if max > num:
max = num
print(max)
실제 정답
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
max = 0
for num in num_list:
if num > max:
max = num
print(max)
함수
파이썬의 함수는 내가 프엔이나 자바를 하면서 썼던 양식과 비슷한 듯 다르다.
👉 리턴 값이 있는 함수
def sum(a,b):
return a+b
result = sum(1,2)
print(result)
👉 조건이 있는 함수
def bus_rate(age):
if age > 65:
print('Older is Free')
elif age > 19:
print('Normal')
else:
print('Younger is DIscount')
bus_rate(35)
bus_rate(18)
Q) 주민번호를 입력받아 성별 출력하는 함수 만들기
내가 쓴 코드
def check_gender(pin):
if int(pin.split('-')[1][:1]) % 2 == 0:
print("Female")
else:
print("Male")
check_gender('123456-1234567')
check_gender('123456-2234567')
check_gender('123456-3234567')
check_gender('123456-4234567')
선생님 코드
def check_gender(pin):
num = pin.split('-')[1][:1]
if int(num) % 2 == 0:
print("Female")
else:
print("Male")
check_gender('123456-1234567')
check_gender('123456-2234567')
check_gender('123456-3234567')
check_gender('123456-4234567')
튜플
사용법 : 딕셔너리 대신 리스트와 튜플로 딕셔너리 '비슷하게' 만들어 사용해야 할 때 많이 쓴다. 불변형으로써, 수정이나 삽입, 삭제 등이 되지 않는다.
[]베열은 리스트로써 수정 가능하지만, () 배열은 튜플로써 수정 불가능(컴파일 에러)
a_list = ['apple', 'pear', 'melon']
b_list = ('apple', 'pear', 'melon')
a_list[0]='banana'
b_list[0]='banana'
print(a_list)
print(b_list)
집합은 우리가 이미 흔히 사용해 왔던 그 '집합'이다. 튜플과 달리 중복 제거가 가능함.
a = [1,2,3,4,5,3,4,2,1,2,4,2,3,1,4,1,5,1]
b = ['apple','pear','water-melon','strawberry','blueberry']
c = ['apple','melon','grape','tomato','strawberry']
a_set = set(a) #중복 제거
b_set = set(b)
c_set = set(c)
print(a_set)
print(b_set & c_set) #교집합
print(b_set | c_set) #합집합
Q) 아래의 코드로 차집합 구하기
student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
student_b = ['물리1','수학1','미술','화학2','체육']
내가 쓴 코드
student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
student_b = ['물리1','수학1','미술','화학2','체육']
student_a_list = set(student_a)
student_b_list = set(student_b)
hap = student_a_list | student_b_list
gyo = student_a_list & student_b_list
cha = hap - gyo
print(cha)
선생님 코드 (훨씬 간단하구먼,,,!)
student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
student_b = ['물리1','수학1','미술','화학2','체육']
a_list = set(student_a)
b_list = set(student_b)
print(a_list - b_list)
f-string
str() : 문자형으로 바꿔준다. Ex) str(score)
int() : 숫자형으로 바꿔준다. Ex) int(name) : 물론 name이 아니라 문자형인 숫자를 넣어야,,!
scores = [
{'name':'영수','score':70},
{'name':'영희','score':65},
{'name':'기찬','score':75},
{'name':'희수','score':23},
{'name':'서경','score':99},
{'name':'미주','score':100},
{'name':'병태','score':32}
]
for s in scores:
name = s['name']
score = s['score']
print(name+'의 점수는 '+str(score)+'점입니다.')
# 영수의 점수는 70점입니다.
# 영희의 점수는 65점입니다.
# 기찬의 점수는 75점입니다.
# 희수의 점수는 23점입니다.
# 서경의 점수는 99점입니다.
# 미주의 점수는 100점입니다.
# 병태의 점수는 32점입니다.
하지만 이건 개수가 작으니까 괜찮은데 만약 겁나 많다면?? 일일이 바꿔주기 힘들지 않을까??
해서 생긴 게 f-string이다.
print(name+'의 점수는 '+str(score)+'점입니다.')
이렇게 복잡한 것을
print(f'{name}의 점수는 {score}점입니다.')
이렇게 고칠 수 있다!! 완전 신세계!!! 자바엔 이런 거 없었던 거 같은데(물론 아닐 수 있음 주의!!!!) 얏호!!!
예외처리
지금은 데이터 개수가 작아서 어디가 에러 나는지 확실하게 볼 수 있지만 육안으로 확인할 수 없을 때 데이터를 돌려야 한다면 이렇게 예외처리를 해서 에러와 함께 끝까지 코드를 돌려서 마지막에 나타난 메시지로 에러를 확인할 수 있다.
하지만 너무 남용하면 좋지 않으므로 꼭 필요할 때에만 쓰도록 해야 한다.
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby'},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
for pp in people:
try:
if pp['age'] > 20:
print(pp['name'])
except:
print(pp['name'], '에러입니다')
bobby를 찾아가서 해결할 수 있음.
파일 가져오기
이건 자바랑 처음 웹 개발 종합반에서 배웠던 거랑 비슷하다. 원하는 함수를 다른 파일로 만들어 두고, import 시켜서 가져오는 거!!
main_Test.py
from main_Function import *
say_hi()
say_hi_to('짱이브')
#안녕!
# 짱이브님 안녕하세요!
main_Function.py
def say_hi():
print('안녕!')
def say_hi_to(name):
print(f'{name}님 안녕하세요!')
main_Test.py에서 여기의 *은 다른 곳에서 쓰이는 것과 마찬가지로 모든 걸 가져온다는 뜻이다.
from main_Function import *
만약 원하는 함수만 가져오고 싶다면 이렇게 쓸 수 있다.
from main_Function import say_hi_to
say_hi() #컴파일 에러
say_hi_to('짱이브') # 짱이브님 안녕하세요!
한 줄로 쓰기
파이썬은 문법 상 엔터, 띄어쓰기, 들여 쓰기가 매우 중요한 언어이다.
num = 3
if num % 2 == 0:
result = '짝수'
else:
result = '홀수'
print(f'{num}은 {result}입니다.') #3은 홀수입니다.
하지만 아래의 result1처럼 if-else를 한 줄로 써낼 수도 있다!!! 훨씬 직관적이고 편할 듯
num = 3
if num % 2 == 0:
result = '짝수'
else:
result = '홀수'
result1 = ('짝수' if num % 2 == 0 else '홀수')
print(f'{num}은 {result}입니다.') #3은 홀수입니다.
print(f'{num}은 {result1}입니다.') #3은 홀수입니다.
👉 for문에서 적용했을 때
원래라면 a_list의 변수들을 2배 시켜서 배열로 넣으려면 b_list처럼 해야 했지만 한 줄로 쓸 때는 c_list처럼 할 수 있다.
a_list = [1,3,2,5,1,2]
b_list = []
for a in a_list:
b_list.append(a*2)
c_list = [a*2 for a in a_list]
print(b_list) #[2, 6, 4, 10, 2, 4]
print(c_list) #[2, 6, 4, 10, 2, 4]
Map, Filter, Lamda식
어려울 수 있음 주의
이 코드에서 Map은 people을 돌면서 하나하나 전부 check에 넣어라 라는 의미를 가지고 쓰였다.
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
def check_adult(person):
if person['age'] > 20:
return '성인'
else:
return '청소년'
result = map(check_adult, people)
print(list(result))
이 함수를 한 줄로 쓰게 되면 아래 처럼 쓸 수 있다.
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
def check_adult(person):
return '성인' if person['age'] > 20 else '청소년'
result = map(check_adult, people)
print(list(result))
❣️❣️❣️이제 여기서 Lamda식이 나오게 된다.
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
def check_adult(person):
return '성인' if person['age'] > 20 else '청소년'
result = map(check_adult, people)
print(list(result))
# Lamda
result1 = map(lambda person : ('성인' if person['age'] > 20 else '청소년'), people)
print(list(result1))
코드를 보면 알 수 있듯이 함수를 만들 이유가 없이 result에서 바로 정의를 내려 더 짧게 코드를 짤 수 있게 해준다.
아래에서 보여주겠지만, 람다를 쓸 때에는 관형적으로 x라고 쓴다.
👉 filter
people = [
{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27},
{'name': 'bobby', 'age': 57},
{'name': 'red', 'age': 32},
{'name': 'queen', 'age': 25}
]
result = filter(lambda x: x['age'] > 20, people)
print(list(result))
people에서 변수의 값 중 'age'가 20이 넘는 것들만 필터하여 result에 담는다는 의미
함수 심화
1. 함수에 인수를 넣을 때, 어떤 매개변수에 어떤 값을 넣을지 정해줄 수 있다. 순서 상관 없음!
def cal(a, b):
return a + 2 * b
print(cal(3, 5))
print(cal(5, 3))
print(cal(a=3, b=5))
print(cal(b=5, a=3))
2. 특정 매개 변수에 디폴트 값을 줄 수 있다.
def cal2(a, b=3):
return a + 2 * b
print(cal2(4))
print(cal2(4, 2))
print(cal2(a=6))
print(cal2(a=1, b=7))
3. 입력값의 개수를 지정하지 않고 모두 받는다. (자바에서 쓰임)
def call_names(*args):
for name in args:
print(f'{name}야 밥먹어라~')
call_names('철수','영수','희재')
4. 키워드 인수를 여러 개 받는다.
def get_kwargs(**kwargs):
print(kwargs)
get_kwargs(name='bob')
get_kwargs(name='john', age='27')
클래스
자바에서 배운 클래스와 동일. 파이썬 문법대로만 쓰면 된다.
class Monster():
hp = 100
alive = True
def damage(self, attack):
self.hp = self.hp - attack
if self.hp <0:
self.alive = False
def status_check(self):
if self.alive == True:
print('살았다')
else:
print('죽었다')
m1 = Monster() #여기서 m은 인스턴스이다.
m1.damage(150)
m1.status_check() #죽었다
m2 = Monster()
m2.damage(90)
m2.status_check() #살았다
드디어 알고리즘
설치는 파이참이고 디렉터리 만들고 알바 갈 시간 되서 종료 ㅠㅠ 내일 빡세게 들어야지!