जैसा कि आप बहुत अच्छी तरह से जानते हैं कि अजगर के पास सूचियां हैं। जैसा कि आप नहीं जानते होंगे कि ये सूचियां खुद को शामिल कर सकती हैं।
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