From 00f6463efcf8b78f5701e7290354f4b7a366847c Mon Sep 17 00:00:00 2001 From: splitCoding Date: Thu, 23 Jul 2026 14:24:21 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=84=B0=EB=AF=B8=EB=84=90=20=EB=AC=B4?= =?UTF-8?q?=EC=9E=91=EC=9C=84=20=EB=AA=85=EC=96=B8=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?CLI(quote.py)=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 로컬 명언 24개에서 random.choice로 무작위 1개 출력 - 인자 없이 실행시 즉시 명언 출력, argparse 기반 - 빈 목록/명언 없음 시 에러 없이 안내 후 정상 종료 - KeyboardInterrupt(Ctrl+C) 정상 종료 처리 task #22 Co-Authored-By: Claude Opus 4.8 --- quote.py | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 quote.py diff --git a/quote.py b/quote.py new file mode 100644 index 0000000..a954ba1 --- /dev/null +++ b/quote.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +"""Terminal random quote CLI. + +Prints one randomly chosen quote from a local list each time it runs. + +Examples: + python quote.py +""" + +import argparse +import random +import sys + + +QUOTES = [ + ("성공은 열정을 잃지 않고 실패를 거듭할 수 있는 능력이다.", "윈스턴 처칠"), + ("삶이 있는 한 희망은 있다.", "키케로"), + ("시작이 반이다.", "아리스토텔레스"), + ("배움에는 지름길이 없다.", "속담"), + ("최고의 복수는 큰 성공이다.", "프랭크 시나트라"), + ("어제로부터 배우고, 오늘을 위해 살고, 내일을 위해 희망하라.", "알버트 아인슈타인"), + ("길이 없으면 만들면 된다.", "한니발"), + ("천 리 길도 한 걸음부터.", "노자"), + ("실패는 성공의 어머니다.", "속담"), + ("피할 수 없으면 즐겨라.", "로버트 엘리엇"), + ("행동하지 않으면 아무 일도 일어나지 않는다.", "요한 볼프강 폰 괴테"), + ("오늘 할 수 있는 일을 내일로 미루지 마라.", "벤저민 프랭클린"), + ("지혜의 시작은 자신이 모른다는 것을 아는 것이다.", "소크라테스"), + ("당신이 할 수 있다고 믿든 할 수 없다고 믿든, 믿는 대로 될 것이다.", "헨리 포드"), + ("위대한 일은 갑자기 이루어지지 않는다.", "에픽테토스"), + ("실패를 두려워하지 마라. 시도하지 않는 것을 두려워하라.", "속담"), + ("자신을 아는 것이 모든 지혜의 시작이다.", "아리스토텔레스"), + ("인생은 자전거를 타는 것과 같다. 균형을 잡으려면 계속 움직여야 한다.", "알버트 아인슈타인"), + ("변화를 두려워하지 마라. 정체를 두려워하라.", "속담"), + ("좋은 습관은 평범한 사람을 비범하게 만든다.", "속담"), + ("포기하지 않는 한 실패한 것이 아니다.", "속담"), + ("가장 어두운 밤도 끝나고 해가 뜬다.", "빅토르 위고"), + ("당신의 시간은 한정되어 있다. 다른 사람의 삶을 사느라 낭비하지 마라.", "스티브 잡스"), + ("작은 발걸음이 큰 여정을 만든다.", "속담"), +] + + +def load_quotes(): + """Return the list of (quote, author) tuples, or empty list if unavailable.""" + return QUOTES + + +def pick_quote(quotes): + """Randomly select one (quote, author) tuple from `quotes`.""" + return random.choice(quotes) + + +def build_parser(): + parser = argparse.ArgumentParser( + prog="quote.py", + description="터미널 무작위 명언 출력 CLI", + ) + return parser + + +def main(): + parser = build_parser() + parser.parse_args() + + quotes = load_quotes() + if not quotes: + print("안내: 표시할 명언이 없습니다. 명언 목록이 비어 있습니다.", file=sys.stderr) + return + + text, author = pick_quote(quotes) + print(f'"{text}" — {author}') + + +if __name__ == "__main__": + try: + main() + except KeyboardInterrupt: + print("\n중단됨") + sys.exit(130)