아시다시피 파이썬에는 목록이 있습니다. 당신이 알지 못할 수도 있듯이 이러한 목록은 스스로를 포함 할 수 있습니다.
a = []
a.append(a)
이들은 시원하고 당신이 그들과 함께 할 수있는 재미있는 것들이 많이 있지만 비교할 수는 없습니다.
a = []
a.append(a)
b = []
b.append(b)
a == b
직무
당신의 임무는 파이썬 (또는 파이썬 객체를 직접 처리 할 수있는 모든 언어)으로 함수를 작성하여 자신을 포함하고 비교할 수있는 두 목록을 가져 오는 것입니다.
두 개의 목록이 동일한 길이이고 일련의 숫자가 존재하지 않으면 두 개의 목록이 동일하므로 해당 순서로 두 목록을 모두 인덱싱하면이 정의가 동일하지 않은 두 개의 개체가 생성됩니다. 리스트에 포함 된 모든 비리스트 객체는 단순화를 위해 파이썬 정수이며 파이썬의 내장 정수 정수와 비교해야합니다.
프로그램 은 파이썬의 재귀 깊이에 의존하여 목록이 무한히 깊은 지 결정 해서는 안됩니다 . 그건:
def isInfinite(a,b):
try:
a==b
return False
except RunTimeError:
return True
두 목록이 자체 참조인지 판별하는 올바른 방법이 아닙니다.
테스트 케이스
함수를 정의한다고 가정 equal
a = []
a.append(a)
b = []
b.append(b)
print(equal(a,b))
True
a = []
b = []
a.append(b)
b.append(a)
print(equal(a,b))
True
a = []
b = []
a.append(1)
a.append(b)
b.append(1)
b.append(a)
print(equal(a,b))
True
a = []
a.append(a)
b = [a]
print(equal(a,b))
True
a = []
b = []
c = []
a.append(b)
b.append(c)
c.append(a)
equal(a,b)
True
a=[1,[2]]
b=[1,[2,[1]]]
a[1].append(a)
b[1][1].append(b[1])
True
a = []
a.append(a)
b = [1]
b.append(a)
c = [1]
c.append([c])
print(equal(b,c))
False
a = []
b = []
a.append(1)
a.append(b)
b.append(a)
b.append(1)
print(equal(a,b))
False
a = []
b = []
a.append(a)
b.append(b)
b.append(b)
print f(a,b)
False