그럼 여기서 들 수 있는 의문점이 따옴표 3개짜리도 원래는 문자열을 작성하는 용도잖아요? 그럼 왜 이게 가능한 것일까요...
알고보니 이유는 간단했습니다.
파이썬의 특징 중 하나
파이썬은 그냥 숫자던 문자열이던 마지막 행에 넣으면 실행시켜주는 특성이 있어요 이 셀을 확인해보면 중간에 10은 출력이 안됐죠? 중간에 있기 때문이에요 이 특성을 이용하면 바로 문자열을 주석처럼 사용 할 수 있는 것이에요
이렇게 말이죠
그후 자료형, 변수에 대한 이야기를 하면서 파이썬이 변수에 값을 할당하는 방법에 대해서 이야기를 했었어요.
파이썬은 잘 생각해보면 자료형을 따로 지정하지 않잖아요? 그 이유를 이야기 해볼까해요(본 수업에서는 간단히 객체에 저장하기 때문이라고 설명 해 주셨지만 왜 그렇게 되는지 궁금하잖아요?)
자 변수에 무언가를 할당하면 이 데이터는 어디에 저장할까요? 정답은 주기억장치 RAM입니다. 그리고 이 램이라는건 아파트라고도 비유할 수도 있습니다. 아파트마냥 주소지가 있는거죠 101호 102호 이런 느낌으로 말이죠 자 그럼 어떻게 저장하는지는 저급언어에 가까운 C를 보면 알 수 있어요 C에서 변수를 선언하고 값을 할당하면 이 변수는 포인터를 활용해서 RAM상에 데이터를 저장하고 그 주소값을 포인터에 넣어둬요 출처: https://velog.io/@youngeui_hong/C-%EC%96%B8%EC%96%B4-%EA%B8%B0%EC%B4%88-%ED%8F%AC%EC%9D%B8%ED%84%B0
이게 바로 포인터를 예쁘게 그린거에요
우리에겐 포인터에 대한 디테일은 필요 없으니깐 딱 이정도만 알고 계시면 됩니다 중요한건 그 메모리를 가리킨다는거에요(좀 더 디테일하게 들어가면 그 길이의 첫 위치를 가리켜요(만약에 101호 102호 103호의 벽을 허물어서 한 집으로 만들었다면 101호를 가리키는거에요))
C는 자료형의 길이라던가 이런 부분이 영향을 주잖아요?, 파이썬은 C로부터 파생된 언어 중 하나입니다 그러니 C언어의 특징을 가지고 있겠죠(파이썬이 애초에 Cpython이 기본적인 구현체인걸 보면 더더욱 그럴 것 같아요) 그래서, 결론은 파이썬도 C와 같이 포인터를 활용해서 RAM상에 데이터를 저장하고 그 주소값을 포인터에 넣어둔 것이죠! "근데 파이썬은 C와는 다르게 변수 선언시에 자료형을 안 넣잖아요" 자 여기서부터가 진짜 게임입니다. 이걸 생각해봅시다 만약에 우리가 프로그래밍 언어를 만들건데 파이썬처럼 자료형을 생략하게 하고 싶다면 어떻게 해야할까요? 단일의 자료형을 가지고 있으면 되지 않을까요? 어? 파이썬에는 이걸 구현 해낼 만한 특징이 있습니다 바로 "객체 지향 언어"라는 사실이죠 이것도 간단히 이야기하면 각각의 숫자를 객체 안에 넣어서 메모리에 저장하는 겁니다! 이러면 굳이 자료형을 지정하지 않더라도 해결 가능하겠는데요? 어차피 이 객체를 가리킨다면 필요한 길이는 고정인 것이잖아요? 예를들자면 A1 종이(변수에 할당된 값)를 접고 접어서 A4 종이 상자(객체)에 넣어서 101호에 넣고 B4 종이(변수에 할당된 값)를 A4 종이 상자(객체)에 넣어서 102호에 넣어둔 것이죠 그래서, 자료형을 명시하지 않아도 해결되는겁니다. 그럼 이 값은 어떻게 꺼내오냐고요? 그냥 객체에서 평범하게 값을 받는 함수를 쓰면 됩니다.이건 클래스쪽을 배우면 아시게 될거에요 덤으로 파이썬은 -5~256까지는 이미 객체가 만들어져 있어 is를 사용하여 비교하면 같은 객체에 닿아요 반대로 저 범위 밖에 숫자는 선언 할 때마다 새로운 객체로 만들어요
이래서 파이썬을 공부하더라도 자료형이라던지 이런 숨겨진 요소들을 공부해야하는겁니다(재밌어요 찾다보면)
이후에는 연산자와 조건문에 대해서 이야기 했는데 강사님께서 넘어가신 부분이 있어서 더 적어봐요(잘 사용하진 않았던 것 같아요)
바로 비트연산자에요 2진수 연산이 필요할때나 보통 사용하지만 언젠간 쓸모가 있을 수도 있으니깐 알아두면 좋을 것 같아서 링크로만 남겨놔요
아직 언어와 친근하지 않고 구현 자체도 익숙하지 않다면 우리에게 가장 친근한 언어인 "한국어"로 구현하고 이걸 파이썬이란 언어로 번역하면 된다는거죠
만약 구구단을 2단부터 9단부터 출력하는 문제가 있다고 생각해봅시다. 그럼 당신은 어떻게 구현을 시작할까요? 저같이 약간 익숙한 사람은 그냥 구현해버리지만 익숙하지 않다면 이렇게 구현해보는 것도 방법입니다 2 X 1 = 2고 2 X 2 = 4고...... 9 X 9 =81이네 그럼 이걸 그대로 구현하는겁니다 print( "2 X 1 = ", 2) .....
print( "9 X 9 = ", 81) 맞아요 좋은 답변이죠
지금까지 배운걸 기준으론 말이죠 자 미래의 지식을 조금만 빌려와 봐요 반복문입니다 아 그럼 2단에 대해서 1부터 9까지 반복해서 곱하는 것이구나 아 그럼 3단에 대해서 1부터 9까지 반복해서 곱하는 것이구나 ....
아 그럼 9단에 대해서 1부터 9까지 반복해서 곱하는 것이구나 이렇게요 이걸 그대로 구현해볼게요 for i in range(1,10): print("2 X ", i, " = ", 2 * i) ..... for i in range(1,10): print("9 X ", i, " = ", 9 * i) 여기까지 발전 시켰어요! 좋아요!
근데 생각해보니깐 지금의 방법을 한번 더 하면 압축이 가능할 것 같아요 2단에서 9단까지 1부터 9까지 반복해서 곱하는 것이 구구단이었네! 이걸 구현해볼까요? for i in range(2,10): for j in range(1,10): print(i, " X ", j, " = ", i * j)
이렇게 구현됩니다 수학적으론 이거 이상으론 압축이 힘들겠죠? 그럼 이게 만족스러운 답변이 되는겁니다.(이래서 은근 프로그래밍에서 수학적인 지식이 중요해요)
이런 순서로 구현을 준비하고 발전시켜나가면 됩니다.
또 여러 표기법이라던지
변수 첫글자 소문자 + 카멜 함수 첫글자 소문자 + 카멜 클래스 첫글자 대문자 + 카멜 상수 첫 글자 대문자 + 스네이크