Seite 2 von 2

Re: das Sudokuproblem

Verfasst: Donnerstag 28. März 2024, 14:02
von der kleine Fritz
Hallo,
da ich in Gänze meinen eigenen Code verstehe versuche ich das Sudokuproblem mit meinem Code zu lösen, was jedoch nicht funktioniert.
Die erste Zeile lässt sich noch problemlos anzeigen, aber mein verfluchtes Programm springt einfach nicht in die zweite Reihe und so weiter.
Kann mir einer einen Tipp geben?

Code: Alles auswählen

import numpy as np
import random

#Funktion für Füllen von Sudokuarray Zahl für Zahl beide Varianten funktionieren       
def sudokuzahlfunktion1 (zeile,zahl,a,b,c,d,e,x):
    i = np.isin(zahl,sudokuarray [0,:9]) or np.isin(zahl,sudokuarray[:,a]) or np.isin(zahl, sudokuarray[d:e,b:c])
    if i == False:
        sudokuarray [zeile,x] = zahl
       
        
#Erzeugt Array 9x9
sudokuarray = np.zeros(shape=(9,9))


#Definition der Funktionsparameter
zeile = 0
zahl = random.randrange(1,10)
a = 0 
b = 0
c = 3
d = 0
e = 3
x = 0

wiederholungen = 0

#Prüfung ob eine 0 in erster Zeile von Array
abfrage = np.isin (0,sudokuarray[zeile,:9])

#wihle-Schleife um erste Zeile mit Zahlen zu füllen
while abfrage == True:
    sudokuzahlfunktion1 (zeile,zahl,a,b,c,d,e,x)
    if sudokuarray[zeile,x] != 0:
        a = a + 1
        x = x + 1
        wiederholungen = wiederholungen + 1
        
    elif wiederholungen == 3 or 6:
        b = b+3
        c = c+3
        
    elif wiederholungen == 9 or 18 or 27 or 36 or 45 or 54 or 63 or 72:
        zeile = zeile + 1 
        a = 0 
        b = 0
        c = 3
        d = 0
        e = 3
        x = 0
            
           
    zahl = random.randrange(1,10) 
    abfrage = np.isin (0,sudokuarray[zeile,:9])             
  
   
    
 
        
print (sudokuarray)
print (wiederholungen)
print (zeile)

Re: das Sudokuproblem

Verfasst: Donnerstag 28. März 2024, 14:35
von __blackjack__
@der kleine Fritz: Die Bedingungen bei den beiden ``elif`` machen nicht was Du denkst. ``or`` ist kein Umgangssprachliches “oder” sondern ein binärer Operator. Wenn eines der beiden Argumente wahr ist, dann ist es das Ergebnis auch. Beide Bedingungen sind immer wahr, weil alle Zahlen ausser 0 wahr sind in diesem Kontext.

Re: das Sudokuproblem

Verfasst: Donnerstag 28. März 2024, 14:37
von Sirius3
Dann verstehst Du ja offensichtlich Deinen eigenen Code doch nicht ganz.
Bemühe Dich wenigstens einige der hier vorgebrachten Vorschläge auch umzusetzen, weil jedesmal wieder von neuem sich in Deine kryptischen Variablennamen, einzulesen und die schon zigmal angesprochenen Bugs zu reparieren, nervt.
Wenn Du nicht bereit bist, die Vorschläge anderer anzunehmen, habe ich auch wenig Lust, weitere Vorschläge zu machen; ist ja eh für die Tonne.

Als Neuerung ist dazugekommen, dass `wiederholungen == 3 or 6` immer wahr ist, weil or zwei Wahrheitswerte verknüpft und der zweite Ausdruck immer wahr ist.

Re: das Sudokuproblem

Verfasst: Donnerstag 28. März 2024, 15:28
von der kleine Fritz
Sirius3 hat geschrieben: Donnerstag 28. März 2024, 14:37 Dann verstehst Du ja offensichtlich Deinen eigenen Code doch nicht ganz.
Bemühe Dich wenigstens einige der hier vorgebrachten Vorschläge auch umzusetzen, weil jedesmal wieder von neuem sich in Deine kryptischen Variablennamen, einzulesen und die schon zigmal angesprochenen Bugs zu reparieren, nervt.
Wenn Du nicht bereit bist, die Vorschläge anderer anzunehmen, habe ich auch wenig Lust, weitere Vorschläge zu machen; ist ja eh für die Tonne.

Als Neuerung ist dazugekommen, dass `wiederholungen == 3 or 6` immer wahr ist, weil or zwei Wahrheitswerte verknüpft und der zweite Ausdruck immer wahr ist.
Dich zwingt ehrlich gesagt niemand dazu dir den Code anzuschauen oder zu kommentieren!
Trotzdem Danke!

Re: das Sudokuproblem

Verfasst: Donnerstag 28. März 2024, 15:28
von der kleine Fritz
__blackjack__ hat geschrieben: Donnerstag 28. März 2024, 14:35 @der kleine Fritz: Die Bedingungen bei den beiden ``elif`` machen nicht was Du denkst. ``or`` ist kein Umgangssprachliches “oder” sondern ein binärer Operator. Wenn eines der beiden Argumente wahr ist, dann ist es das Ergebnis auch. Beide Bedingungen sind immer wahr, weil alle Zahlen ausser 0 wahr sind in diesem Kontext.
Vielen Dank für den Hinweis!