겉바속촉
[PYTHON] 파이썬_지역변수, 새로운 함수 디자인 본문
안녕하세요
겉바속촉입니다
!^^!
!!파이썬 시작하기!!
임시 저장 공간으로 지역 변수 사용
지역 변수
- 함수를 호출할 때마다 생성
- 함수가 반환될 때 제거
- 지역 변수의 유효 범위 : 변수가 정의된 행부터 함수 끝까지 --> 함수 밖에서는 사용 불가
- 함수의 매개변수도 지역변수이기 때문에 함수 정의 밖에서는 사용 불가
메모리 모델로 함수 호출 추적
- 파이썬은 함수 호출을 실행할 때마다 그 호출에 쓰이는 지역변수를 저장할 네임스페이스를 생성합니다
- 다음 함수를 보면 x가 여기저기서 쓰이고 있는데 모두 같은 변수일 지 고민해봐야합니다!!!
- 함수 f의 매개변수인 x와 셸에 잇는 변수 x는 서로 다릅니다
TDD : 테스트 주도 개발
어떠한 기능을 만들때
테스트 코드를 먼저 만듭니다
이러한 것을 TDD라고 하는데요
새로운 함수 디자인 : 방법
1. 예제 -> 함수에 어떤 이름 붙일지, 함수에 어떤 인수 필요할 지, 함수가 어떤 정보를 반환할 지 생각
2. 헤더 -> 예제에서 정한 것을 기반으로 매개변수 이름과 매개변수 타입, 반환 타입 정하고 함수 헤더를 작성
3. 설명 -> 해당 함가 어떤 기능을 하는지 문서화하는 것, 문서화 문자열* 사용
4. 본문 -> 코드 작성
5. 테스트 -> 만들었던 예제들이 본문을 모두 통과하는 지 예제를 실행해서 올바른 지 확인!! : TDD
문서화 문자열*
: documentation string, docstring --> 세 개의 따옴표를 사용하여 그 중간에 있는 내용이 바로 설명서!!
함수 디자인 방법은 위에서처럼 총 5단계로 구성되어있고
복잡한 함수 개발할 때에 오히려 시간을 절약시켜줍니다:)
Visual Studio 활용해서 해보기
저는 이제 vscode를 사용하려고 합니다
C 밑에 python이라는 폴더를 만들었습니다:)
vscode를 열어서 저 python폴더를 open!!
다음과 같이 days_difference.py 라는 명의 파일을 만들었습니다:)
그럼 필요한 것들 설치해주시고!!
시작해볼게요~
혹시 vscode 설치해야한다면 다음 포스팅 참고
2021/01/04 - [IT 일기 (상반기)/PYTHON] - [PYTHON] 파이썬 설치 및 VScode 설치
참고로 vscode에서 코드를 작성하고 실행 방법은 두가지입니다
본격적으로 하기 전에 실행 방법 먼저 살펴볼게요:)
디버깅 모드 ; F5
내가 걸어둔 브레이크 포인트에서 실행이 멈춤!!
디버그 모드로 프로그램을 실행하는 건데 스텝 단위로 프로그램을 실행하고 값의 변화 확인이 가능
실행 모드 ; Ctrl + F5
실행이 더 중요하다면 우선 디버깅 없이 실행시키는 것
그럼 그냥 값이 콘솔창에 찍히는 것입니다
하지만 내가 원하는 구성대로 값이 들어가고 찍히는 지 궁금하다면 디버깅 모드로 봐주시는 게 더 좋겠죠??
이제 새로운 함수 디자인을 5단계에 걸쳐서 해보도록 하겠습니다!!
EX1) 미래요일 계산하기
1. 예제 작성
2. 헤더 작성
3. 설명
4. 본문
5. 테스트
콘솔창 확인
즉 우리가 설명부분에서 작성한 테스트 코드들에 대한 예상값이 다음 실제 결과값과 동일한 지 확인!!
전체 코드 참고
def days_difference(day1: int, day2: int) -> int:
'''
day1과 day2 간 날짜수 차이를 반환한다.
이떄 day1과 day2는 (그 해의 몇 번째 날인지 가리키는) 1에서 365사이의 값이다.
>>> days_difference(200, 224)
24
>>> days_difference(50, 50)
0
>>> days_difference(100, 99)
-1
'''
return day2 - day1
print(days_difference(200, 224) == 24)
print(days_difference(50, 50) == 0)
print(days_difference(100, 99) == -1)
EX2) 미래 요일 계산하기
1. 예제 작성
2. 헤더 작성
3. 설명
4. 본문
5. 테스트
콘솔창 확인
즉 우리가 설명부분에서 작성한 테스트 코드들에 대한 예상값이 다음 실제 결과값과 동일한 지 확인!!
하지만 예측한대로 나오지가 않쥬? ㅠㅠㅠㅠㅠ
그럼 본문이 틀렸다는 겁니다
return문을 고쳐줘야겠네요!!
요거에서
당연히 사칙연산 중에서 나눗셈이 우선순위이기 때문에 우리가 원하는 답이 나오지 않습니다;;
그럼 괄호가 필요하겠네요 --> (current_weekday + days_ahead) % 7
근데 또 문제가 get_weekday(6,1)의 값이 0이 나와버립니다
그래서.....
요고로!!!
그리고서 테스트해봤더니 제대로 나왔습니다
오류 잡기 전 전체코드
#미래 요일 계산
def get_weekday(current_weekday: int, days_ahead: int) -> int:
'''
current_weekday에서 days_ahead만큼 지나면 무슨 요일인지 반환한다.
>>> get_weekday(3, 1) # 오늘이 화요일(3)이라면 1일 후는 무슨 요일인가?
4 # 수요일(4)
>>> get_weekday(6, 1)
7
>>> get_weekday(7, 1) # 특정 값을 기준으로 처리가 달라지는 경우, 그 값을 경계값이라고 함
1
>>> get_weekday(1, 0)
1
>>> get_weekday(4, 7)
4
>>> get_weekday(7, 72) # 오늘이 토요일(7)인 경우, 7주하고 2일 후는 무슨 요일인가?
2
'''
return current_weekday + days_ahead % 7
print(get_weekday(3, 1))
print(get_weekday(6, 1))
print(get_weekday(7, 1)) # 예측: 1, 실측: 8
print(get_weekday(1, 0))
print(get_weekday(4, 7))
print(get_weekday(7, 72)) # 예측: 2, 실측: 9
오류 잡은 후 전체 코드
#미래 요일 계산
def get_weekday(current_weekday: int, days_ahead: int) -> int:
'''
current_weekday에서 days_ahead만큼 지나면 무슨 요일인지 반환한다.
>>> get_weekday(3, 1) # 오늘이 화요일(3)이라면 1일 후는 무슨 요일인가?
4 # 수요일(4)
>>> get_weekday(6, 1)
7
>>> get_weekday(7, 1) # 특정 값을 기준으로 처리가 달라지는 경우, 그 값을 경계값이라고 함
1
>>> get_weekday(1, 0)
1
>>> get_weekday(4, 7)
4
>>> get_weekday(7, 72) # 오늘이 토요일(7)인 경우, 7주하고 2일 후는 무슨 요일인가?
2
'''
return ( current_weekday + days_ahead -1 ) % 7 + 1
print(get_weekday(3, 1))
print(get_weekday(6, 1))
print(get_weekday(7, 1)) # 예측: 1, 실측: 8
print(get_weekday(1, 0))
print(get_weekday(4, 7))
print(get_weekday(7, 72)) # 예측: 2, 실측: 9
EX3) 내 생일 요일 계산하기
1. 예제 작성
2. 헤더 작성
3. 설명
4. 본문
(days_difference는 맨위의 꺼 활용, get_weekday는 바로 위의 꺼 활용)
5. 테스트
콘솔창 확인
즉 우리가 설명부분에서 작성한 테스트 코드들에 대한 예상값이 다음 실제 결과값과 동일한 지 확인!!
전체 코드
# 내 생일은 무슨 요일일가요?
def get_birthday_weekday(current_weekday: int, current_day: int, birthday_day: int) -> int:
'''
요일은 current_weekday, 그 해의 몇 번째 날인지는 current_day, birthday_day가 무슨 요일인지를 반환한다.
current_weekday는 현재 요일로서 1 ~ 7 이며, 오늘이 일요일(1)인지, 월요일(2), 토요일(7)인지 등을 나타낸다.
>>> get_birthday_weekday(5, 3, 4) # 오늘이 올해의 3번째 날이고 목요일(5)이라면 생일(올해의 4번째날)은 무슨 요일일까?
6 # 4 - 3 이후의 날짜의 요일은 금요일(6)
>>> get_birthday_weekday(5, 3, 10) # 날짜 차이가 7일(10 - 3)이면 같은 요일
5
>>> get_birthday_weekday(6, 116, 3) # 오늘이 올해의 116번째 날이고 금요일(6)이라면 생일(올해의 3번째날)은 무슨 요일? (3-116) 이전의 날짜 요일은 17주 이전(119일 이전)으로 이동 후 6일 경과
5
'''
days_diff = days_difference(current_day, birthday_day)
return get_weekday(current_weekday, days_diff)
print(get_birthday_weekday(5, 3, 4))
print(get_birthday_weekday(5, 3, 10))
print(get_birthday_weekday(6, 116, 3))
'IT 일기 (상반기) > PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬_텍스트 처리 (0) | 2021.01.05 |
---|---|
[PYTHON] 파이썬_IDLE 활용하기 (0) | 2021.01.04 |
[PYTHON] 파이썬_제공되는 함수, 사용자 정의 함수, 메모리 주소 (4) | 2021.01.04 |
[PYTHON] 파이썬_변수, 객체, 할당, 오류, 여러줄 (0) | 2021.01.04 |
[PYTHON] 파이썬 시작하기 (0) | 2021.01.04 |