[프로그래밍 기초]에 관심이 있으신가요?
무제한으로 수강해 보세요!
코드잇 시작하기
2018 프로그래밍 시작하기>추상화>거스름돈 계산기
2018년 4월 12일 작성
김재우김재우ROCK
def calculate_change(payment, cost): 

    change = payment - cost
    fifty_thousand = change / 50000
    ten_thousand = (change % 50000) / 10000
    five_thousand = ((change % 50000) % 10000) / 5000
    one_thousand = (((change % 50000) % 10000) % 5000) / 1000

    print("50000원 지폐: %d장" % (fifty_thousand))
    print("10000원 지폐: %d장" % (ten_thousand))
    print("5000원 지폐: %d장" % (five_thousand))
    print("1000원 지폐: %d장" % (one_thousand))

calculate_change(100000, 33000)
print()
calculate_change(500000, 378000)

저는 이렇게 프로그래밍을 해보았는데요, 위에 fifty_thousand 부터 one_thousand 까지 잘생각해보니까 제가 int로 형변환을 안했더라구요. 형변환을 하지는 않았는데 콘솔창에서는 정수형이 나오긴 했어요. 어떻게 이게 가능한거죠? 문자열포맷팅에서 %d 했기 때문인가요?

정확합니다. 실제로 fifty_thousand ~ one_thousand 변수의 값은 정수형이 아닙니다. print(fifty_thousand) ~ print(one_thousand)를 해보세요.

그러면 소수형의 값이 나올 것입니다. 하지만 문자열 포맷팅을 할 때 %d를 써주었고, 따라서 숫자형의 값이 자동으로 정수형으로 변환되어 출력되는 것입니다.

그런데 이 코드는 엄밀히 말해서 좋은 코드가 아닙니다. 왜냐하면, 우리는 정확한 50000원 짜리 지폐 거스롬돈이 몇 장인지, 10000원 짜리 지폐 거스롬돈이 몇 장인지 계산해서 변수에 값을 지정해주고 싶은건데, 소수형의 값이 지정된다면 우리의 의도와는 다르기 때문입니다.

def calculate_change(payment, cost):
    # 코드를 작성하세요.
    change = payment - cost

    bill_50_thousand = change // 50000
    change -= bill_50_thousand * 50000

    bill_10_thousand = change // 10000
    change -= bill_10_thousand * 10000

    bill_5_thousand = change // 5000
    change -= bill_5_thousand * 5000

    bill_1_thousand = change // 1000

    print("50000원 지폐: %d장" % (bill_50_thousand))
    print("10000원 지폐: %d장" % (bill_10_thousand))
    print("5000원 지폐: %d장" % (bill_5_thousand))
    print("1000원 지폐: %d장" % (bill_1_thousand))

# 테스트
calculate_change(100000, 33000)
print()
calculate_change(500000, 378000)

형변환 대신 // 쓰는 것도 좋은 방법이라고 할 수 있습니다.

관련 질문
2018 프로그래밍 시작하기>추상화>거스름돈 계산기
2019년 1월 7일 작성
김현정김현정
답변 4200 조회
2018 프로그래밍 시작하기>추상화>거스름돈 계산기
2018년 5월 9일 작성
백승환백승환
답변 462 조회
2018 프로그래밍 시작하기>추상화>거스름돈 계산기
2017년 4월 19일 작성
JH SimJH Sim
답변 130 조회