17.6 심사문제: 교통카드 잔액 출력하기 질문
, 김 하은님이 작성1. 설명란에 보면 'print가 먼저 오면 마지막에 사용했을 때의 잔액은 출력되지 않으므로 주의해야 합니다.'라고 되어있어서 실제로 해보니 print가 먼저 오면 마지막 잔액은 출력되지 않은 걸 확인했습니다. 이러는 이유가 뭘까요? 왜 print가 앞에 오면 마지막 잔액이 출력되지 않는지 궁금합니다.
2.
x=int(input())
while x>=1350:
print(x-1350)
x-=1350
이렇게 하면 마지막 잔액까지 나오는데 이렇게 하면 안되는지 궁금합니다.
x=int(input())
while x>=1350:
x-=1350
print(x-1350)
이렇게 하면 음수인 마지막 잔액까지 가는데 이에 관련해서도 궁금합니다.
궁극적으로 순서에 따른 건지 print와 x-=1350 사이의 마지막 잔액 관련하여 이유가 궁금합니다.
감사합니다.
Re: 17.6 심사문제: 교통카드 잔액 출력하기 질문
, 도장_ 관리자님이 작성출력문이 중요한 게 아니라 실제로 카드 잔액이 감소하는 게 중요합니다.
while x>=1350:
print(x-1350)
x-=1350
print(x-1350)
x-=1350
print(x-1350)은 x-1350을 계산한 값은 출력하지만, x 변수의 값은 그대로입니다. 실제로는 감소하지 않은 것이죠. print로 출력한 다음에 x -= 1350을 호출합니다. 뺄셈 연산을 두 번할 필요는 없습니다.
x -= 1350으로 먼저 값을 빼고
print(x)로 간단하게 출력하면 됩니다.
while x>=1350:
x-=1350
print(x-1350)
x-=1350
print(x-1350)
이 코드는 마이너스 잔액을 표시했다고 하지만, 실제로는 마이너스가 아닙니다.
10000을 입력했을 때 마지막에는 -800이 출력되겠지만,
x-1350을 출력했을 뿐이지 x의 값이 -800은 아닙니다.
x의 마지막 값은 550입니다.
while x>=1350:
x-=1350
print(x-1350)
x-=1350
print(x-1350)
print(x)
while 문 바깥에 마지막으로 x를 출력해보면 x의 값은 550인 것을 알 수 있습니다.
애초에 while x >= 1350인데 -800원이 출력된다면 버그겠죠. 잘못된 코드이고요.
현실에서도 교통카드의 잔액이 마이너스가 되면 안 됩니다. -800이 되면 안 됩니다.
현실에서는 교통카드 잔액이 부족하다고 통과가 거부됩니다. 교통카드를 더 충전해야 합니다.
만약 마이너스가 허용되고 다음에 충전할 때 마이너스를 계산한다면
영악한 사용자는 잔액이 100원일 때 교통카드를 찍고 -1250원인 교통카드를 버리는 선택을 할 겁니다.