[Python] 맨날 헷갈리는 나누기 관련 연산 기호 - /, //, %

지기성·2022년 4월 3일
0
post-thumbnail

"저만 그런거 아니죠?"

맞춰보세요

print(10 / 3)
print(10 // 3)
print(10 % 3)

"출력값은 뭘까~요?"

print(10 / 3)	# 3.3333333333333335
print(10 // 3)	# 3
print(10 % 3)	# 1

"맞추셨나요?"

나누기 연산자의 역할은 다음과 같습니다

  • /: 나누기

  • //: 나누기 연산 후 소수점 이하의 수를 버리고, 정수 부분의 수만 구함 (몫)

  • %: 나누기 연산 후 몫이 아닌 나머지를 구함


나누기 연산자 주의점

다음 문제를 풀어보겠습니다.

다음의 방정식을 해결하는 프로그램을 구현 하세요. x값을 구해야 합니다.

  • ax = b

결과 출력물은 다음과 같아야 합니다.

Input 으로 주어진 a 와 b 값으로 위의 방정식을 충족하는 단 하나의 정수가 존재한다면 해당 정수를 출력하면 됩니다
만일 a 와 b 값으로 위의 방정식을 충족하는 정수가 없다면 "No Solution"을 출력해주세요.
a 와 b 값으로 위의 방정식을 충족하는 정수가 많다면 "Many Solutions"을 출력해주세요.

  • Hint:
    a 나 b 는 0이 될 수 있습니다.
  • Examples:
    만일 a = 1, b = -2 라면 결과값으로 -2가 출력이 되어야 합니다.
    만일 a = 2, b = -1 라면 결과값으로 "No Solution"이 출력이 되어야 합니다

작고 소중한 첫 답안

logic

  • a, b가 같다면 해가 무수히 많다(부정)
  • 변수 하나만 0이라면 해는 없다(불능)
a = int(input("첫번째 정수"))
b = int(input("두번째 정수"))

if a == b:
  print("Many Solutions")
else:
  if (a == 0 and b != 0) or (a != 0 and b == 0):
    print("No Solution")
  else:
    print(b / a)

"답일까요?"

테스트 케이스 중 a = 1, b = -2 라면 결과값으로 -2가 출력해야 하지만 -2 / 1의 결과값으로는 -2.0이기 때문에 오답처리되었습니다.

나누기 연산(/) 시 결과가 float 자료형(Data Type)으로 처리됩니다.

수정 답안

  • 결과값을 int 자료형으로 처리해야했고
  • 나눌 수 있는 하나의 정수가 존재한다면 출력 해야한다는 조건이 추가됬어야 했습니다

따라서 다음과 같이 조건을 수정했습니다.

a = int(input("첫번째 정수"))
b = int(input("두번째 정수"))

if a == b:
  print("Many Solutions")
else:
  if (a == 0 and b != 0) or (a != 0 and b == 0) or (type(int) != type(b / a) and (b / a > 0)):	# 나눈 값이 양수 일때, int형이 아니라면 
    print("No Solution")
  else:
    print(int(b / a))	# int 함수로 형변환

당연한 이유였던 것...

나누기 연산 후 float 자료형으로 처리되는 것은 생각해보면 당연한 결과였습니다
나누기 연산을 한다면 결과값은 대부분 소수가 붙어있을 것이다(실수)

아무 수 2개나 불러보시길 바랍니다
그리고 나눠보세요!

>>> 76 / 0.8
95.0

즉, 숫자의 나누면 대부분 실수일 것이므로
정수의 결과가 나온다 하더라도 float 자료형으로 처리되는 겁니다!

profile
궁금증 주도 공부 / 원리 파고들기 / 경험에 기반한 블로그

0개의 댓글