그동안 5차시 퀴즈를 풀면서 품었던 여러 의문들이 계산기 만드는 과정에서 다 풀렸다... 어이가 없다...
계산기 먼저 만들고 시작하지!!!!!!
내가 가지고 있었던 의문을 설명하면
1) int(input()) : int()로 감싸주는 이유는?
2) print("%0.2f 어쩌고 저쩌고" % 울랄라) : 뭐하는 애들임?
if문을 활용해 아래의 실행 결과를 반영한 간단 계산기를 만들어 봅시다.
우리가 만들어 볼 간단 계산기는 사용자로부터 두 개의 숫자와 한 개의 연산자를 입력 받아 그 연산자에 따른 계산을 수행할 것입니다.
연산자는 +(덧셈), -(뺄셈), *(곱셈), /(나눗셈)을 지원하도록 할 것입니다.
[실행 결과 1]
첫 번째 숫자를 입력하세요: 2
연산자를 입력하세요 (+, -, *, /): +
두 번째 숫자를 입력하세요: 3
2 + 3 = 5
[실행 결과 2]
첫 번째 숫자를 입력하세요: 2
연산자를 입력하세요 (+, -, *, /): #
두 번째 숫자를 입력하세요: 3
'#'은 본 프로그램에서 지원하지 않는 연산자입니다.
일단 최종 코드는
operand1, operator, operand2 = 0, "", 0
operand1 = int(input("첫 번째 함수를 입력하세요: "))
operator = input("연산자를 입력하세요 (+, -, *, /): ")
operand2 = int(input("두 번째 숫자를 입력하세요: "))
if operator == "+":
print("%d + %d = %d" % (operand1, operand2, operand1 + operand2))
elif operator == "-":
print("%d - %d = %d" % (operand1, operand2, operand1 - operand2))
elif operator == "*":
print("%d * %d = %d" % (operand1, operand2, operand1 * operand2))
elif operator == "/":
print("%d / %d = %.2f" % (operand1, operand2, operand1 / operand2))
else:
print("'%s'은 본 프로그램에서 지원하지 않는 연산자입니다." % operator)
이건데, 이제 한 줄 한 줄 설명을 달겠어.
우선 첫 번째 입력 숫자, 연산자, 두 번째 입력 숫자를 위한 변수를 지정하자.
연산자의 경우에는 문자열이기 때문에 ""라고 넣는다.
operand1, operator, operand2 = 0, "", 0
그리고 각각의 변수에 들어갈 값을 지정하는데, 이렇게 되면 operand1과 operand2는 오류가 난다.
(operand1에서 오류 나서 다음으로 진행도 안되겠지만)
operand1 = input("첫 번째 함수를 입력하세요: ")
operator = input("연산자를 입력하세요 (+, -, *, /): ")
operand2 = input("두 번째 숫자를 입력하세요: ")
이유는 첫 번째 함수를 입력하세요: 뒤에 입력하는 숫자를 파이썬은 숫자열이 아니라 '문자열'로 인식하기 때문에!!!
그래서 이 자식한테 내가 입력할 건 문자열이 아니라 숫자(정수)란다! 하고 알려줘야 함
그 역할을 하는게 int() 였음 ^^
이걸 반영하면
operand1 = int(input("첫 번째 함수를 입력하세요: "))
operator = input("연산자를 입력하세요 (+, -, *, /): ")
operand2 = int(input("두 번째 숫자를 입력하세요: "))
이제 if ~ elif ~ else 문의 틀만 짜보자.
if operator == "+":
print("")
elif operator == "-":
print("")
elif operator == "*":
print("")
elif operator == "/":
print("")
else:
print("")
자 이제 여기서 +, -. *, / 의 연산자 각각에 해당하는 계산식을 적어 주면 된다. 우선 문제에 있는 걸 그대로 복사해오자.
if operator == "+":
print("2 + 3 = 5")
근데 실제로는 2, 3, 5가 아니라 operand1, operand2, operand1 + operand2의 값이 들어가야겠지?
% (퍼센트포맷팅)을 입력해서 매개변수 3개랑 연결 시켜주는 거임
if operator == "+":
print("2 + 3 = 5" % (operand1, operand2, operand1 + operand2)
그리고 이걸 역으로, 앞에 들어올 애들이랑 연결해주는 거임
그러니까 A + B = C 라는 식에 (A자리에 들어갈 애, B자리에 들어갈 애, C자리에 들어갈 애) 이렇게 연결 시켜주는게 % 이자식임
if operator == "+":
print("%d + %d = %d" % (operand1, operand2, operand1 + operand2)
A, B, C 대신 %포맷 의 형태로 넣어주면 되는데, 일단 지금 넣을 애들은 10진정수니까 d!
그럼 이제 3개의 인자가 각각 저 자리에 쏙!
나머지도 쭉 해주자 :)
if operator == "+":
print("%d + %d = %d" % (operand1, operand2, operand1 + operand2))
elif operator == "-":
print("%d - %d = %d" % (operand1, operand2, operand1 - operand2))
elif operator == "*":
print("%d * %d = %d" % (operand1, operand2, operand1 * operand2))
elif operator == "/":
print("%d / %d = %d" % (operand1, operand2, operand1 / operand2))
네 개의 연산자 외의 다른 기호를 넣었을 때 보여줄 메시지의 경우에도 같은 방식으로 처리하면 된다.
#은 결국 문자열이잖아? 그러니까 얘는 문자열 포맷인 s를 붙여서 %s라고 적어주면 되는거!
else:
print("'%s'은 본 프로그램에서 지원하지 않는 연산자입니다." % operator)
여기서 주의할 점이 있는데, 나눗셈의 경우에 정수 / 정수를 했을 때 소수점이 생긴다는거다.
파이썬 문법을 보면 소수점을 가진(?) 수를 '부동소수점'이라고 하던데, 얘는 %d라고 포맷해두면 버림해버린다;;
왜냐면 내가 정수를 출력하라고 명령해뒀으니까.
엑셀에서 셀 서식 해두면 알아서 소수점 표시 안하는 거랑 똑같음.
그래서 얘는 포맷을 또 바꿔줘야한다! 여기서 내가! 며칠간 ! 고생했던! 그 연산자 문제의 해답이 나온다 ㅋㅋ
elif operator == "/":
print("%d / %d = %.2f" % (operand1, operand2, operand1 / operand2))
f는 부동소수점 float 에서 온 단어이고, .2는 정수 뒤에 소수점 몇 째자리 까지 표시할건지를 나타내는 거다.
1.0 << %0.1f or %.1f
1.00 << %0.2f or %.2f
이렇게 해서, 계산기 프로그램의 최종 코드가 맨 처음 보여준
operand1, operator, operand2 = 0, "", 0
operand1 = int(input("첫 번째 함수를 입력하세요: "))
operator = input("연산자를 입력하세요 (+, -, *, /): ")
operand2 = int(input("두 번째 숫자를 입력하세요: "))
if operator == "+":
print("%d + %d = %d" % (operand1, operand2, operand1 + operand2))
elif operator == "-":
print("%d - %d = %d" % (operand1, operand2, operand1 - operand2))
elif operator == "*":
print("%d * %d = %d" % (operand1, operand2, operand1 * operand2))
elif operator == "/":
print("%d / %d = %.2f" % (operand1, operand2, operand1 / operand2))
else:
print("'%s'은 본 프로그램에서 지원하지 않는 연산자입니다." % operator)
이녀석이 되는거다
꺄아아아아아