메뉴 건너뛰기

imitator

파이썬 ex21.py 정리

2017.06.08 17:06

관리자 조회 수:20

요즘 파이썬 공부를 제대로 못하고 있다가 다시 하고있다.
그런데 하던 도중 변수를 함수에 더하고 빼고 그걸 호출해서 함수와 변수가 어쩌고... 뭐 이상하게 계산하는게 있어서
이해를 하기 위해 내용을 정리

주의 : 아래 설명된 내용은 개인적으로 이해시키기 위해 정리해 본 내용 

  1 # -*- coding: utf-8 -*-
  2 
  3 def add(a, b):
  4     print "덧셈 %d + %d" % (a, b)
  5     return a + b
  6 
  7 def subtract(a, b):
  8     print "뺄셈 %d - %d" % (a, b)
  9     return a - b
 10 
 11 def multiply(a, b):
 12     print "곱셈 %d * %d" % (a, b)
 13     return a * b
 14 
 15 def divide(a, b):
 16     return a / b
 17 
 18 
 19 
 20 print "함수만으로 계산해 봅시다!"
 21 
 22 age = add(30,5)
 23 height = subtract(78, 4)
 24 weight = multiply(90, 2)
 25 iq = divide(100, 2)
 26 
 27 print "나이: %d, 키: %d, 몸무게: %d, IQ: %d" % (age, height, weight, iq)
 28 
 29 
 30 # 추가 함수 문제. 일단 써 보세요.
 31 print "문제가 있어요."
 32 
 33 what = add(age, subtract(height, multiply(weight, divide(iq, 2))))
 34 
 35 print "결과:", what, "손으로 계산할 수 있나요?"


결과

[root@localhost re_python]# python ex21.py
함수만으로 계산해 봅시다!
덧셈 30 + 5
뺄셈 78 - 4
곱셈 90 * 2
나눗셈 100 / 2
나이: 35, 키: 74, 몸무게: 180, IQ: 50
문제가 있어요.
나눗셈 50 / 2
곱셈 180 * 25
뺄셈 74 - 4500
덧셈 35 + -4426
결과: -4391 손으로 계산할 수 있나요?

이해중
22~25번줄의 내용인 변수들
 22 age = add(30,5)
 23 height = subtract(78, 4)
 24 weight = multiply(90, 2)
 25 iq = divide(100, 2)

이걸 하면 함수의 리턴값이 변수에 저장됨과 동시에 아래와 같은 값을 순서대로 표출

덧셈 30 + 5
뺄셈 78 - 4
곱셈 90 * 2
나눗셈 50 / 2

리턴 된 변수 저장값
age 35
height 74
weight 180
iq 50


27번줄
27 print "나이: %d, 키: %d, 몸무게: %d, IQ: %d" % (age, height, weight, iq)

결과는 아래와 같이 리턴된 값이 변수에 들어가있으므로 더하고 빼고 곱하고 나눈 값이 들어간다.
나이: 35, 키: 74, 몸무게: 180, IQ: 50

33번줄
33 what = add(age, subtract(height, multiply(weight, divide(iq, 2))))
가장 머리 터지는건 마지막의 33번줄이며 이게 어떻게해서 아래와 같이 나오는지 정리
계산기가 답인것같다.

나눗셈 50 / 2
곱셈 180 * 25
뺄셈 74 - 4500
덧셈 35 + -4426
결과: -4391 손으로 계산할 수 있나요?

먼저 복잡하게 이루어진 부분을 마지막부터 분해해봤다.
한줄만 그대로 보고 이해하려면 멘탈이 한 서너번은 터지니까.
이게 아닐수도 있겠지만.

add(age, subtract(height, multiply(weight, divide(iq, 2))))
subtract(height, multiply(weight, divide(iq, 2)))
multiply(weight, divide(iq, 2))
divide(iq, 2)

그리고 마지막부터 차례대로 계산기를 통해 정리해봤다.
지금 함수 또는 변수의 값이 두개로 나온이유는 거기에 값이 그렇게 설정되있다는 뜻이다.

divide(iq, 2)
divide(50, 2)
iq의 경우 위에서 함수로 계산이 되어 50이며 지정된 divide는 나눗셈 함수이므로
50에서 2를 나눈다. 즉 아래와 같이 진행된후 리턴값이 저장된다.
나눗셈 50 / 2
값 25

multiply(weight, divide(iq, 2))
multiply(180, 25(50, 2))
weight의 경우 값이 180이며 거기에 divide의 25를 multiply 함수로 곱한다.
곱셈 180 * 25
값 4500

subtract(height, multiply(weight, divide(iq, 2)))
subtract(74, 4500(180, 25(50, 2)))
height의 경우 값이 74이며 거기에 multiply의 4500을 subtract 함수로 뺀다.
뺄셈 74 - 4500
값 -4426

add(age, subtract(height, multiply(weight, divide(iq, 2))))
add(35, -4426(74, 4500(180, 25(50, 2))))
age의 경우 값이 35이며 거기에 subtract의 -4426을 add의 함수로 더한다.
덧셈 35 + -4426
값 -4391

35 print "결과:", what, "손으로 계산할 수 있나요?"
최종적인 답은 -4391이 된다. 그걸 print로 호출하면 아래와같은 내용이 나온다.
결과: -4391 손으로 계산할 수 있나요?