Sparta/What I Learned

22.11.10

코딩하는 또롱이 2022. 11. 10. 20:08

👉 👉  조건문

 👉  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() #살았다

 


 

드디어 알고리즘

 

 

 

설치는 파이참이고 디렉터리 만들고 알바 갈 시간 되서 종료 ㅠㅠ 내일 빡세게 들어야지!

'Sparta > What I Learned' 카테고리의 다른 글

22.11.13  (0) 2022.11.14
22.11.11  (0) 2022.11.11
22.11.9  (2) 2022.11.09
22.11.8  (0) 2022.11.08
22.11.7  (0) 2022.11.07