range()의 step에서 정수 말고 float을 쓰려면?

조회수 40034회

range()를 써서 0부터 1까지 0.1씩 증가할 수 있나요? range(0,1,0.1)로 쓰니까 step은 integer만 받을 수 있다고 하네요.

소스코드

for i in range(0, 1, 0.1):
    print i

에러내용

for i in range(0,1,0.1): TypeError: range() integer step argument expected, got float.

2 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    range, xrange모두 step에는 int값만을 받을 수 있기 때문에, 다른 방법을 써야 합니다.

    1. NumPy library사용

    NumPy는 파이썬 표준 라이브러리는 아니지만 range() 와 비슷한 기능의 arange()에서 stepfloat을 허용합니다.

    import numpy
    
    mylist = numpy.arange(0, 1, 0.1)
    print mylist #[ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]
    

    2. 유저 스스로 generator를 정의하는 방법

    def myrange(start, end, step):
        r = start
        while(r<end):
            yield r
            r += step
    
    for i in myrange(0,1,0.1):
        print i
    

    이 방법은 for i in myrange()에서는 정상적으로 일하는 것처럼 보이지만, 리스트로 저장하는 경우에는 round-off 오차가 발생하니 주의해서 써야 합니다.

    mylist = [ i for i in myrange(0,1,0.1)]
    print mylist #[0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999, 0.9999999999999999]
    
  • The main limitation of python’s range() is it works only with integers. Python range() doesn’t support the float type.

    I am not writing code here this article explained in the best way. you need to write your custom range() function which returns a range of float numbers. Python range() for float numbers

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)