개발일기

#2 파이썬 연습 (for문, if문, 함수) 본문

오늘의 공부일기/파이썬 공부일기

#2 파이썬 연습 (for문, if문, 함수)

츄98 2023. 3. 21. 00:04

content

  • 새로 알게된 점 (복습!)
  • 내맘대로 변형, 적용하기
  • 느낀점

 

for 문, if 문, 함수

for i, a in enumerate(people):
    name = a['name']
    age = a['age']
    print(i, name, age)
    if i >3:
        break
        
#이 구문의 장점: 데이터 개수가 커지면, 다 출력해보지 않고도 출력이 어떻게 되는지 알 수 있다. 디버깅하기 좋음!
#enumerate : 요소의 순서를 적어주는 enumerate

출력값: 

0 bob 20
1 carry 38
2 john 7
3 smith 17
4 ben 27

 

def check_gender(pin):
    if int(pin.split('-')[1][:1]) % 2 ==0:
        print('여성')
    else:
        print('남성')

check_gender('151010-1310304')

#남성으로 출력

주민등록번호로 성별 확인하는 함수~

변형하고 시도하기  #1

위 코드를 이렇게 한번 바꿔보았습니다!

def check_gender(pin):
    pin = int(pin[7:8]) #슬라이싱을 이용해서 pin값 지정
    if pin % 2 ==0:
        print('여성')
    else:
        print('남성')

check_gender('768387-2310304')

#여성으로 출력

 

내 맘대로 적용하기  #2  다른 새로운 문제로도 도전해보았어요! 

나라명에 따라 hashtag를 뽑아보는 것을 for문과 if문으로 도전해보았습니다!

떠나보조 프로젝트를 참고하여 문제를 만듦! (by 떠나보조 팀원)

 

시도한 점:

해시태그는 리스트인데.. 리스트 + 문자열이 가능하지 않으므로,

리스트를 문자열로 바꾸거나 문자열을 리스트로 바꿔주어야 한다..!

 

sol1) 문자열을 리스트로 바꿔주기

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']

    if name == '일본':
        print(*htg + ['입니다']) #리스트 형식 
    elif name == '한국':
        print(*htg + ['입니다'])
    else:
        print(*htg + ['입니다'])

출력값:

#스노클링 #서핑 #나시고랭입니다
#맛집투어 #금각사 기모노입니다
#속초아이 #울산바위 #물회입니다
#와이키키 #해변 #포케입니다
#도톤보리 #난바 #타코야키입니다

 

여기서 *htg는 리스트 형식에서 대괄호 [ ] , 작은 따옴표 ' ' 을 제외하고 데이터를 뽑아낸다. (unpacking 기능)

하지만 여전히 형식은 리스트! (리스트라는 걸 간과하고.. 계속 왜 안되지.. 하고 있었던 우리 ㅠ)

그래서 print(*htg + '입니다.')로 하면 오류메세지가 나온다..!! 이유는, 리스트 + 문자열이어서 안 된다.

 

sol2) 리스트를 문자열로 바꿔주기

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']
    
    if name == '일본':
	    print(' '.join(htg) + ('입니다')) #문자열
    elif name == '한국':
        print(' '.join(htg) + ('입니다'))
    else:
        print(' '.join(htg) + ('입니다'))

join을 이용해 리스트를 문자열로 바꿔줄 수 있다.

('  ').join(htg)은 공백을 리스트의 각 문자열 사이에 넣어서 출력하는 것이다.

즉, 구분자 문자열과 문자열 리스트의 요소를 연결하여 문자열로 만든다. 

 

이해를 돕기 위해 :

('!').join(htg) 를 하면, 출력값은 #스노클링!#서핑!#나시고랭 

 

 

if문 심화

  • if 문 뒤에 오는 값이 True 이면 통과
  • False이면 통과하지 않음
  • if 문은 기본적으로 다음에 오는 구문이 True, False인지 boolean으로 판단..
  • 결과값도 boolean으로 나온다!
  • 비어있는 스트링, 빈 리스트, 0는 분기문에서 False이다.
  • print(bool[""])은 True! 리스트 안에 빈 스트링 ""이 있기 때문에 빈 리스트가 아니다.
  • if True or False and "" or "a" and [] 이렇게 다른 걸로도 True, False를 나타낼 수 있다.
  • all()이면 요소들이 모두 True일 때 True 리턴
  • any()이면 요소들 중 하나라도 True이면 True 리턴

 

이왕 정리하는 것.. 이것까지도 이해하고 넘어가자!

패킹과 언패킹

  • 리스트 패킹과 언패킹은  *
  • 딕셔너리 패킹과 언패킹은 **
#리스트 언패킹
numbers = [1,2,3,4]
print(add(*numbers)) #10 출력, print(add(1,2,3,4))과 동일

#딕셔너리 언패킹
def sample(**kwargs):
     print(kwargs)

sample_dict={"key":"value", "key2":"value2"}
sample(**sample_dict) #sample(key="value", key2="value2")과 동일 
#출력 {'key': 'value', 'key2': 'value2'}, type 여전히 딕셔너리..

profile["name"]=kwargs.get("name","-")
# .get은 딕셔너리 안에 해당되는 key가 있을 경우에는 그 키에 대한 value를 보여주고, 특정 key가 존재하지 않는다면, 뒤에 지정해준 값을 넣어주게 됩니다.

def sample(a,b,*args,**kwargs): #같이 쓸 수 있음
   print(a)
   print(b)
   print(args)
   print(kwargs)

sample(1,2,3,4,test="a", key="abc", test_key="test_value")
# 처음 1,2는 a, b에 해당되고.. 3,4는 args, 나머지가 kwargs에 해당되어 출력된다! 
# 아무 데이터나 넣어도 출력된다. 함수를 짤 때 받는 값에 제한 없이 유동적으로 받고 싶으면 패킹, 언패킹 사용하면 된다!

 

느낀점

  • 같이 고민하고 문제해결을 하니 훨씬 빠르다.
  • 새로운 문제를 풀면서 리스트를 문자열로 바꿔주는 join에 대해서도, *(별표, Asterisk)에 대해서도 배우게 되었다.
  • 새로운 질문을 통해 새로운 내용을 더 배워가는 순기능!! 너무 좋아!