मेरे दो कार्य हैं, एक जो नीचे है:
def is_square(m):
for i in range(len(m)):
if len(m[i]) != len(m):
return False
return True
यह एक सही है अगर m एक वर्ग मैट्रिक्स है, अन्यथा, यह गलत रिटर्न देता है। समस्या इस एक के साथ नहीं है, यह दूसरे फ़ंक्शन के साथ है।
दूसरा कार्य:
जादू (एम):
if(not(is_square(m))):
return False
# Here"s where code starts.
यही मैंने प्रयास किया। संपादित करें: प्रतिक्रिया के बाद मेरा दूसरा प्रयास।
square = []
for i in range(len(m)):
square.append([])
for j in range(len(m)):
square[i].append(0)
total = 0
for i in range(len(m)-1):
total += square[i][i]
if total != x*(x*x+1)/2:
return False
else:
return True
total = 0;
for i in range(x):
total += square[i][x-1-i]
if total != x*(x*x+1)/2:
return False
else:
return True
यहाँ इस समारोह के अपेक्षित परिणाम हैं:
# this should print True
m0=[[2,7, 6],[9,5,1],[4,3,8]]
print(magic(m0))
# this should print True
m1 = [[16,3,2,13], [5,10,11,8],[9,6,7,12], [4,15,14,1]]
print(magic(m1))
# this should print False.
m2 = [[1,2,3,4], [5,6,7,8],[9,10,11,12], [13,14,15,16]]
print(magic(m2))
#this should print False.
m3 = [[1,1],[1,1]]
print(magic(m3))
#this should print False.
m3 = [[1,1],[1,1],[1,2]]
print(magic(m3))
वैसे, मैं एक कठिन समय स्थापित कर रहा हूँ numpy, इसलिए अगर वहाँ अन्य तरीके से आयात किए बिना numpy है, यह भयानक होगा
उत्तर:
जवाब के लिए 0 № 1आपके कोड की स्पष्ट त्रुटियां:
- यदि आप अपने सभी परीक्षण पास कर लेते हैं तो आप सच नहीं होते
- आप लूप में अपने कुल की जांच करते हैं, इसके बाद नहीं (जाहिर है कि आपने "बाद तक योग नहीं किया है")।
- आपका पूरी तरह से इनपुट की अनदेखी! प्रारंभिक लूप सिर्फ 0 से भरा एक वर्ग बनाता है, जिसके खिलाफ आप अपने योगों का परीक्षण करते हैं। जाहिर है आप अपने कुल के लिए हमेशा 0 पाने जा रहे हैं।
मेरा सुझाव है कि आप कुछ डिबगिंग करना शुरू कर देंआपके फंक्शन में कुछ "प्रिंट" स्टेटमेंट्स देखें और देखें कि क्या हो रहा है। आप लगभग वहाँ हैं, और मुझे पूरा यकीन है कि आप खुद वहाँ पहुँच सकते हैं। यहाँ पर आपको कोई ज़रूरत नहीं है।
संपादित करें:
- क्या आप सुनिश्चित हैं कि आप पहले लूप के बाद ट्रू लौटना चाहते हैं अगर यह गलत नहीं है? ऐसा लगता है कि आपने केवल यहां विकर्णों के लिए परीक्षण किया है। ध्यान दें कि आप कभी भी पहले पास नहीं होंगे!
True
सही है - सभी परीक्षण उत्तीर्ण। x
आपके संपादन में परिभाषित नहीं किया गया है!- अगर यह था भी, तो यह क्या है
square[i][x-1-i]
? कोशिश करें और विचार करें कि आप क्या करने की कोशिश कर रहे हैं। एक कॉलम को समाप् त करने पर वही पहले सूचकांक पर जा रहा है[i][0,1,2...]
और एक स्तंभ समान दूसरा सूचकांक है[0,1,2...][i]
.
आपको वास्तव में कोड पर पढ़ने की ज़रूरत है - यहाँ एक वर्ग के लिए एक उदाहरण है:http://www.codeproject.com/Articles/4952/Magic-Square, और आपको अजगर के लिए परिचित होने की आवश्यकता है - उदाहरण के लिए एक योग समारोह बनाया गया है। अपने आप को चुनौती दें!
जवाब के लिए 0 № 2
आपके मूल कोड में कुछ त्रुटियां प्रतीत होती हैं। ज्यादातर छोरों के लिए संबंधित हैं, और यह सुनिश्चित करना है कि वे सही स्थानों पर शुरू और बंद करें (अजगर में खरोज द्वारा नियंत्रित)
इसके अलावा आप सटीक समानता के लिए परीक्षण कर रहे हैंसंख्याएँ, जो उदाहरण में शायद सुरक्षित हैं क्योंकि आप पूर्णांकों के साथ काम कर रहे हैं, लेकिन एक मुद्दा हो सकता है क्योंकि संख्याओं को फ्लोटिंग बिंदुओं के समान प्रतिनिधित्व नहीं किया जा सकता है।
एक उदाहरण के रूप में टाइपिंग 1.1*3 == 3.3
रिटर्न False
अजगर में
मैंने आपके समानता परीक्षणों की जगह ले ली है math.isclose()
से परीक्षण math
मॉड्यूल (मुझे लगता है कि यह केवल अजगर 3 में उपलब्ध है, लेकिन निश्चित नहीं है)।
मैंने यह जांचने के लिए परीक्षण भी जोड़े हैं कि पंक्तियाँ और कॉलम आवश्यकतानुसार ऐड-अप करें:
import math
def is_square(m):
for i in range(len(m)):
if len(m[i]) != len(m):
return False
return True
def magic(m):
if(not(is_square(m))):
return False
total = 0
x = len(m)
for i in range(x):
total += m[i][i]
if not(math.isclose(total, x*(x*x+1)/2)):
return False
total = 0
for i in range(x):
total += m[i][x-1-i]
if not(math.isclose(total, x*(x*x+1)/2)):
return False
# Check rows all add-up
for i in range(x):
total = 0
for j in range(x):
total += m[i][j]
if not(math.isclose(total, x*(x*x+1)/2)):
return False
# Check cols all add-up
for i in range(x):
total = 0
for j in range(x):
total += m[j][i]
if not(math.isclose(total, x*(x*x+1)/2)):
return False
return True
# this should print True
m0=[[2,7,6],[9,5,1],[4,3,8]]
print(magic(m0))
# this should print True
m1 = [[16,3,2,13], [5,10,11,8],[9,6,7,12], [4,15,14,1]]
print(magic(m1))
# this should print False.
m2 = [[1,2,3,4], [5,6,7,8],[9,10,11,12], [13,14,15,16]]
print(magic(m2))
#this should print False.
m3 = [[1,1],[1,1]]
print(magic(m3))
#this should print False.
m4 = [[1,1],[1,1],[1,2]]
print(magic(m4))
देता:
True
True
False
False
False