2014-02-23 3 views
2

저는 많은 시간을내어 다른 많은 응답에 의존하는 함수를 작성해 왔습니다. 내가 끝낼 때, 나는 어딘가에 "*"를 잘못 사용했다고 말했다. 나는 모든 것을 다 겪었고 문제를 볼 수 없었다. 이 6 부동 수 있음을 반환하고, 따라서 나머지 종료 그러나파이썬이 int 값을 잘못 알았습니다.

if n == 0: 
    return 1 
elif n < 0 or (type(float)): 
    print "%s is an invalid input; Positive integer value is required" % (n) 
else: 
    return (n)*fact(n-1) 

를 I는 N = 6을 입력하는 경우, I 마침내 아래와 같이 그 때문에 앞에서 정의한 간단한 팩토리얼 함수임을 발견 기능을 설명하고 누군가가 왜 이런 일이 일어나고 어떻게 해결할 수 있기를 바랍니다.

많은 감사

+0

'type (float)'은 타입을 반환하므로 항상 true –

답변

1

두 번째 조건은 isinstance(n, float)해야한다 : 실제로

if n == 0: 
    return 1 
elif n < 0 or isinstance(n, float): 
    print "%s is an invalid input; Positive integer value is required" % (n) 
else: 
    return (n)*fact(n-1) 

, 당신은 유형을 확인, 아래 isinstance을 볼 수 있고 built-in type이 유형의 반환과 같이

>>> isinstance(1.0, float) 
True 
>>> isinstance(1, float) 
False 
>>> type(float) 
<type 'type'> 
+0

네, 고맙습니다. 그리고 빠른 respone 주셔서 감사합니다. – user3343452

4
elif n < 0 or (type(float)): 

n >= 0 일 경우 (type(float)) 부분은 typefloat이고 반환 값은 비어 있지 않거나 Truthy 값입니다. 따라서 조건은 항상 충족됩니다. n 오류가 발생 될 것 int 이외의 경우 당신이 필요로하는 것은, isinstance

elif n < 0 or isinstance(n, float): 

하지만 제안, 이제

elif not isinstance(n, int) or n < 0: 

이다.