파이썬에서 간단하게 랜덤하게 수를 뽑을 때 이용하는 randint와 randrange에 대해서 알아봅시다. 문제를 출제하기 위해 제너레이터를 만드는 경우에는 거의 100%의 확률로 이용됩니다. 그러니, 잘 알아두는 것이 좋겠습니다. random에는 randint가 있어요. 1번째 인자가 1이고, 2번째 인자가 6이에요. res에 add를 10000번 하는데요. rd.randint(1,6)의 결과를 계속 set에 추가하는 것을 의미해요. 파이썬에서 set은 중복을 제거하는 자료구조이니, 6이 여러 번 들어가도 1번만 들어가게 될 겁니다. 결과는 1, 2, 3, 4, 5, 6이 나옵니다. 즉, randint(a, b)는 a 이상 b 이하의 랜덤한 수가 나옵니다. 2개의 수만 받고 있음을 알 수 있어요. 저는..
파이썬 검색 결과
진법은 항상 귀찮습니다. 예를 들어 10진수의 '12345'의 값을 10진수로 출력하거나, 16진수의 '12345'의 값을 10진수로 출력하거나. 이 귀찮음을 해결할 방법이 없을까요? 파이썬에는 int가 있습니다. 사실 저는 단순히 문자열을 정수로 변환하기 위해서 쓰는 줄로만 알았습니다. 이걸 잘 이용하면 k진수를 10진수로 바꿀 때, 대소문자가 오는 경우에 자릿수를 계산하는 귀찮은 처리를 덜 수 있습니다. 예제 몇 개를 보면서 이해해 보도록 하겠습니다. 먼저, 36진수로 표현된 'abcde', 'ABCDE'를 10진수로 바꿉니다. 다음에, 2진수로 표현된 '10110'을 10진수로 바꿉니다. 여기서, base 인자가 들어간 것이 있고, 들어가지 않은 게 있습니다. base 인자가 들어가면, 1번째 인자..
GIL과 lock에 대해 공부하다 보면, 연산이 atomic하다. 그렇지 않다 이야기는 많이 들을 듯 싶습니다. a += 1 같은 것도 사실 바이트 코드로 보면 몇 개의 연산으로 이루어져 있을 겁니다. c python에서 한 줄의 코드에 어떤 바이트 코드들이 들어 있는지 간단하게 확인하는 방법이 없을까요? dis 모듈을 이용하시면 편하게 하실 수 있습니다. 저는 문서에 나 온 것 중, dis 함수만 언급하겠습니다. 나중에, 다른 것이 필요하다면 따로 보는 게 좋을 듯 싶어요. dis 모듈은 뭔지는 잘 모르겠어요. 그런데, Disassembler가 나오고, byte code가 나오는 걸로 보아서는 파이썬 코드를 기계어나, 혹은 바이트 코드로 변환하는 역할을 하는 모양새입니다. 여기에 있는 모듈 중에 우리가..
파이썬에는 ==와 is가 있습니다. 이 둘의 차이를 알아봅시다. 먼저 is 연산자는 identity를 비교합니다. 설명을 보면 알 수 있습니다. 같은 오브젝트를 가리키면 x is y가 참값을 가집니다. 그렇지 않으면, false가 됩니다. 반면에 ==는 동등성을 비교하는 것인데요. 이것만 보면 헷갈리실 수 있으니, 예제를 보겠습니다. dog 객체가 2개 있습니다. a와 b는 'cho'라는 정보를 담고 있는 강아지 객체입니다. 보시면 __eq__하고 __hash__가 재정의 되어 있음을 알 수 있습니다. __eq__는 단지, st만을 가지고 비교하게 됩니다. a와 b의 필드 st의 값은 'cho'로 같았습니다. 그리고, 문자열은 내용이 같으면 참입니다. 어찌 되었던 Dog('cho')와 Dog('cho')..
파이썬에는 dict와 OrderedDict가 있습니다. 이 둘에 대해 간단하게 알아봅시다. 아래 코드를 wandbox에서 python 3.5.0에서 실행시켜 보았습니다. 2번째 줄이 조금 길어보이는데요. 그리 어렵지 않습니다. ord('A')와 ord('Z')는 'A'와 'Z'를 코드로 변환시켜 줍니다. 그러면 i는 'A'의 코드값부터 'Z'의 코드값까지 돌 겁니다. 그런데, 앞에 chr(i)가 있으니, 결론적으로 li는 'A'부터 'Z'까지 들어가 버리게 됩니다. 3번째 줄에서는 li 안에 있는 것들을 돌면서, 'A', 'B', ... , 'Z' 순서대로 넣고 있습니다. 다음에, 5번째 줄에서는 dic를 순회하면서 요소들을 모두 출력합니다. 결과는 위와 같습니다. 중요한 것은 넣은 순서가 자료구조 내에..
최근댓글