10-4. 프로젝트 3 : 10 이하 숫자만 곱해주는 함수
프로젝트 3번을 시작하기 전에 한 함수를 만들어보며 몸을 풀어보겠습니다.
만들 함수는 input 값이 둘다 정수라면 두 정수를 나눴을 때의 값을 구해주고,
입력된 값이 정수가 아니라면 '정수만 계산 가능합니다'라고 출력하고 결과값은 None으로 출력하는 함수입니다.
함수를 만들기 위해 차근차근 생각해봅시다.
- 우선 함수를 만들 때는 간결하면서도 납득이 가는 함수명을 지어주면 좋습니다. 정수만 나누는 함수이기 때문에 int_divider라고 명명하겠습니다.
- 그 다음은 몇 개의 매개 변수가 필요한지 생각해봅니다. 여기서는 나누기를 시행할 두 개의 매개변수가 필요하지만경우에 따라 가변인수가 더 편리할 수도 있으므로 다양한 각도로 생각해봐야 합니다.
- 그 다음은 주어진 내용에서 우선 순위를 찾아 코딩 전략을 짜야 합니다. 이 문제 상황에서는 나누기보다 정수인지 정수가 아닌지 판별하는 일이 먼저 시행돼야 합니다. 그리고 정수일 때만 나누기를 진행하면 됩니다.
그럼 직접 코드를 짜보도록 하겠습니다.
먼저 인수가 정수인지 어떻게 판별할지를 짜야 합니다. 고민하다가 초반에 배운 int라는 자료형을 사용하면 되겠다고 생각합니다. 그래서 아래와 같이 코드를 짰습니다.
정수입니다
코드가 잘 돌아갑니다만 오류가 없는지 확인하기 위해서 x에 10대신에 10.0을 할당해보겠습니다.
x는 그래도 정수인데 float 모양이 되어서 의도와 다르게 틀린 코드가 되었습니다. 이렇게 의도와 다르게 코드가 짜지는 일은 아주 자주 있는 일입니다. 어떻게 해결할 수 있을지 생각을 해보다가 너무 길어지면 구글링을 하는 것을 추천합니다. 남의 코드를 보고 내가 체화하는 것도 코딩 공부에 일부이기 때문입니다.
그런데 여기서는 정수의 정의를 다시 짚고, 또 그리고 저희가 2의 배수와 5의 배수를 어떻게 구별했는지 떠올려 봅시다. 맞습니다. 나누기의 나머지로 구분했었습니다. 정수란 간단하게 1의 배수입니다. 그 말은 1로 나눴을 때, 나머지가 0이면 정수라는 뜻입니다.
한번 확인해보겠습니다.
정수입니다
10.0도 넣어보겠습니다.
정수입니다
타입과 상관없이 정수인것을 잘 찾아냈습니다.
그 다음부터는 간략해집니다. 정수가 맞다면 나눈 값을 return에 넣고 정수가 아니라면 return에 None을 넣으면 됩니다.
※ 아래# if ~ else 문을 활용하여 함수를 완성해봐요! 영역에 코드를 직접 입력해 보세요.
- 강의 영상을 통해 정답 코드를 확인 하실 수 있습니다.
직접 입력한 함수를 넣고 코드 실행버튼을 클릭해 보세요. 실행이 잘 되었나요?
다음 코드도 실행버튼을 눌러 확인해 주세요!
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/3646693538.py in <module>
----> 1 int_divider(10,3)
/tmp/ipykernel_13/1407768321.py in int_divider(x, y)
1 def int_divider(x, y):
2 # if ~ else 문을 활용하여 함수를 완성해봐요!
----> 3 return answer
NameError: name 'answer' is not defined
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/2678643157.py in <module>
----> 1 int_divider(-1, 0.9)
/tmp/ipykernel_13/1407768321.py in int_divider(x, y)
1 def int_divider(x, y):
2 # if ~ else 문을 활용하여 함수를 완성해봐요!
----> 3 return answer
NameError: name 'answer' is not defined
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/2834399442.py in <module>
----> 1 int_divider(6.0, 2)
/tmp/ipykernel_13/1407768321.py in int_divider(x, y)
1 def int_divider(x, y):
2 # if ~ else 문을 활용하여 함수를 완성해봐요!
----> 3 return answer
NameError: name 'answer' is not defined
여러 예시에 모두 알맞게 출력이 되었다면 본격적으로 프로젝트 3를 시작하겠습니다.
함수에 몇 개의 input이 들어오든지 상관없이, 10 이하 숫자면 모두 곱해주는 함수를 만들어 봅시다.
1, 2, 3이 들어오면 6을 출력하고
2, 3, 4, 5이 들어오면 120을 출력해야 합니다.
인수의 개수가 정해져 있지 않을 때는 가변인수를 활용해야 합니다.
프로젝트 2번에서 빈 리스트에 원하는 요소들을 쌓아갔습니다.
이번 프로젝트에서도 비슷한 맥락으로 함수 안에 1을 넣어서
들어오는 인풋들을 곱해주겠습니다.
잠깐!
input이 10 이하일 때만 곱해야 합니다.
들어오는 인들을 if 조건문으로 확인하겠습니다.
num가 10 초과일 때는 곱하지 않고 넘겨야 합니다.
pass를 활용해볼 수 있겠습니다.
※ 아래 # pass를 활용하여 함수를 완성해봐요! 영역에 코드를 직접 입력해 보세요.
- 강의 영상을 통해 정답 코드를 확인 하실 수 있습니다.
직접 입력한 함수를 넣고 코드 실행버튼을 클릭해 보세요. 실행이 잘 되었나요?
다음 코드도 실행버튼을 눌러 확인해 주세요!
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/2147286624.py in <module>
----> 1 mul(2, 3, 4, 5)
/tmp/ipykernel_13/4137127436.py in mul(*values)
1 def mul(*values):
2 # pass를 활용하여 함수를 완성해봐요!
----> 3 return output
NameError: name 'output' is not defined
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_13/1814458578.py in <module>
----> 1 mul(3, 12, 10)
/tmp/ipykernel_13/4137127436.py in mul(*values)
1 def mul(*values):
2 # pass를 활용하여 함수를 완성해봐요!
----> 3 return output
NameError: name 'output' is not defined
여러 예시에 모두 알맞게 출력이 되었나요?
작성하는데 어려움을 느끼셨다면 아래 영상을 통해 부족한 부분을 학습해 주세요.!!
'언어 > 파이썬' 카테고리의 다른 글
머신러닝 with 파이썬 2강(2)_데이터선택하기,인덱싱, 슬라이딩 (0) | 2024.02.29 |
---|---|
머신러닝 기초 with 파이썬 2강_라이브러리 불러오기, 데이터프레임과 시리즈, 데이터 불러오기 및 저장 (0) | 2024.02.28 |
파이썬 어디까지 파봐썬10강(2)_리스트 평탄화 (0) | 2024.02.26 |
파이썬 어디까지 파봐썬 10강(1)_전화번호 가려주는 프로그램 만들기 (1) | 2024.02.25 |
파이썬 어디까지 파봐썬9강(2)_변수의범위&재귀호출(알고리즘반복) (0) | 2024.02.24 |