मेरे पास एक मौजूदा बहु-आयामी सूची है जिसमें पूर्व निर्धारित (अंतिम) मान self.origBoard और उसी आकार की एक और बहु-आयामी सूची है, self.board जो उपयोगकर्ता को मान भरने की अनुमति देता है। self.origBoard कुछ रिक्त स्थान (व्हाइटस्पेस) और अन्य पूर्णांक मानों से शुरू होता है, जबकि self.board पूरी तरह से खाली (खाली) शुरू होता है।

.use Anda untuk penangan kesalahan harus berada di bagian bawah, setelah rute/penangan/middlewhare yang dapat menyebabkan kesalahan. Kemudian dari tempat Anda yang lain, panggil berikutnya (kesalahan) alih-alih mengembalikan pesan kesalahan secara langsung

एक उदाहरण के रूप में, self.origBoard द्वारा परिभाषित किया गया है:

self.origBoard[0]=' 19374652'
self.origBoard[1]='576182943'
self.origBoard[2]='342596718'
self.origBoard[3]='921753864'
self.origBoard[4]='638419527'
self.origBoard[5]='457628139'
self.origBoard[6]='185237496'
self.origBoard[7]='763941285'
self.origBoard[8]='29486537 '

Penanganan kesalahan express.js pada permintaan http

self.board = [None] * 9      # Used to mark user-entered numbers
        for i in range(9):
            self.board[i] = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ]

मैं वर्तमान में जांचता हूं कि यह इस आंतरिक विधि का उपयोग करके भरा हुआ है या नहीं:

def fullBoard(self):
        for i in range(0,9):
            for k in range(0,9):
                if self.board[i][k] == ' ':

                    return False
        return True

Package.json - Tambahkan juga skrip di bawah ini.

def nextMove(self):
        row = int(input('Enter Row:'))
        col = int(input("Enter Column:"))
        num = input("Enter Number:")
        self.board[row][col] = num

चूंकि उपयोगकर्ता को केवल self.origBoard से रिक्त स्थान भरने के लिए कहा जाएगा, (अर्थात इस उदाहरण में दो सूचकांक), मुझे यकीन नहीं है कि कैसे जांचा जाए कि पूरा संयुक्त बोर्ड भरा हुआ है या नहीं।

अब मुझे पता है कि fullBoard() कभी सही क्यों नहीं लौटेगा और ऐसा इसलिए है क्योंकि self.board में शेष सूचकांक ' ' बने रहेंगे। मैं कैसे जांच सकता हूं कि self.board और self.origBoard के संयुक्त मान एक पूर्ण बोर्ड का प्रतिनिधित्व करते हैं या नहीं?

नीचे न्यूनतम कार्य कोड उदाहरण:

class Sudoku():

    def __init__(self):

        self.board = [None] * 9      # Used to mark user-entered numbers
            for i in range(9):
                self.board[i] = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ]

        self.origBoard[0]=' 19374652'
        self.origBoard[1]='576182943'
        self.origBoard[2]='342596718'
        self.origBoard[3]='921753864'
        self.origBoard[4]='638419527'
        self.origBoard[5]='457628139'
        self.origBoard[6]='185237496'
        self.origBoard[7]='763941285'
        self.origBoard[8]='29486537 '

        self.board = self.origBoard

    def display(self):
        # display stuff
        pass

    def nextMove(self):
        row = int(input('Enter Row:'))
        col = int(input("Enter Column:"))
        num = input("Enter Number:")
        self.board[row][col] = num

    def fullBoard(self):
        for i in range(0,9):
            for k in range(0,9):
                if self.board[i][k] == ' ':

                    return False
        return True

    def winCheck(self):
        # Do some checks
        print("Testing ftw!")

if __name__ == '__main__':
    game = Sudoku()
    game.display()
    while(True):
        game.nextMove()
        if game.fullBoard() == True:
            break
            if game.winCheck() == True:
                game.display()
                print("You win!")
                break
            elif game.winCheck() == False:
                game.display()
                print("One or more of your numbers are overlapping!")
                continue
        else:
            game.display()


0
mossy 26 नवम्बर 2019, 06:31

1 उत्तर

सबसे बढ़िया उत्तर

टिप्पणियों में चर्चा के आधार पर, ऐसा लगता है कि समस्या पीढ़ी और मूल्यों के असाइनमेंट के भीतर है self.board और जिस तरह से सूचियां स्थापित की गई थीं (स्ट्रिंग्स का उपयोग किसी अन्य सूची के बजाय पंक्तियों के रूप में)। मैं अनुमान लगा रहा हूं कि उपयोगकर्ता इस तथ्य से भ्रमित था कि वे एक स्ट्रिंग के माध्यम से पुनरावृति कर सकते हैं जैसे कि आप किसी सरणी या सूची के माध्यम से कैसे पुनरावृति कर सकते हैं, लेकिन किसी विशेष वर्ण को मान निर्दिष्ट नहीं कर सकते, अर्थात उनका पिछला self.board[row][col] = num था की एक त्रुटि फेंकना:

लेखन त्रुटि: 'str' ऑब्जेक्ट आइटम असाइनमेंट का समर्थन नहीं करता है

भले ही self.board[row][col] स्ट्रिंग से एक वर्ण को खुशी से वापस कर देगा।

दिए गए कोड से, ऐसा लगता है कि उपयोगकर्ता को self.board को नए मान निर्दिष्ट करने से पहले self.origBoard की एक प्रति बनाने की आवश्यकता है। इस तरह के एक कदम के बिना, self.board को कभी भी '' के प्रारंभिक मूल्यों के अलावा अन्य मूल्यों के साथ पॉप्युलेट नहीं किया जा रहा था, और उन मूल्यों को nextMove() विधि का उपयोग करके असाइन किया गया था। इस प्रकार यह समझ में आता है कि fullBoard() हमेशा गलत लौटाता है क्योंकि '' मान हमेशा self.board में रहेगा। उदाहरण कार्य कोड इस प्रकार है:

class Sudoku():

    def __init__(self):
        # Note the one liner to replace your initializer for this
        self.origBoard = [[' '] * 9] * 9

        # Note the change from single strings to a list of integers
        self.origBoard[0]=[' ',1,9,3,7,4,6,5,2]
        self.origBoard[1]=[5,7,6,1,8,2,9,4,3]
        self.origBoard[2]=[3,4,2,5,9,6,7,1,8]
        self.origBoard[3]=[9,2,1,7,5,3,8,6,4]
        self.origBoard[4]=[6,3,8,4,1,9,5,2,7]
        self.origBoard[5]=[4,5,7,6,2,8,1,3,9]
        self.origBoard[6]=[1,8,5,2,3,7,4,9,6]
        self.origBoard[7]=[7,6,3,9,4,1,2,8,5]
        self.origBoard[8]=[2,9,4,8,6,5,3,7,' ']

        self.board = self.origBoard

    def display(self):
        # display stuff
        pass

    def nextMove(self):
        row = int(input('Enter Row:'))
        col = int(input("Enter Column:"))
        num = input("Enter Number:")
        self.board[row][col] = num

    def fullBoard(self):
        for i in range(0,9):
            for k in range(0,9):
                if self.board[i][k] == ' ':

                    return False
        return True

    def winCheck(self):
        # Do some checks
        print("testing ftw!")

if __name__ == '__main__':
    game = Sudoku()
    game.display()
    while(True):
        game.nextMove()
        if game.fullBoard() == True:
            # a break statement here would mean the following if statements are never reached
            if game.winCheck() == True:
                game.display()
                print("You win!")
                break
            elif game.winCheck() == False:
                game.display()
                print("One or more of your numbers are overlapping!")
                continue
        else:
            game.display()



यहां मैं "वर्किंग" को परिभाषित करता हूं क्योंकि मैं इंडेक्स 0,0 और 8,8 के लिए अंक मान दर्ज करता हूं जिसके परिणामस्वरूप game.winCheck() की कॉल आती है।

एक साइड नोट के रूप में, मैंने जितना संभव हो उतना मौजूदा कोड का उपयोग करने की कोशिश की क्योंकि यह सीखने के लिए कुछ असाइनमेंट की तरह लगता है कि कैसे सूचियां और पायथन सामान्य रूप से काम करते हैं, जिसे अनुकूलित करने की आवश्यकता होती है, लेकिन मैंने प्रत्येक बोर्ड को प्रारंभ करने के लिए चुना है बहुत आसान है और अनावश्यक लूप से बचें:

self.board = [[' '] * 9] * 9

या इससे भी बेहतर, आप एक Numpy सरणी का उपयोग कर सकते हैं, और का उपयोग कर सकते हैं all ऐसा करने के लिए अपनी खुद की विधि लिखने के बजाय यह जांचने के लिए कि पूर्ण है या नहीं। अर्थात।

import numpy as np

self.board = np.zeros([9,9])

def fullBoard(self):
    np.all(self.board)

1
topher217 26 नवम्बर 2019, 08:12