2017-08-12 2 views
0

Ich überarbeite gerade eine Prüfung, für die ein Testskript vom Professor gegeben wurde. Die Frage betrifft das Spiel Sodoku; In diesem Abschnitt muss ich alle Nicht-Null-Werte einer Reihe von Werten als Satz in die Sudoku-Tabelle (dargestellt durch ein 2D-Array) zurückgeben.AssertEqual returning False, wenn von Observation True ist

def get_values_from_row(puzzle, row): 
    rowVal = [] 
    try: 
     for i in puzzle[row]: 
      if i != 0: 
       rowVal.append(i) 
    except IndexError: 
     print('Invalid Row') 
    if len(rowVal) == 0: 
     return rowVal 
    else: 
     rowVal = set(rowVal) 
     print(rowVal) 
     return(rowVal) 

hier ist das Brett Sudoku

sudoku1 = [[5, 3, 4, 6, 7, 8, 9, 1, 2], 
     [6, 7, 2, 1, 9, 5, 3, 4, 8], 
     [1, 9, 8, 3, 4, 2, 5, 6, 7], 
     [8, 5, 9, 7, 6, 1, 4, 2, 3], 
     [4, 2, 6, 8, 5, 3, 7, 9, 1], 
     [7, 1, 3, 9, 2, 4, 8, 5, 6], 
     [9, 6, 1, 5, 3, 7, 2, 8, 4], 
     [2, 8, 7, 4, 1, 9, 6, 3, 5], 
     [3, 4, 5, 2, 8, 6, 1, 7, 9]] 

Wenn ich die Funktion für Zeile 0 betreibe ich bekommen {1,2,3,4,5,6,7,8,9} wie erwartet . Wenn ich das Testskript ausführen, wird jedoch ein Fehler zurückgegeben.

Dies ist der entsprechende Code im Testskript:

import unittest 


class Test(unittest.TestCase): 

    def test_get_values_from_row(self): 
     sudoku1 = [ 
       [5, 3, 4, 0, 7, 8, 9, 1, 2], 
       [6, 7, 0, 0, 9, 5, 0, 4, 8], 
       [1, 9, 8, 0, 4, 0, 5, 6, 7], 
       [8, 5, 9, 7, 6, 1, 4, 2, 3], 
       [4, 2, 6, 8, 5, 3, 7, 9, 1], 
       [7, 1, 3, 0, 2, 4, 8, 5, 6], 
       [9, 6, 1, 5, 3, 7, 2, 8, 4], 
       [2, 8, 7, 4, 1, 9, 6, 3, 5], 
       [3, 4, 5, 2, 8, 6, 1, 7, 9]] 

     self.assertEqual(sg.get_values_from_row(sudoku1, 0), set([6])) 

sg ist genau das, was das Skript Ich bin der Bearbeitung als importiert. Wenn ich das Protokoll anschaue, scheint 6 nicht im Set zu sein, als ich es in 3 änderte, passierte dasselbe. Es sah aus wie auch immer der Testwert wurde wäre es aus meiner zurückgegebenen Liste

Traceback (most recent call last):' 
File "question_1_iii_test.py", line 23, in test_get_values_from_row' 
self.assertEqual(sg.get_values_from_row(sudoku1, 0), set([6]))' 
AssertionError: Items in the first set but not the second:' 
1 
2 
3 
4 
5 
7 
8 
9 
Items in the second set but not the first: 
6 

Meine Frage ist, gelöscht werden: Warum assertEqual falsch zurück, wenn es klar ist wahr?

+0

Ich denke, deine Logik ist rückwärts, du fragst effektiv ist '{1, 2, 3, 4, 5, 7, 8, 9} == {6}', was eindeutig 'Falsch' ist . Willst du überprüfen, ob die Sets disjunkt sind? Oder möchten Sie wissen, ob es sich um eine Untermenge handelt? – AChampion

+0

Nun, ich habe das Testskript nicht geschrieben; Das ist das Problem, das ich nicht verstehe, was genau AssertEqual zu tun versucht; Wenn es heißt: {1, 2, 3, 4, 5, 7, 8, 9} == {6} 'muss etwas mit dem Testskript nicht stimmen, oder? Denn was würde das sein, wenn die Frage eine ganze Reihe von Werten zurückgibt, nicht nur eine – Arkan

+0

Sind Sie sicher, dass 'get_values_from_row()' die benutzten Werte und nicht die unbenutzten Werte zurückgeben soll - der Test scheint es zu implizieren soll die unbenutzten Werte zurückgeben. – AChampion

Antwort

0

okay, nicht gleich ist, damit ich meinen Professor in Kontakt gebracht und es scheint, war der Testcode falsch es wa s bedeutete, die Liste zu invertieren, so dass die einzige Nummer in der Liste diejenige war, die in der Reihe so weggelassen wurde; wir waren in Ordnung

-1

Dies ist wahrscheinlich auf einen Datentypfehler zurückzuführen. Set ([6]) wird eine Art geben() eingestellt, während Sudoku1 eine Liste ist und enthält Listen

[6]==set([6]) 

werden

+0

Nein, weil ich die Liste als eine Menge – Arkan

1

Der Rückgabewert der Funktion als [6] nicht gleichen Falsch zurück, so assertEqual Rückkehr falsch

sg.get_values_from_row(sudoku1, 0) = [5, 3, 4, 7, 8, 9, 1, 2] 

, die [6]

+0

zurückgebe, aber warum wird 6 nur aus den zurückgegebenen Werten im Testskript weggelassen? – Arkan

+0

In der ersten Zeile (0), '[5, 3, 4, 0, 7, 8, 9, 1, 2],' –

+0

gibt es keine '6' also warum würde ich auf eine 6 testen, wenn sie nicht in der Reihe? Könnte das eine Art umgekehrter Test sein? – Arkan