das Sudokuproblem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
der kleine Fritz
User
Beiträge: 25
Registriert: Montag 18. Dezember 2023, 11:33

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)
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
der kleine Fritz
User
Beiträge: 25
Registriert: Montag 18. Dezember 2023, 11:33

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!
der kleine Fritz
User
Beiträge: 25
Registriert: Montag 18. Dezember 2023, 11:33

__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!
Antworten