1 def kiir(ssz,szoveg): 2 print('------------------------------------------') 3 print(str(ssz)+'. feladat - '+szoveg) 4 print('------------------------------------------') 5 6 def kitoltott(sor,oszlop): 7 if sudoku[sor-1][oszlop-1]=='0': 8 s='Az adott helyet még nem töltötték ki.' 9 else: 10 s=sudoku[sor-1][oszlop-1] 11 return s 12 13 def hely(sor,oszlop): 14 resztablak=[[1,2,3],[4,5,6],[7,8,9]] 15 rt_sor=(sor-1)//3 16 rt_oszl=(oszlop-1)//3 17 return resztablak[rt_sor][rt_oszl] 18 19 def resztabla_informaciok(hol,ertek): 20 r_ksor=(hol-1)//3*3 21 r_koszlop=(hol-1)%3*3 22 resztabla=[] 23 for s_sor in range(r_ksor,r_ksor+3): 24 for s_oszlop in range(r_koszlop,r_koszlop+3): 25 resztabla.append(sudoku[s_sor][s_oszlop]) 26 return resztabla.count(ertek) 27 28 ############################################################################## 29 # 1. Olvassa be egy fájl nevét, egy sor és egy oszlop sorszámát (1 és 9 30 # közötti számot)! A későbbi feladatokat ezen értékek felhasználásával kell 31 # megoldania! 32 ############################################################################## 33 34 kiir(1,'Adatok beolvasása') 35 file=input('Kérem a fájl nevét: ') 36 sor=int(input('Kérek egy sorszámot (1-9): ')) 37 oszlop=int(input('Kérek egy oszlopszámot (1-9): ')) 38 39 ############################################################################## 40 # 2. Az előző feladatban beolvasott névnek megfelelő fájl tartalmát olvassa 41 # be, és tárolja el a táblázat adatait! Ha ezt nem tudja megtenni, akkor 42 # használja forrásként a rendelkezésre álló állományok egyikét! 43 ############################################################################## 44 45 kiir(2,'Adott fájl beolvasása') 46 47 sudoku=[] 48 lepesek=[] 49 with open(file,'r') as f: 50 sorok=0 51 while sorok<9: 52 sudoku.append(f.readline().strip().split()) 53 sorok+=1 54 for fsor in f: 55 lepesek.append(fsor.strip().split()) 56 57 print('SUDOKU: \n',sudoku) 58 print('LÉPÉSEK: \n',lepesek) 59 60 ############################################################################## 61 # 3. Írja ki a képernyőre, hogy a beolvasott sor és oszlop értékének megfelelő 62 # hely… 63 # a. milyen értéket tartalmaz! Ha az adott helyen a 0 olvasható, akkor 64 # az „Az adott helyet még nem töltötték ki.” szöveget jelenítse meg! 65 # b. melyik résztáblázathoz tartozik! 66 ############################################################################## 67 68 kiir(3,'Adott sor, oszlop helyen szereplő érték, és résztábla') 69 70 print(kitoltott(sor,oszlop)) 71 print('A hely a(z) %d. résztáblázathoz tartozik.' %hely(sor,oszlop)) 72 73 ############################################################################## 74 # 4. Határozza meg a táblázat hány százaléka nincs még kitöltve! Az eredményt 75 # egy tizedesjegy pontossággal jelenítse meg a képernyőn! 76 ############################################################################## 77 78 kiir(4,'Hány százaléka nincs kitötlve a táblázatnak?') 79 nullak=0 80 for egy_sor in sudoku: 81 nullak+=egy_sor.count('0') 82 print('Az üres helyek aránya: %.1f%s' %(nullak/(9*9)*100,'%')) 83 84 ############################################################################## 85 # 5. Vizsgálja meg, hogy a fájlban szereplő lépések lehetségesek-e a 86 # beolvasott táblázaton! Tekintse mindegyiket úgy, mintha az lenne az 87 # egyetlen lépés az eredeti táblázaton, de ne hajtsa azt végre! Állapítsa 88 # meg, hogy okoz-e valamilyen ellentmondást a lépés végrehajtása! 89 # Írja ki a lépéshez tartozó három értéket, majd a következő sorba írja az 90 # alábbi megállapítások egyikét! Ha több megállapítás is igaz, elegendő 91 # csak egyet megjelenítenie. 92 # • „A helyet már kitöltötték” 93 # • „Az adott sorban már szerepel a szám” 94 # • „Az adott oszlopban már szerepel a szám” 95 # • „Az adott résztáblázatban már szerepel a szám” 96 # • „A lépés megtehető” 97 ############################################################################### 98 99 kiir(5,'Lépések vizsgálata') 100 101 for lepes in lepesek: 102 ertek,sor,oszlop=lepes[0],int(lepes[1]),int(lepes[2]) 103 104 print('A kiválasztott sor: %d oszlop: %d a szám: %s' %(sor,oszlop,ertek)) 105 106 if len(kitoltott(sor,oszlop))==1: 107 print('A helyet már kitöltötték.') 108 elif sudoku[sor-1].count(ertek)>0: 109 print('Az adott sorban már szerepel a szám.') 110 elif [sudoku[s][oszlop-1] for s in range(9)].count(ertek)>0: 111 print('Az adott oszlopban már szerepel a szám.') 112 elif resztabla_informaciok(hely(sor,oszlop),ertek)>0: 113 print('Az adott résztáblázatban már szerepel a szám.') 114 else: 115 print('A lépés megtehető.') 116 117