2강에서는 positional argument가 1개만 주어졌다면, 이제는 2개 이상의 positional arguments도 등장했다. 이런 경우 nargs='+'
로 지정해주면 1개 이상의 값을 불러와서 list
로 만들어주기 때문에 편리하게 사용이 가능했다. --sorted
와 같은 boolean flag을 이용해서 해당 list을 정렬할 것인지를 결정하는 방법도 수행했다. 기본적인 python 문법에 대한 이해가 있다면 책 내용을 보지 않고도 해답을 찾을 수 있었다.
필요한 개념들
- list slicing
- positional arguments 에서 nargs 사용법
- if, elif, else
tmi. C++을 공부하다가 간만에 python을 잡았더니 습관적으로 else if 을 사용하게 된다ㅋㅋ 문제 없어보이는데 빨간줄이 가있길래 봤더니 elif로 사용해야 문제가 사라지더라. 참… 언어 왔다갔다리는 참 헷갈리…
추가적으로 책에서 설명하는 개념들
python list와 관련해서 더하고, 빼고, 바꾸는 method들에 대해 소개한다.
- 더하기
list.append()
list.extend()
list.insert()
- 슬라이싱 slicing
list[a:b]
- 찾기
list.index(x)
- 제거하기
list.pop()
list.remove()
- 정렬하기
list.sort()
list.reverse()
sorted(list)
reversed(list)
코드 공유
picnic.py
#!/usr/bin/env python3
"""
Author : junha <junha@localhost>
Date : 2024-02-20
Purpose: Rock the Casbah
"""
import argparse
# --------------------------------------------------
def get_args():
"""Get command-line arguments"""
parser = argparse.ArgumentParser(
description='Rock the Casbah',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('foods',
metavar='str',
nargs='+',
help='A positional argument')
parser.add_argument('-s',
'--sorted',
help='Sort the items',
action='store_true')
return parser.parse_args()
# --------------------------------------------------
def main():
"""Make a jazz noise here"""
picnic = get_args()
picnic_sort = picnic.sorted
picnic_foods = picnic.foods
if picnic_sort:
picnic_foods = sorted(picnic_foods)
"""number of foods 1, 2, and more!"""
if len(picnic_foods) == 1:
print(f'You are bringing {picnic_foods[-1]}.')
elif len(picnic_foods) == 2:
print(f'You are bringing {picnic_foods[0]} and {picnic_foods[1]}.')
else:
print(f'You are bringing ' + ', '.join(picnic_foods[:-1]) + f', and {picnic_foods[-1]}' '.')
# --------------------------------------------------
if __name__ == '__main__':
main()
예시 답안에서 배울 점
나의 경우 3개 이상의 음식을 다룰 때에는 print(f'You are bringing ' + ', '.join(picnic_foods[:-1]) + f', and {picnic_foods[-1]}' '.')
처럼 다루었는데, 답안에서는 마지막 항목을 items[-1] = 'and ' + items[-1]
로 처리한 뒤에 join을 써버리더라. 이런 깔끔한 풀이 기억해둬야지!