본문 바로가기
AI 웹개발반

[TIL]파이썬 기초3 _ 미니프로젝트로 복습 중

by 째깍단 2023. 3. 21.

오늘도 파이썬 기초강의, 오후에는 심화로 들어가자!

 

 

try-except 문

for person in people:
    try:
        if person['age'] > 20:
            print(person['name'])
    except:
        print(person['name’], ’에러입니다.')

많은 데이터를 디버깅할 때 try-except 문을 통해 자료를 끝까지 실행하도록 할 수 있다.

혹시 서버가 잘못됐을 경우 어떤 것이 문제인지 알 수 있다.

(남용하면 어떤 문제가 생겼는지 알 수 없으니 사용에 주의하자)

 

 

두 py파일 연결하기

two.py파일을 one.py에서 실행하려면, one.py파일에 구문을 추가

from two import * #(*은 모든내용)

 

f-string

f스트링은 해당 문자열을 내가 원하는 방식으로 표현하는 방법

f에 따옴표를 붙여서 사용한다. 안에 dict나 변수를 문자열과 함께 사용할 수 있다.

print(f'{name}은 {age}입니다')

 

한줄의 마법^.^… (어떻게 사용하는지는 알겠는데 어떻게 쓰는지를 잘 모르겠어서 어렵다;)

 

> if문에서의 방법 

지금까지 배운 방법

if num % 2 == 0:
    result = '짝수'
else:
    result = '홀수'

 

 

한줄로 줄이기(괄호는 제거해도 된다.)

result = ('짝수' if num % 2 == 0 else '홀수')

print(f’{num}은 {result}입니다.')로 출력하면 결과값은 같다!

 

 

>for문에서의 방법

b_list = []
for a in a_list:
    b_list.append(a*2)

이것을 한줄로 줄이면

b_list = [a*2 for a in a_list]

print(b_list)하면 a_list의 모든 요소가 *2되어 리스트로 출력된다.

 

 

 

 

--- 여기부터는 문법 심화 ---

 

map  dict내 요소를 원하는 조건에 맞추어 변경해준다

map()

 

lambda 함수에 바꿀 내용을 반복적으로 적용해준다

(lambda x(함수):x(바꿀내용),people(데이터))

 

filter 필요한 부분만 걸러내어준다

filter((lambda x(함수):x(조건),people(데이터)))

데이터 함수를 조건에 넣고 돌려서 조건에 맞는것만 출력!

 

함수의 매개변수

*args 변수 인자를 무제한으로 받을 수 있다

{name}은 사람입니다. > 영수 철수 영희 동수 동희.... 해서 제한없이 각각의 내용 출력가능

 

cal(**kwargs) 키워드를 넣으면 dict를 만들어준다!

 

 

class에 대한 이해

각각의 객체가 있을때, 그것를 중앙에서 관리하는 것이 좋을까? 아니면 각각 자체적으로 관리하는 것이 좋을까?

개체마다 자신의 스테이터스를 관리하는 것이 보다 직관적이고 관리에도 용이하다.

이것을 객체 지향적이라고 함!

 

비유:  class는 붕어빵기계이고 instance는 붕어빵이다

 

Monster가 자체적으로 자신의 hp를 관리하도록 하는 코드

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('죽었다!')

 

이후 damage요소를 넣어 각 개체의 결과값을 받을 수 있다.

m1 = Monster()
m1.damage(150)
m1.status_check()

m2 = Monster()
m2.damage(90)
m2.status_check()

 

m1, m2 '인스턴스' 라고 부른다.

 

>>여기에서 검색을 하다가 헷갈리는게 생겼다 

개체 entitiy

객체 object

객체는 각각클래스(기능)이고

객체를 포함해서 하나의 인스턴스가 나타난게 개체인가?

흐음... 더 공부가 필요하다

 

 

 

 

> 이제 파이썬 함수들을 활용해서 이전 미니프로젝트에서 하고 싶었던 python으로 데이터 출력하기를 연습하고 있다.

> 왜 문자열 값이 출력안되는지 동기님들이 같이 봐주셨ㄷ다.. 집단지성최고...

더보기

멤버카드의 내용을 미리 입력해둔 list+dict형 문에 for를 사용하여 각각의 개체가 한줄에 나타나도록 했다.

countries = [
    {'name': '인도네시아', 'cityn': '발리', 'hashtag':'#스노클링'},
    {'name': '일본', 'cityn': '교토',  'hashtag':'#맛집투어'},
    {'name': '한국', 'cityn': '속초', 'hashtag':'#속초아이'},
    {'name': '미국', 'cityn': '하와이', 'hashtag':'#와이키키'},
    {'name': '일본', 'cityn': '오사카', 'hashtag':'#도톤보리'},
]

for country in countries:
    name = country['name']
    city = country['cityn']
    htg = country['hashtag']
    print(name,city,htg)

결과값 = 

Or

 

list+dict 형으로 해서

countries = [
    {'name': '인도네시아', 'cityn': '발리', 'hashtag':['#스노클링', '#서핑', '#나시고랭']},
    {'name': '일본', 'cityn': '교토',  'hashtag':['#맛집투어', '#금각사', '기모노']},
    {'name': '한국', 'cityn': '속초', 'hashtag':['#속초아이', '#울산바위', '#물회']},
    {'name': '미국', 'cityn': '하와이', 'hashtag':['#와이키키', '#해변', '#포케']},
    {'name': '일본', 'cityn': '오사카', 'hashtag':['#도톤보리', '#난바', '#타코야키']},
]

for country in countries:
    name = country['name']
    city = country['cityn']
    htg = country['hashtag']
    print(name,city,htg)

도시명에는 괄호를 포함했었는데 ()하고 문자열로 출력하면 되겠지

해시태그만 다른 라인에 넣어야 하는데, 타고 들어가서 출력하면 될까? 시도해보기.

 

----

  print(htg) 하면 hashtag만 나옴

 

1 . join() 함수 사용하기  : 문자열로 출력

따옴표안에 ‘구분요소’를 넣고 join()을 사용하여 출력하면 원하는 대로 hashtag 문자열만 나온다.

    print(' '.join(htg))

 

2 list Unpacking하기 : list로 출력

unpack하고 싶은 list변수 앞에 *를 붙이면 간단!

print(*htg)

 

자꾸 출력이 되지 않는 문제가 생겼는데, 동기분들께 여쭤봐서 해결했다.

list의 문자열을 출력하는 방법이 여러가지가 있는데, *htg를 하면 출력이 되는데 + '입니다'를 붙이면 출력이 되지 않는 문제가 생겼다. 문제의 원인이 출력에 있는 것 같아 고민하던 중 해결받음..ㅎ..

 

리스트 + 문자열은 출력이 되지않는다!

for country in countries:
    name = country['name']
    city = country['cityn']
    htg = country['hashtag']
    
    if name == '일본':
        print(' '.join(htg) + ('입니다'))
    elif name == '한국':
        print(' '.join(htg) + ('입니다'))    
    else:
        print(' '.join(htg) + ('입니다'))
for country in countries:
    name = country['name']
    city = country['cityn']
    htg = country['hashtag']
    
    if name == '일본':
        print(*htg + ['입니다'])
    elif name == '한국':
        print(*htg + ['입니다'])    
    else:
        print(*htg + ['입니다'])

 >이렇게 적는 2가지 방법이 있다.

 

원하는 자료 일부만 출력하려면 어떻게 해야할지 고민중..

리스트값에 계열[1][2].. 이런것을 사용하면 되지 않을까?