2013-07-31 3 views
4

이 오류의 의미는 무엇입니까? 튜플을 반환하는 함수를 만들려고합니다. 나는 틀린 모든 일을하고 있다고 확신한다. 어떤 도움을 주셔서 감사합니다.튜플을 반환하는 함수는 TypeError를 제공합니다. 'NoneType'개체를 반복 할 수 없습니다.

from random import randint 
A = randint(1,3) 
B = randint(1,3) 
def make_them_different(a,b): 
    while a == b: 
     a = randint(1,3) 
     b = randint(1,3) 
     return (a,b) 
new_A, new_B = make_them_different(A,B) 
+2

작동하면 범위에서 두 개의 다른 정수를 선택하는 것이 매우 재미 있습니다. 예를 들어 범위 (1,30)에서 20 개의 정수를 선택해야하는 경우와 같이 심각하게 확장됩니다. 'random.sample (range (1,4), 2)'를 더 잘 사용하십시오. –

답변

8

코드는 Nonea != b 경우를 반환합니다.

while 루프 내에 return 문이 있으므로 while 루프가 실행되지 않으면 의 기본값 인 new_A, new_B을 반환합니다.

>>> print make_them_different(2, 3) 
None 

>>> print make_them_different(2, 2) 
(2, 1) 

기본값을 반환하여이 문제를 해결할 수있다 (그들은 다른 그것은 당신이 할 의도가 무엇 때문에)

def make_them_different(a,b): 
    while a == b: 
     a = randint(1,3) 
     b = randint(1,3) 
    return (a,b) # Dedented the return line. 

데모 -

>>> make_them_different(2, 2) 
(3, 2) 
>>> make_them_different(2, 3) 
(2, 3) 
1

들여 반환 한 수준 하위 :

from random import randint 
A = randint(1,3) 
B = randint(1,3) 
def make_them_different(a,b): 
    while a == b: 
     a = randint(1,3) 
     b = randint(1,3) 
    return (a,b) 
new_A, new_B = make_them_different(A,B) 

그렇지 않으면 a, b가 한 번만 재생성됩니다. 반복하지 않으므로 이후에 충돌 할 수 있습니다.

관련 문제