diff --git a/sudoku.py b/sudoku.py index e09f245..c40921e 100644 --- a/sudoku.py +++ b/sudoku.py @@ -1,4 +1,4 @@ -from random import randint, shuffle, random # za generiranje naključnega sudokuja +from random import randint, shuffle # za generiranje naključnega sudokuja from copy import deepcopy # za kopiranje že rešenega sudokuja from time import time # za merjenje časa @@ -45,8 +45,29 @@ class GeneratorSudokuja: sudoku[i][j] = 0 st += 1 +def izpisisudoku(): # funkcija za izpisovanje sudokuja + print() + for i, vrstica in enumerate(sudoku): # v terminal narišemo sudoku # enumerate vrne indeks vrstice(i) in vrstico. + if i % 3 == 0 and i != 0: # ko je indeks večkratnik od 3, bo program vrinil med številke vrsto črtic. + print("-" * 21) + for j, stevilo in enumerate(vrstica): # j je indeks vsake številke v vrstici, ko je ta večkratnik od 3, se bo vrinila navpična črta, končana s presledkom + if j % 3 == 0 and j != 0: + print("|", end=" ") + if stevilo == 0: + print(0, end=" ") # 0 so bele + else: + print("\033[34m"+str(stevilo)+"\033[0m", end=" ") # če j ni večkratnik števila 3, program napiše barvno številko in konča s presledkom + print() # ko se ena vrstica konča, gre program v novo vrstico + print() + + +# ---------------------------------------------------------------------------------------------------------------------------------------------------------------- # igra +# ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + + print("SUDOKU") print() tezavnost = input("Izberi težavnost(lahka, srednja, težka, nemogoča):") @@ -69,46 +90,31 @@ resensudoku = deepcopy(sudoku) # kopiramo rešen sudoku in ga dam generator.odstranjevanje(sudoku, odstrani) # odstrani nam pove, koliko jih moramo odstraniti, odstrani = koliko -def izpisisudoku(): # funkcija za izpisovanje sudokuja - print() - for i, vrstica in enumerate(sudoku): # v terminal narišemo sudoku # enumerate vrne indeks vrstice(i) in vrstico. - if i % 3 == 0 and i != 0: # ko je indeks večkratnik od 3, bo program vrinil med številke vrsto črtic. - print("-" * 21) - for j, stevilo in enumerate(vrstica): # j je indeks vsake številke v vrstici, ko je ta večkratnik od 3, se bo vrinila navpična črta, končana s presledkom - if j % 3 == 0 and j != 0: - print("|", end=" ") - if stevilo == 0: - print(0, end=" ") # 0 so bele - else: - print("\033[34m"+str(stevilo)+"\033[0m", end=" ") # če j ni večkratnik števila 3, program napiše barvno številko in konča s presledkom - print() # ko se ena vrstica konča, gre program v novo vrstico - print() - - izpisisudoku() # tu program prvič izpiše sudoku +odgovori = ["Pravilno!","Odlično!","Točno tako!","Prav je!","Super!","Bravo!","Zadetek!","Natančno!","Fantastično!"] # množica odgovorov za pravilno rešitev pomote = 0 # štetje pomot namigi = 0 # štetje namigov start = time() # štetje časa while True: # s tem poskrbimo, da vedno znova (ob vsakem vnosu) program pogleda najprej, če je sudoku rešen, potem če je admin ali pa namig - # šele po vseh teh preverbah program razdeli vnos + # šele po vseh teh preverbah program razdeli vnos (vnos.split(",")) if sudoku == resensudoku: break # ko pride uporabnik do konca, gre program iz While zanke vnos = input('Vnesi številko in koordinate le-te (npr. 6,1,5)(če žeiš namig, napiši "namig").:') - if vnos == "end": # easter egg + if vnos.upper() == "END": # easter egg break - elif vnos.upper() == "ADM": # samo za admina za preverjanje kode + elif vnos.upper() == "ADM": # samo za admina za preverjanje kode e = randint(0,8) f = randint(0,8) while sudoku[f][e] != 0: e = randint(0,8) f = randint(0,8) - sudoku[f][e] = resensudoku[f][e] + sudoku[f][e] = resensudoku[f][e] # program avtomatsko reši eno prazno polje print() print("Goljufaš. To je samo za admina.") izpisisudoku() continue - elif vnos == "namig": # uporabnik lahko zaprosi za namig, če je obtičal - namigi += 1 + elif vnos.upper() == "NAMIG": # uporabnik lahko zaprosi za namig, če je obtičal + namigi += 1 # program prišteje en uporabljen namig e = randint(0,8) f = randint(0,8) while sudoku[f][e] != 0: @@ -119,7 +125,7 @@ while True: # s tem poskrbimo, da vedno znova (ob vsakem vnosu) program pogle izpisisudoku() # izpiše sudoku continue vnos = vnos.split(",") # ko vnos ni več "end" ali pa "namig", program vnos (npr. "6,1,5") razčleni v seznamu (["6", "1", "5"]). - if len(vnos) != 3: # če se uporabnik zatipka (npr. 6,5 namesto 6,1,5), se program ne bo ustavil (line 130 index out of range), pač pa mu dal še eno priložnost + if len(vnos) != 3: # če se uporabnik zatipka (npr. 6,5 namesto 6,1,5), se program ne bo ustavil (line 135 index out of range), pač pa mu dal še eno priložnost print() print("Zatipkal si se. Poskusi ponovno.") izpisisudoku() # izpiše sudoku @@ -128,12 +134,12 @@ while True: # s tem poskrbimo, da vedno znova (ob vsakem vnosu) program pogle vnos_st = int(vnos[0]) # 6 vnos_x = int(vnos[1])-1 # 0 -> ker program sudoku mrežo bere od 0-8, ne od 1-9 vnos_y = int(vnos[2])-1 # 4 -> isto - except ValueError: + except ValueError: # če pride do ValueErrorja, program ne bo crashal, pač pa se bo vrnil na začetek zanke print() print('Vnesi le števila ali pa "namig".') izpisisudoku() # izpiše sudoku continue - if vnos_st not in range(1,10) or vnos_x not in range(9) or vnos_y not in range(9): # v primeru tiskarske napake; + if vnos_st not in range(1,10) or vnos_x not in range(9) or vnos_y not in range(9): # v primeru napake pri vnosu velikosti števila print() print("Napaka. Vpiši števila med 1 in 9.") else: @@ -142,15 +148,14 @@ while True: # s tem poskrbimo, da vedno znova (ob vsakem vnosu) program pogle print("Napaka. Številko vpiši v prazno polje.") else: sudoku[vnos_y][vnos_x] = vnos_st # vpišemo številko na prazno polje - if resensudoku[vnos_y][vnos_x] != vnos_st: # če se ne ujema s številko v rešenem sudokuju, se številka ne vpiše (line 148) + if resensudoku[vnos_y][vnos_x] != vnos_st: # če se ne ujema s številko v rešenem sudokuju, se številka ne vpiše (line 153) print() print("Pomota. Poskusi ponovno.") sudoku[vnos_y][vnos_x] = 0 pomote += 1 # število pomot gre gor else: - odgovori = ["Pravilno!","Odlično!","Točno tako!","Prav je!","Super!","Bravo!","Zadetek!","Natančno!","Fantastično!"] print() - print(odgovori[randint(0,len(odgovori)-1)]) # potrdilo + print(odgovori[randint(0,len(odgovori)-1)]) # potrdilo, vzeto iz množice odgovorov (line 94) izpisisudoku() # izpiše sudoku