Thoughts2014.06.16 16:38

파이썬도 공부하고, 컴퓨터 프로그래밍의 기본기를 배울 수 있게 하는 괜찮은 강의가 있어서 소개합니다. 프로그래밍 개론 격의 강의인데, 정작 OOP 개념을 잘 모르면 강의를 따라가기가 만만치 않습니다. 


제목은 "Principles of Computing" 입니다. 


https://www.coursera.org/course/principlescomputing


이런 분들께 추천합니다.


1. 파이썬 문법은 대충 알고 있는 분 (완벽하게는 몰라도 됨) 

2. 프로그래밍 개론 수업을 다시 한번 들어보고 싶은 분

3. 외국 대학에서 주관하는 온라인 개론 수업이 어떻게 진행되는지 알고 싶은 분

4. 프로그래밍과 관련된 여러 개념을 기본부터 다시 배우고 싶은 분

5. 영어 좀 되시는 분


이 중 1번과 5번이 안 되면 시작부터 무지 까입니다. (스스로 좌절하게 된다는 뜻) 그러니 파이썬 프로그래밍을 한 번도 해보신 적이 없거나, 파이썬의 객체지향 문법에 익숙치 않으시거나, 영어에 심각한 애로사항이 있으신 분은 듣지 않으시는 것이 낫습니다. 


물론, 돈 드는 강의 아니니까 둘러보는 건 언제나 OK.


다만, Coursera에서 주는 수료 인증서를 받으려면 돈을 내야 합니다. (ㅜㅜ)






저작자 표시 비영리 변경 금지
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

Languages/Python2013.09.30 16:44

이 방법은 http://stackoverflow.com/questions/2068372/fastest-way-to-list-all-primes-below-n-in-python에 공개된 방법입니다. 아래에는 결과만 보여드립니다. 


import itertools
def erat2( ):
    D = {  }
    yield 2
    for q in itertools.islice(itertools.count(3), 0, None, 2):
        p = D.pop(q, None)
        if p is None:
            D[q*q] = q
            yield q
        else:
            x = p + q
            while x in D or not (x&1):
                x += p
            D[x] = p


이 함수를 실행하는 함수를 다음과 같이 정의합니다. 


def get_primes_erat(n):
  return list(itertools.takewhile(lambda p: p<n, erat2()))


실행해 보면 다음과 같은 결과를 얻습니다. 


>>> get_primes_erat(1000)

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73,

 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163

, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251

, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349

, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443

, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557

, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647

, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757

, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863

, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983

, 991, 997]

>>>


제일 신속한 방법이라고 알려져 있습니다. 



저작자 표시 비영리 변경 금지
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

Languages/Python2013.09.27 16:30

파이썬 프로그래밍을 하다보면 가끔 'NoneType' object is not iterable 이라는 오류를 만나게 될 때가 있습니다. 물론 이 오류 메시지는 


for i in something:

   ...


위의 코드에서 'something'이 'for'를 적용할 수 없는 객체인 경우에도 만나게 됩니다만, 가끔은 이런 경우에도 만날 수 있습니다. 가령 위의 for 문 안에서 뭔가를 한다고 해 봅시다. 


for i in something:

  ret = do_something(i)

  do_another_something(ret)


그런데 do_something() 메소드 내부 코드가 다음과 같이 구현되어 있다고 해 봅시다.


def do_something(i):

  if some_condition(i):

    return some_result_of_processing(i)


그러니까 이 메소드는 i에 대해서 어떤 조건이 만족되면 뭔가를 리턴하지만, 그 조건이 만족되지 않을 경우에는 아무것도 리턴하지 않습니다. 심지어 None 조차도 리턴하지 않고 있죠. 이런 경우에 종종 for 문 안에서 ret = do_something(i)를 하는 순간 'NoneType' object is not iterable이라는 오류가 발생하곤 합니다.


따라서 위의 do_something 함수처럼 뭔가를 반환해야 하는 함수인데, 아무것도 반환하지 않게 되는 경우가 생기지 않도록 주의해야 되겠습니다. 그렇지 않으면 오류 메시지의 뜻이 무엇인지 해석하는 데 한참 걸리게 될 수 있으니까요.




저작자 표시 비영리 변경 금지
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

  1. guest

    python은 리턴 값이 없으면 None type을 리턴합니다. 그래서 None type은 iteration 할 수 없다고 하는 것이지요...

    2013.12.13 16:47 신고 [ ADDR : EDIT/ DEL : REPLY ]