새로 알게된 내용을 중점적으로 정리해보자
f-string은 문자열을 좀더 직관적으로 볼수있게 해준다.
예제로
players = [
{'name':'James','age':12},
{'name':'Mark','age':25},
{'name':'Carl','age':27},
{'name':'Jonh','age':14},
{'name':'Michael','age':32},
{'name':'Carlos','age':12},
{'name':'Tom','age':46},
{'name':'King','age':36}
]
이 딕셔너리에서 for loop로 리스트를 뽑고
for p in players:
name = p['name']
age = p['age']
print(name, age)
로 리스트만 뽑을수도 있지만
'누구의 나이는 몇입니다.'라고 하고싶다면
for p in players:
name = p['name']
age = str(p['age'])
print(name+"의 나이는"+age+"살 입니다.")
이렇게 사용할수도 있겠지만!
f-string을 사용하면 훨씬 편하게 사용할 수 있다.
for p in players:
name = p['name']
age = str(p['age'])
print(f'{name}의 나이는 {age}살 입니다.')
결과값은 똑같다.
여기서 try except를 사용해보자면
players = [
{'name': 'James', 'age': 22},
{'name': 'Mark', 'age': 25},
{'name': 'Carl', 'age': None},
{'name': 'Jonh', 'age': 34},
{'name': 'Michael', 'age': None},
{'name': 'Carlos', 'age': 12},
{'name': 'Tom', 'age': 46},
{'name': 'King', 'age': 36}
]
for p in players:
name = p['name']
age = p['age']
try:
if age < 20:
print(f'{name} is underage')
elif age > 20:
print(f'{name} is adult')
except:
print(f'{name}, plz enter your age')
요런식으로 짜봤을 때
나이가 20보다 적을시에는 미성년자라고 나오게 하고 더 많을시에는 성인이라고 나오게 되는데 그게 아니면(입력이 누락되었으면) 나이를 입력하라고 출력하게 된다.
마지막으로 map, filter, lambda를 보자
players = [
{'name': 'James', 'age': 22},
{'name': 'Mark', 'age': 25},
{'name': 'Carl', 'age': 17},
{'name': 'Jonh', 'age': 34},
{'name': 'Michael', 'age': 15},
{'name': 'Carlos', 'age': 12},
{'name': 'Tom', 'age': 46},
{'name': 'King', 'age': 36}
]
def check_adult(person):
if person['age'] > 20:
return '성인'
else:
return '미성년자'
result = map(check_adult, players)
print(list(result))
map을 사용하면 내용을 바꿀 수 있는데
출력하면
이런식으로 출력된다.
반복문으로 하나하나 바꿀수 있는것을 이런식으로 사용하면 훨씬 간단하게 할 수있다.
이 players를 하나하나 돌면서 check_adult에 넣고 20이 넘으면 '성인'으로 return 그게 아니면 '미성년자로' return값을 가지고 result라는 변수에 넣어서 list로 뽑는것이다.
이 코드를 좀더 간단하게 바꾸면
def check_adult(person):
return '성인' if person['age'] > 20 else '청소년'
으로 짤 수 있다
더 쉽다는 lambda로 짜보자
result = map(lambda x: ('성인' if x['age'] > 20 else '청소년'), players)
print(list(result))
이러면 한줄짜리 코드가 된다.
결과값은 같다.
여기서 20보다 큰값만 가져오게 된다면 filter를 씌워주면 된다.
result = filter(lambda x: x['age'] > 20, players)
보기가 흉하기때문에 pprint를 사용해보자
상단에
from pprint import pprint
를 넣어주면
아주 예쁘게 잘 나온걸 볼 수있다.
오늘 배운내용 여기까지