11/27, 셋째 날의 TIL
3일차가 되어가니 처음보다 집중하는 시간도 많이 늘고, 아침 9시~저녁 9시의 생활이 익숙해져 가는 것 같다.
어제 계획했던 대로 파이썬 강의는 모두 완강을 했고, 함수 예제 40문도 모두 풀어보았다. 먼저 함수 부분의 예제에서 있었던 내용들을 짚어보자면
함수 예제
- range
함수에서 반복문을 쓸 때 for문을 많이 쓰는데, 이때 range를 이용해 순회를 하려고 할 때 주의해야 할 점이 있었다.
바로 시작점이 있는지, 혹은 그냥 숫자 하나를 범위로 할지인데
range(10)
range(1, 10)
이 두 가지의 경우이다.
첫 번째, range(10)의 경우에는 0~9로 설정이 되는 반면, 두 번째 range(1, 10)의 경우에는 1~9로 설정이 된다. 반복 횟수도 반복 횟수이지만 이 차이로 오류가 생길 수 있는데,
짝수를 출력하는 함수를 만든다고 해보자.
숫자 하나로 범위를 지정하는 경우
def even_number(number):
for i in range(number):
if i % 2 == 0:
print(i)
even_number(5)
이 경우에, 범위는 0~4가 되어 결과값은 0, 2, 4가 나올 것이다. 이는 범위에 0이 포함되게 되는데, 0을 2로 나누면 나머지가 0이 되므로 결과값에 포함이 되는 것이다.
이 문제를 해결하려면
if i % 2 == 0 or i != 0:
이렇게 i가 0일 경우를 제외하거나,
def even_number(1, number):
for i in range(number):
if i % 2 == 0:
print(i)
even_number(5)
과 같이 범위 시작을 1로 바꾸게 되면 0을 생각하지 않아도 된다.
+추가로, range(1, n)은 1 ~ n-1까지 이므로 1 ~ n을 범위로 하고 싶다면 range(1, n+1)로 해야 한다.
함수를 정의하기 전에 호출하는 경우
가끔 정신을 놓으면 이런 경우가 생기는데,
greet()
def greet():
print('Hi!')
이런 경우이다. 이는 절차지향적 언어로 위에서부터 순서대로 코드를 실행하는데, 함수를 정의하기 전에 함수를 호출하면 당연히 정의된 함수가 없으므로 에러가 뜬다.
비유하자면 요리를 해야지 밥을 먹는데, 밥을 먹고 요리를 하는 상황인 것이다. 당연히 요리된 음식이 없으니 밥을 먹을 수가 없다.
이처럼 파이썬은 위에서부터 차례대로 실행되므로, 호출하고자 하는 함수가 있다면 꼭 정의 후에 쓰자.
예제를 풀면서
그냥 예제도 많이 풀어보았는데, 탈출문자에 대해서 내가 처음할 때 겪었던 문제가 있다면
\(역슬래시)를 그냥 출력하고싶은데 자꾸 에러가 나거나, 출력 결과의 줄바꿈은 하지 않고 그냥 두줄로 치고 싶을 때
print 함수를 이용해서 문자열을 출력해야되는데 중간에 \ 가 포함되어 있으면, 거의 에러가 난다.
이때 \를 그대로 출력하려면, 그 앞에 \를 하나 붙이면 된다.
print('역슬래시출력\')
그냥 이렇게 입력하게 되면 오류가 나지만,
print('역슬래시출력\\')
이렇게 되면 \가 그대로 출력되는 것이다.
그리고 추가적으로 코드가 너무 길어서 한줄의 코드를 결과상에서 말고 셀에서 두줄로 나누고 싶은 경우에도 \를 쓰면 되는데,
print('한 줄을 두줄로 바꾸기
두줄')
그냥 이렇게 출력하면 이상황에서도 마찬가지로 오류가 나고,
print('한 줄을 두줄로 바꾸기\
두줄')
이렇게 \이후에 엔터를 치면 에러 없이 다음 줄에서 계속 코드를 칠 수 있다.
왼쪽 반에 다른 창을 키고 오른쪽 반에 코드를 작성할 경우, 긴 코드를 작성할 때 유용했다.
String format
이것은 print 함수와 관련된 내용으로, 변수를 출력할 때 어떤 방법을 쓸 지에 대해서다.
먼저 변수 네 개를 선언해볼건데,
name = 'Min'
num = 100
flo = 3.14
cha = 'a'
name은 string, num은 int, flo는 float, cha는 char(한글자)의 타입이다.
1. % 사용하기
오래된 방법이고, 사용하기에 불편함이 있다.
print('%s 문자열' %name)
print('%d 숫자' %num)
print('%f 실수' %flo)
print('%c 한글자' %cha)
이와 같이 따옴표 안에 변수의 부분에 %와 타입의 약자를 같이 입력해주면 되는데,
string의 경우 %s, int의 경우 %d(decimal로 십진수란 의미이다.), float의 경우 %f, char의 경우 %c를 변수의 위치에 적은 다음, 따옴표를 닫은 후 % 뒤에 변수의 이름을 적으면 된다.
Min 문자열
100 숫자
3.140000 실수
a 한글자
다음과 같이 결과값이 나온다.
2. .format 사용하기
이것도 마찬가지로 오래된 방법이고, 사용하기에 불편함이 있다.
print('{} 문자열'.format(name))
print('{} 숫자'.format(num))
print('{} 실수'.format(flo))
print('{} 한글자'.format(cha))
전과 비슷한데, 1번보다는 더 편리한 점이 변수 타입마다 다르게 하는 것이 아니라, 변수의 자리에 {}, 중괄호를 입력해놓고 그 뒤에 .format(변수이름) 을 입력하면 아까와 같은 결과값이 나온다.
이 경우에도 결국 변수자리를 비워놓고 나중에 쳐야하므로 많이 번거롭다.
Min 문자열
100 숫자
3.14 실수
a 한글자
이 경우에도 결과값은 같다.
(실수값 결과가 다른 이유는, %f가 소수점 여섯자리까지 표현하게 되어 있기 때문이다.)
3. f-string 사용하기
print(f'{name} 문자열')
print(f'{num} 숫자')
print(f'{flo} 실수')
print(f'{cha} 한글자')
세 방법 다 사용해봤을 때 이게 제일 편한 방법 같고, 최근에 많이 쓰이는 것 같다.
원래는 print('~~~')처럼 괄호 열고 바로 따옴표를 쓰지만, 이 경우에는 f를 쓴 후에 따옴표를 쓴다.
이 경우에, 변수 자리를 비워놓고 나중에 따로 추가할 필요 없이, 변수 자리에 {}중괄호를 넣고 그 안에 변수 이름만 넣으면 된다.
Min 문자열
100 숫자
3.14 실수
a 한글자
마찬가지로 이렇게 결과값이 나온다.
이렇게 한 코드를 작성하는데도 방법이 다르고, 복잡한 동작을 구현해야 할수록 코드는 더 자유로워지고 복잡해진다. 이 부분에 대해서 멘토링을 받았는데, 정해진 정답은 없지만 PEP8과 같은 기준을 따라하는것은 도움이 될 수 있다.
이것 외에도 변수 이름을 의미를 알 수 있게 정하거나, 여러번 호출하는 경우에는 함수를 만드는 등 여러가지 도움이 될 만한 습관을 지금부터 미리 만들어놔야겠다고 생각했다.
코드는 내가 짜지만, 나중에 팀원들이랑 협업할 때 내 코드를 아무도 이해 못하거나 봤을 때 정리가 너무 안되어 있으면 좋지 않기 때문에 미리 연습을 해놔야겠다.
오늘 하루를 돌아보았을 때, 점점 집중력이 좋아지고 있는 것 같고 팀원들과도 더 편한 분위기에서 많은 내용들을 공유하게 되어 좋았다. 매일 이렇게 얻어가는 내용들도 많아서, 매일 100%를 가져가지는 못하더라도 7~80%씩 완전히 내걸로 만들면 점점 성장하지 않을까 싶다.