목록All (86)
에르노트
오랜만에 셀레니움 모듈을 이용한 크롤링 작업을 할 일이 생겨서 아나콘다 패키지를 설치했다. 그런데 황당한 일을 겪어서 뜻밖의 삽질을 해야했고, 아직 국내에 관련 내용이 많이 없는 것 같아서 기록을 남겨둔다. 파이참도 설치했고, 아나콘다도 설치했으니 다음은 Selenium 라이브러리를 설치할 차례다. 자연스럽게 conda install selenium 이라는 명령어를 입력한다. 그런데... 상상도 못한 에러에 직면하게 된다. 방화벽 관련 문제라고도 하고, SSL 인증서 관련 문제라고도 하는데 잘 모르겠다. 중요한건 어떻게 해결하는가이다. 해결법 C:\Anaconda3\Library\bin 경로에 있는 파일 두 개를 C:\Anaconda3\DLLs 경로로 복사해주면 된다. 해당 파일들은 libcrypto-1..
좌표를 계산해야 할 때 (1,1)이라고 주어지면 깔끔하다. 그냥 그대로 사용하면 된다. x축으로 한칸 이동했을 때 (2,1)이다. 하지만 (A,1)이라고 주어질 수도 있다. 그러면 x축으로 한칸 이동했을 때 (B,1)로 옮겨주어야 한다. [A,B,C...] 형태로 좌표 배열을 만들어두고 인덱스를 옮겨다닐 수도 있겠지만 비효율적이고 또 불편하다. 그래서 (A, 1)이라고 입력이 들어오더라도 (1,1)로 변환할 수 있다면 문제가 좀 더 쉬워진다. 다행히 파이썬에서는 내장 함수 ord()를 이용하여 간단하게 문자를 유니코드 정수로 변환할 수 있다. ord('A') == 65 ord('B') == 66 ord('C') == 67 반대로 내장 함수 chr()를 이용하여 유니코드 정수를 받아서 문자를 반환할 수도 ..
알면 알수록, 그리고 쓰면 쓸수록 파이썬은 참 잘 만들어진 언어라는 생각이 든다. 코틀린이나 모던 자바스크립트 같은 최신 언어들도 다뤄봤지만 역시 파이썬이 가장 직관적이고 편한 것 같다. 아무튼 파이썬에는 다소 독특한 리스트 초기화 방법이 있다. 바로 리스트 컴프리헨션(List Comprehension)이다. 파이썬에서는 대괄호([]) 안에 조건문과 반복문을 사용해서 표현된 식으로 리스트를 초기화 할 수 있고, 이를 리스트 컴프리헨션이라 한다. 그럼 왜 이걸 리스트 컴프리헨션이라고 부를까? 영단어 'Comprehension'에는 '이해, 포용, 포괄'이라는 뜻이 있다. 즉, 대괄호 안에 어떤 수식을 적더라도 리스트로 감싸안아 준다는 뜻으로 이해하면 편하다. 따라서 리스트 컴프리헨션의 결과(반환값은)는 항..
개인적으로 그닥 좋아하지는 않지만, 재귀함수는 코딩을 하다보면 언젠가는 사용해야 할 필수불가결한 로직 형태의 하나이다. 그런데 간결함을 추구하는 파이썬의 철학 때문인지 기본으로 설정된 재귀 깊이(1000)가 너무 얕다. 그래서 코딩테스트 등에서 재귀 함수 관련된 문제를 풀 때는 로직을 제대로 설계했어도 테스트케이스를 통과하지 못할 수도 있다. 그럴 때는 간단히 setrecursionlimit() 함수를 이용하여 문제를 해결할 수 있다. setrecursionlimit()은 표준모듈 sys에 들어있으므로 미리 import해서 사용한다. import sys sys.setrecursionlimit(10**6) 이러면 백만 번까지 재귀를 돌릴 수 있게 된다. 컴퓨터 성능이 따라주는 선에서 얼마든지 Recursi..
c++ 또는 자바에 'this'라는 키워드가 있다면 파이썬에는 'self'라는 키워드가 있다. 그 뜻은 쉽게 유추가능한대로 '클래스의 인스턴스 자기 자신'이라는 뜻이다. 양쪽 다 실전에서 상당히 빈번하게 사용되는 키워드임은 분명하다. 그런데 c++이나 자바에서는 적어도 this 키워드의 사용을 강제하지는 않는다. 하지만 재밌게도 파이썬에서는 메소드를 정의할 때 self의 사용을 강제하는 것처럼 보인다. class A: def say_a(): print('a') a = A() a.say_a() 위의 코드는 다음과 같은 에러 메세지를 남긴다. TypeError: say_a() takes 0 positional arguments but 1 was given 위 에러 문구는 파이썬에서 클래스를 다루다보면 굉장히..
파이썬 논리 연산자를 사용해보면 파이썬의 철학을 느낄 수 있다. 난해한 것보단느 복잡한 것이, 복잡한 것보다는 단순한 것이 더 낫다. 그리고 사소한 부분일지라도 가독성은 정말로 중요하다. 그런 취지에서인지 파이썬은 &&, ||, ! 등의 기호를 완전히 배제하고 영단어 그대로를 연산자로 사용하고 있다. AND 연산자 print(True and True) #True print(True and False) #Fasle print(False and False) #Fasle and 연산자는 피연산자 모두가 True 일때만 True를 반환한다. 다시 말해 피연산자 하나라도 False이면 False를 반환한다. OR 연산자 print(True or True) #True print(True or False) #True..
파이썬에서는 C관련 언어들에서 흔히 보이는 'try~ catch~' 대신에 'try: except:' 형태로 예외를 처리한다. 우선 파이썬에서 흔히 볼 수 있는 예외(에러) 상황들을 정리해보자. 1. Value Error list = [1.0, 2.0, ''] for i in list: print(float(i)) 문자열을 float() 함수의 인자로 넣으면 당연히 float 타입으로 변환할 수 없으므로 ValueError가 발생한다. 2. Zero Division Error a = 1 b = 0 c = a/b 가끔 정신없이 코드를 짜다보면 종종 발생하는 에러.. 3. Index Error list = [1, 2, 3] print(list[3]) 실제로 존재하지 않는 인덱스에 대해서 접근하려 할 때 발생..
정말 오랜만에 블로그에 글을 남긴다. 현재 글쓴이의 신분은 군인이며 공군에서 복무중이다. 그래도 일병 때는 나름대로 공부하면서 정리한 것들을 간간히 남겼었는데, 상병을 달 때쯤부터는 스스로 많이 나태해졌던 것 같다. 이번 포스팅을 계기로 뭐라도 새롭게 목표를 잡고 조금 더 의미있는 시간을 보내고자 다짐해본다. 국가기술검정제도(국기검)를 통해 군대에서 정보처리산업기사 자격증 시험을 응시했다. 사실 커리어에 있어서 그닥 유의미한 자격증은 아니라고 생각했지만 포상휴가를 따낼 목적이 컸다. (공군에는 병사들의 자기계발을 촉진하기 위해 자격증 취득에 성공하면 포상휴가를 지급하는 규정이 있다) 결과적으로는 한창 나태하던 시기에 그나마 생산적인 시간을 보내는 계기가 되어준 것 같다. 정말 오랜만에 책을 피고 펜을 잡..
2016 할로윈 게임이 재편되어 2020년 할로윈을 기념하여 돌아왔다. 게임의 정식 명칭은 '매직 캣 아카데미'이다.게임 자체는 매우 단순해서 그저 유령 위에 나오는 심볼을 마우스로 따라그려서 유령을 물리치면 된다. 그런데 이게 또 은근히 묘한 긴장감이 있고 중독성이 느껴진다! 게임을 클리어하고 나면 플레이 링크를 복사할 수 있는데 아래에 그 링크를 달아둔다. 플레이 링크Googlewww.google.com원래 게임 자체는 구글 두들 형태이므로 할로윈데이에 구글 메인페이지를 통해 접근할 수 있다. 이처럼 원래 구글 로고가 있어야 할 자리에 특별히 게임 플레이 로고가 들어가있는 것을 확인할 수 있다. 어떤 기술로 구현한건지는 모르겠지만 신기하게도 모바일에서도 완벽하게 잘 돌아간다. 언택트 시대에 집에서 간..
ES6 이후로 자바스크립트에 객체 확장 표현식과 구조 분해 할당이 추가되면서 객체를 다루기가 한결 수월해졌다. 객체 확장 표현식(Enhanced Object Property) 기존 let x = 0 let y =0 let obj = {x:x, y:y} //Original let obj2 = {method1: function(){console.log("Method 1")}} //Original let key1 = 'key1' let combined = {}; combined[key1 + 'key2'] = 'abc' //Original console.log(obj) console.log(obj2) console.log(combined) 객체 확장 표현식 let x = 0 let y =0 let obj = {..