수학적 개념을 다루는 프로그램부터 시작하니, 궁금한 것들이 너무 많아 꼬리에 꼬리를 물어 검색하다 보니 오래걸린다.
더 읽고 글을 쓰고 싶으니, 오늘은 간단한 change return 프로그램에 대한 포스팅 먼저 하고자 한다.
문제
물건의 값과 돈을 입력받아 거스름돈을 quarters (25 cents), dimes (10 cents), nickels (5 cents), and pennies (1 cent)의 개수로 표현하세요!
코드
# Initialize variables
quarters = dimes = nickels = pennies = 0
# Get the user input
cost = float(input("How much does it cost?: "))
money = float(input("How much are you paying?: "))
# Get the change amount and convert it to all cents
change = int((cost - money) * 100)
while change != 0:
# quarters: 25 cents
quarters = change // 25
change -= quarters * 25
# dimes : 10 cents
dimes = change // 10
change -= dimes * 10
# nickels : 5 cents
nickels = change // 5
change -= nickels *5
# pennies: 1 cent
pennies = change
change -= pennies
print("Your changes are: \nQuarters: {}\nDimes: {}\nNickels: {}\nPennies: {}".format(quarters, dimes, nickels, pennies))
Lessons Learned
- 처음엔 (int) / (int)의 결과도 (int)일 것이라 생각했으나, Python3는 이 경우에도 float을 반환하는 true division을 한다고 한다. 따라서 몫만 반환하는 floor division사용을 위해 // 연산자를 사용했다.
- 참고: floor division은 음수의 계산 시 주의할 것.
(-9) / (4) = -2.25이고, (-9) // (4) 는 -2가 아닌 -3을 반환할 것이다. -2.25보다 -3이 작으므로.
(+9) // (4) 가 2를 반환하기에 혼돈이 올 수 있다.
- 이 내용을 함수로 표현해야 하나 고민했다. 하지만 이 스크립트는 (1) 한 번만 쓰이고, (2) 이 스크립트 자체가 하나의 목적만 수행하므로 함수로 표현하지 않았다. 고민 해결을 도와준 링크 참고 - softwareengineering.stackexchange.com/questions/269882/is-it-always-a-best-practice-to-write-a-function-for-anything-that-needs-to-repe/269890
CS50에서도 이 과제를 한 기억이 나는데... 그 때는 C로 했었나?
얼른 복습해야겠다.
'프로젝트들 > Python_Udemy' 카테고리의 다른 글
[Python]15 - Tax Calculator 미국 도시 세금 계산기 (0) | 2020.12.24 |
---|---|
[Python]20 - Coin Flip Simulator 동전 던지기 (0) | 2020.12.22 |
[Python]1 - Find Pi to the Nth Digit, 원주율 N번째 자릿수까지 계산하기 (0) | 2020.12.14 |
[Python]3 - Fibonacci Sequence 피보나치 수열 (0) | 2020.12.08 |
[Python]9 - 이진수 (Binary) & 십진수 (Decimal) 컨버터 (0) | 2020.12.08 |
댓글