Чтобы исправить вашу проблему, вам нужно добавить переменную, которая сообщит вам, был ли номер найден в столбце, поэтому нет необходимости проверять номер в строке или в поле.
Таким образом, чтобы исправить, что ваш код должен выглядеть следующим образом:
import turtle
strelica = turtle.getturtle()
turtle.setup(800, 600)
prozor = turtle.Screen()
prozor.title("SUDOKU")
strelica.speed(0)
def kvadrat(a): # a je duzina stranice
strelica.pendown()
strelica.forward(a)
strelica.left(90)
strelica.forward(a)
strelica.left(90)
strelica.forward(a)
strelica.left(90)
strelica.forward(a)
strelica.left(90)
def kucica(x, y):
strelica.penup()
strelica.setposition(x, y)
kvadrat(120)
strelica.setposition(x, y)
kvadrat(40)
strelica.setposition(x + 40, y)
kvadrat(40)
strelica.setposition(x + 80, y)
kvadrat(40)
strelica.penup()
strelica.setposition(x, y + 40)
strelica.pendown()
kvadrat(40)
strelica.setposition(x + 40, y + 40)
kvadrat(40)
strelica.setposition(x + 80, y + 40)
kvadrat(40)
strelica.penup()
strelica.setposition(x, y + 80)
strelica.pendown()
kvadrat(40)
strelica.setposition(x + 40, y + 80)
kvadrat(40)
strelica.setposition(x + 80, y + 80)
kvadrat(40)
strelica.pensize(3)
strelica.penup()
strelica.setposition(x, y)
strelica.pendown()
kvadrat(120)
strelica.pensize(0)
def unos(unos, x, y):
strelica.penup()
strelica.setposition(x, y)
strelica.write(unos, font=("Arial", 16, "normal"))
kucica(-200, -200)
kucica(-80, -200)
kucica(40, -200)
kucica(-200, -80)
kucica(-80, -80)
kucica(40, -80)
kucica(-200, 40)
kucica(-80, 40)
kucica(40, 40)
unos("A", -190, 175)
unos("B", -150, 175)
unos("C", -110, 175)
unos("D", -70, 175)
unos("E", -30, 175)
unos("F", 10, 175)
unos("G", 50, 175)
unos("H", 90, 175)
unos("I", 130, 175)
unos("9", -215, -190)
unos("8", -215, -150)
unos("7", -215, -110)
unos("6", -215, -70)
unos("5", -215, -30)
unos("4", -215, 10)
unos("3", -215, 50)
unos("2", -215, 90)
unos("1", -215, 130)
unos("5", -190, 130)
unos("3", -150, 130)
unos("7", -30, 130)
unos("6", -190, 90)
unos("1", -70, 90)
unos("9", -30, 90)
unos("5", 10, 90)
unos("9", -150, 50)
unos("8", -110, 50)
unos("6", 90, 50)
unos("8", -190, 10)
unos("6", -30, 10)
unos("3", 130, 10)
unos("4", -190, -30)
unos("8", -70, -30)
unos("3", 10, -30)
unos("1", 130, -30)
unos("7", -190, -70)
unos("2", -30, -70)
unos("6", 130, -70)
unos("6", -150, -110)
unos("2", 50, -110)
unos("8", 90, -110)
unos("4", -70, -150)
unos("1", -30, -150)
unos("9", 10, -150)
unos("5", 130, -150)
unos("8", -30, -190)
unos("7", 90, -190)
unos("9", 130, -190)
A = [5, 6, 8, 4, 7]
B = [3, 9, 6]
C = [8]
D = [1, 8, 4]
E = [7, 9, 6, 2, 1, 8]
F = [5, 3, 9]
G = [2]
H = [6, 8, 7]
I = [3, 1, 6, 5, 9]
red1 = [5, 3, 7]
red2 = [6, 1, 9, 5]
red3 = [9, 8, 6]
red4 = [8, 6, 3]
red5 = [4, 8, 3, 1]
red6 = [7, 2, 6]
red7 = [6, 2, 8]
red8 = [4, 1, 9, 5]
red9 = [8, 7, 9]
kucica1 = [5, 3, 6, 9, 8]
kucica2 = [7, 1, 9, 5]
kucica3 = [6]
kucica4 = [8, 4, 7]
kucica5 = [6, 8, 3, 2]
kucica6 = [3, 1, 6]
kucica7 = [6]
kucica8 = [4, 1, 9, 8]
kucica9 = [2, 8, 5, 7, 9]
a = len(A)
b = len(B)
c = len(C)
d = len(D)
e = len(E)
f = len(F)
g = len(G)
h = len(H)
i = len(I)
while (a != 9) or (b != 9) or (c != 9) or (d != 9) or (e != 9) or (f != 9) or (g != 9) or (h != 9) or (i != 9):
kolona = input("Unesite zeljenu kolonu od A do I: ")
red = int(input("Unesite zeljeni red od 1 do 9: "))
broj = int(input("Koji broj zelite unijeti? "))
error = False
if (kolona == "A") or (kolona == "a"):
if broj in A:
print("Greska: Broj vec postoji u datoj koloni!")
error = True
else:
x = -190
A.append(broj)
a += 1
elif (kolona == "B") or (kolona == "b"):
if broj in B:
print("Greska: Broj vec postoji u datoj koloni!")
error = True
else:
x = -150
B.append(broj)
b += 1
elif (kolona == "C") or (kolona == "c"):
if broj in C:
print("Greska: Broj vec postoji u datoj koloni!")
error = True
else:
x = -110
C.append(broj)
c += 1
elif (kolona == "D") or (kolona == "d"):
if broj in D:
print("Greska: Broj vec postoji u datoj koloni!")
error = True
else:
x = -70
D.append(broj)
d += 1
elif (kolona == "E") or (kolona == "e"):
if broj in E:
print("Greska: Broj vec postoji u datoj koloni!")
error = True
else:
x = -30
E.append(broj)
e += 1
elif (kolona == "F") or (kolona == "f"):
if broj in F:
print("Greska: Broj vec postoji u datoj koloni!")
error = True
else:
x = 10
F.append(broj)
f += 1
elif (kolona == "G") or (kolona == "g"):
if broj in G:
print("Greska: Broj vec postoji u datoj koloni!")
error = True
else:
x = 50
G.append(broj)
g += 1
elif (kolona == "H") or (kolona == "h"):
if broj in H:
print("Greska: Broj vec postoji u datoj koloni!")
error = True
else:
x = 90
H.append(broj)
h += 1
elif (kolona == "I") or (kolona == "i"):
if broj in I:
print("Greska: Broj vec postoji u datoj koloni!")
error = True
else:
x = 130
I.append(broj)
i += 1
if error == False:
if red == 1:
if broj in red1:
print("Greska: Broj vec postoji u datom redu!")
error = True
else:
y = 130
red1.append(broj)
elif red == 2:
if broj in red2:
print("Greska: Broj vec postoji u datom redu!")
error = True
else:
y = 90
red2.append(broj)
elif red == 3:
if broj in red3:
print("Greska: Broj vec postoji u datom redu!")
error = True
else:
y = 50
red3.append(broj)
elif red == 4:
if broj in red4:
print("Greska: Broj vec postoji u datom redu!")
error = True
else:
y = 10
red4.append(broj)
elif red == 5:
if broj in red5:
print("Greska: Broj vec postoji u datom redu!")
error = True
else:
y = -30
red5.append(broj)
elif red == 6:
if broj in red6:
print("Greska: Broj vec postoji u datom redu!")
error = True
else:
y = -70
red6.append(broj)
elif red == 7:
if broj in red7:
print("Greska: Broj vec postoji u datom redu!")
error = True
else:
y = -110
red7.append(broj)
elif red == 8:
if broj in red8:
print("Greska: Broj vec postoji u datom redu!")
error = True
else:
y = -150
red8.append(broj)
elif red == 9:
if broj in red9:
print("Greska: Broj vec postoji u datom redu!")
error = True
else:
y = -190
red9.append(broj)
if error == False:
if kolona == "A" or kolona == "a" or kolona == "B" or kolona == "b" or kolona == "C" or kolona == "c":
if red in [1, 2, 3]:
if broj in kucica1:
print("Greska: Broj vec postoji u datoj kucici!")
error = True
else:
kucica1.append(broj)
elif red in [4, 5, 6]:
if broj in kucica4:
print("Greska: Broj vec postoji u datoj kucici!")
error = True
else:
kucica4.append(broj)
elif red in [7, 8, 9]:
if broj in kucica7:
print("Greska: Broj vec postoji u datoj kucici!")
error = True
else:
kucica7.append(broj)
if kolona == "D" or kolona == "d" or kolona == "E" or kolona == "e" or kolona == "F" or kolona == "f":
if red in [1, 2, 3]:
if broj in kucica2:
print("Greska: Broj vec postoji u datoj kucici!")
error = True
else:
kucica2.append(broj)
elif red in [4, 5, 6]:
if broj in kucica5:
print("Greska: Broj vec postoji u datoj kucici!")
error = True
else:
kucica5.append(broj)
elif red in [7, 8, 9]:
if broj in kucica8:
print("Greska: Broj vec postoji u datoj kucici!")
error = True
else:
kucica8.append(broj)
if kolona == "G" or kolona == "g" or kolona == "H" or kolona == "h" or kolona == "I" or kolona == "i":
if red in [1, 2, 3]:
if broj in kucica3:
print("Greska: Broj vec postoji u datoj kucici!")
error = True
else:
kucica3.append(broj)
elif red in [4, 5, 6]:
if broj in kucica6:
print("Greska: Broj vec postoji u datoj kucici!")
error = True
else:
kucica6.append(broj)
elif red in [7, 8, 9]:
if broj in kucica9:
print("Greska: Broj vec postoji u datoj kucici!")
error = True
else:
kucica9.append(broj)
if error == False:
unos(broj, x, y)
strelica.setposition(-200, 200)
strelica.write("KRAJ IGRE!", font=("Arial", 32, "bold"))
turtle.exitonclick()
так, если переменная error
является True
, то вы не вызываете функцию unos
.
Чтобы сделать код более удобочитаемым (кстати, ваш код непросто читать, а его часть должна быть сокращена с помощью циклов и функций), вы должны использовать функцию для печати сообщения об ошибке и возврата True
, это должно быть что-то вроде этого:
def print_error(error_message):
print(error_message)
return True
и весь код будет:
import turtle
strelica = turtle.getturtle()
turtle.setup(800, 600)
prozor = turtle.Screen()
prozor.title("SUDOKU")
strelica.speed(0)
def kvadrat(a): # a je duzina stranice
strelica.pendown()
strelica.forward(a)
strelica.left(90)
strelica.forward(a)
strelica.left(90)
strelica.forward(a)
strelica.left(90)
strelica.forward(a)
strelica.left(90)
def kucica(x, y):
strelica.penup()
strelica.setposition(x, y)
kvadrat(120)
strelica.setposition(x, y)
kvadrat(40)
strelica.setposition(x + 40, y)
kvadrat(40)
strelica.setposition(x + 80, y)
kvadrat(40)
strelica.penup()
strelica.setposition(x, y + 40)
strelica.pendown()
kvadrat(40)
strelica.setposition(x + 40, y + 40)
kvadrat(40)
strelica.setposition(x + 80, y + 40)
kvadrat(40)
strelica.penup()
strelica.setposition(x, y + 80)
strelica.pendown()
kvadrat(40)
strelica.setposition(x + 40, y + 80)
kvadrat(40)
strelica.setposition(x + 80, y + 80)
kvadrat(40)
strelica.pensize(3)
strelica.penup()
strelica.setposition(x, y)
strelica.pendown()
kvadrat(120)
strelica.pensize(0)
def unos(unos, x, y):
strelica.penup()
strelica.setposition(x, y)
strelica.write(unos, font=("Arial", 16, "normal"))
def print_error(error_message):
print(error_message)
return True
kucica(-200, -200)
kucica(-80, -200)
kucica(40, -200)
kucica(-200, -80)
kucica(-80, -80)
kucica(40, -80)
kucica(-200, 40)
kucica(-80, 40)
kucica(40, 40)
unos("A", -190, 175)
unos("B", -150, 175)
unos("C", -110, 175)
unos("D", -70, 175)
unos("E", -30, 175)
unos("F", 10, 175)
unos("G", 50, 175)
unos("H", 90, 175)
unos("I", 130, 175)
unos("9", -215, -190)
unos("8", -215, -150)
unos("7", -215, -110)
unos("6", -215, -70)
unos("5", -215, -30)
unos("4", -215, 10)
unos("3", -215, 50)
unos("2", -215, 90)
unos("1", -215, 130)
unos("5", -190, 130)
unos("3", -150, 130)
unos("7", -30, 130)
unos("6", -190, 90)
unos("1", -70, 90)
unos("9", -30, 90)
unos("5", 10, 90)
unos("9", -150, 50)
unos("8", -110, 50)
unos("6", 90, 50)
unos("8", -190, 10)
unos("6", -30, 10)
unos("3", 130, 10)
unos("4", -190, -30)
unos("8", -70, -30)
unos("3", 10, -30)
unos("1", 130, -30)
unos("7", -190, -70)
unos("2", -30, -70)
unos("6", 130, -70)
unos("6", -150, -110)
unos("2", 50, -110)
unos("8", 90, -110)
unos("4", -70, -150)
unos("1", -30, -150)
unos("9", 10, -150)
unos("5", 130, -150)
unos("8", -30, -190)
unos("7", 90, -190)
unos("9", 130, -190)
A = [5, 6, 8, 4, 7]
B = [3, 9, 6]
C = [8]
D = [1, 8, 4]
E = [7, 9, 6, 2, 1, 8]
F = [5, 3, 9]
G = [2]
H = [6, 8, 7]
I = [3, 1, 6, 5, 9]
red1 = [5, 3, 7]
red2 = [6, 1, 9, 5]
red3 = [9, 8, 6]
red4 = [8, 6, 3]
red5 = [4, 8, 3, 1]
red6 = [7, 2, 6]
red7 = [6, 2, 8]
red8 = [4, 1, 9, 5]
red9 = [8, 7, 9]
kucica1 = [5, 3, 6, 9, 8]
kucica2 = [7, 1, 9, 5]
kucica3 = [6]
kucica4 = [8, 4, 7]
kucica5 = [6, 8, 3, 2]
kucica6 = [3, 1, 6]
kucica7 = [6]
kucica8 = [4, 1, 9, 8]
kucica9 = [2, 8, 5, 7, 9]
a = len(A)
b = len(B)
c = len(C)
d = len(D)
e = len(E)
f = len(F)
g = len(G)
h = len(H)
i = len(I)
while (a != 9) or (b != 9) or (c != 9) or (d != 9) or (e != 9) or (f != 9) or (g != 9) or (h != 9) or (i != 9):
kolona = input("Unesite zeljenu kolonu od A do I: ")
red = int(input("Unesite zeljeni red od 1 do 9: "))
broj = int(input("Koji broj zelite unijeti? "))
error = False
if (kolona == "A") or (kolona == "a"):
if broj in A:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = -190
A.append(broj)
a += 1
elif (kolona == "B") or (kolona == "b"):
if broj in B:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = -150
B.append(broj)
b += 1
elif (kolona == "C") or (kolona == "c"):
if broj in C:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = -110
C.append(broj)
c += 1
elif (kolona == "D") or (kolona == "d"):
if broj in D:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = -70
D.append(broj)
d += 1
elif (kolona == "E") or (kolona == "e"):
if broj in E:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = -30
E.append(broj)
e += 1
elif (kolona == "F") or (kolona == "f"):
if broj in F:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = 10
F.append(broj)
f += 1
elif (kolona == "G") or (kolona == "g"):
if broj in G:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = 50
G.append(broj)
g += 1
elif (kolona == "H") or (kolona == "h"):
if broj in H:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = 90
H.append(broj)
h += 1
elif (kolona == "I") or (kolona == "i"):
if broj in I:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = 130
I.append(broj)
i += 1
if error == False:
if red == 1:
if broj in red1:
error = print_error("Greska: Broj vec postoji u datom redu!")
else:
y = 130
red1.append(broj)
elif red == 2:
if broj in red2:
error = print_error("Greska: Broj vec postoji u datom redu!")
else:
y = 90
red2.append(broj)
elif red == 3:
if broj in red3:
error = print_error("Greska: Broj vec postoji u datom redu!")
else:
y = 50
red3.append(broj)
elif red == 4:
if broj in red4:
error = print_error("Greska: Broj vec postoji u datom redu!")
else:
y = 10
red4.append(broj)
elif red == 5:
if broj in red5:
error = print_error("Greska: Broj vec postoji u datom redu!")
else:
y = -30
red5.append(broj)
elif red == 6:
if broj in red6:
error = print_error("Greska: Broj vec postoji u datom redu!")
else:
y = -70
red6.append(broj)
elif red == 7:
if broj in red7:
error = print_error("Greska: Broj vec postoji u datom redu!")
else:
y = -110
red7.append(broj)
elif red == 8:
if broj in red8:
error = print_error("Greska: Broj vec postoji u datom redu!")
else:
y = -150
red8.append(broj)
elif red == 9:
if broj in red9:
error = print_error("Greska: Broj vec postoji u datom redu!")
else:
y = -190
red9.append(broj)
if error == False:
if kolona == "A" or kolona == "a" or kolona == "B" or kolona == "b" or kolona == "C" or kolona == "c":
if red in [1, 2, 3]:
if broj in kucica1:
error = print_error("Greska: Broj vec postoji u datoj kucici!")
else:
kucica1.append(broj)
elif red in [4, 5, 6]:
if broj in kucica4:
error = print_error("Greska: Broj vec postoji u datoj kucici!")
else:
kucica4.append(broj)
elif red in [7, 8, 9]:
if broj in kucica7:
error = print_error("Greska: Broj vec postoji u datoj kucici!")
else:
kucica7.append(broj)
if kolona == "D" or kolona == "d" or kolona == "E" or kolona == "e" or kolona == "F" or kolona == "f":
if red in [1, 2, 3]:
if broj in kucica2:
error = print_error("Greska: Broj vec postoji u datoj kucici!")
else:
kucica2.append(broj)
elif red in [4, 5, 6]:
if broj in kucica5:
error = print_error("Greska: Broj vec postoji u datoj kucici!")
else:
kucica5.append(broj)
elif red in [7, 8, 9]:
if broj in kucica8:
error = print_error("Greska: Broj vec postoji u datoj kucici!")
else:
kucica8.append(broj)
if kolona == "G" or kolona == "g" or kolona == "H" or kolona == "h" or kolona == "I" or kolona == "i":
if red in [1, 2, 3]:
if broj in kucica3:
error = print_error("Greska: Broj vec postoji u datoj kucici!")
else:
kucica3.append(broj)
elif red in [4, 5, 6]:
if broj in kucica6:
error = print_error("Greska: Broj vec postoji u datoj kucici!")
else:
kucica6.append(broj)
elif red in [7, 8, 9]:
if broj in kucica9:
error = print_error("Greska: Broj vec postoji u datoj kucici!")
else:
kucica9.append(broj)
if error == False:
unos(broj, x, y)
strelica.setposition(-200, 200)
strelica.write("KRAJ IGRE!", font=("Arial", 32, "bold"))
turtle.exitonclick()
код еще не очень, но это проблема в программировании следует использовать для петель (переменные, где хранить информацию о строки, столбцы a й коробка должна быть в списке, а затем вы должны проверить, если введенный номер существует в строке, используя для петли и один, если и не используя девять IFS: , например, вместо использования:
A = [5, 6, 8, 4, 7]
B = [3, 9, 6]
C = [8]
D = [1, 8, 4]
E = [7, 9, 6, 2, 1, 8]
F = [5, 3, 9]
G = [2]
H = [6, 8, 7]
I = [3, 1, 6, 5, 9]
вы должны использовать:
columns = [[5, 6, 8, 4, 7], [3, 9, 6], [8], [1, 8, 4], [7, 9, 6, 2, 1, 8], [5, 3, 9], [2], [6, 8, 7], [3, 1, 6, 5, 9]]
, а затем, когда вы проверяете, если введенный номер уже в колонке вместо использования:
if (kolona == "A") or (kolona == "a"):
if broj in A:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = -190
A.append(broj)
a += 1
elif (kolona == "B") or (kolona == "b"):
if broj in B:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = -150
B.append(broj)
b += 1
elif (kolona == "C") or (kolona == "c"):
if broj in C:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = -110
C.append(broj)
c += 1
elif (kolona == "D") or (kolona == "d"):
if broj in D:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = -70
D.append(broj)
d += 1
elif (kolona == "E") or (kolona == "e"):
if broj in E:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = -30
E.append(broj)
e += 1
elif (kolona == "F") or (kolona == "f"):
if broj in F:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = 10
F.append(broj)
f += 1
elif (kolona == "G") or (kolona == "g"):
if broj in G:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = 50
G.append(broj)
g += 1
elif (kolona == "H") or (kolona == "h"):
if broj in H:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = 90
H.append(broj)
h += 1
elif (kolona == "I") or (kolona == "i"):
if broj in I:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = 130
I.append(broj)
i += 1
вы должны использовать:
i = ord(kolona.upper())-65 # upper() makes Capital Letters more at http://www.tutorialspoint.com/python/string_upper.htm
# ord() gives Unicode code of character more at https://docs.python.org/3/library/functions.html#ord
# -65 is used to make 65 in 0, 66 in 1 and so on
# idea is to get number 0 for 'A', 1 for 'B' 3 for 'D' and so on
if broj in columns[i]:
error = print_error("Greska: Broj vec postoji u datoj koloni!")
else:
x = -190
columns[i].append(broj)
a += 1
подобные логик относится к строкам и коробкам, если вы хотите улучшить свой код, который вы должны сделать что-то подобное)
Кроме того, ваш судок программы есть и другие проблемы, такие как:. Вы можете номер вход на месте, где число уже существует, вы не можете удалить введенный номер ...
PS: если вы собираетесь использовать любой из моих кодов, я предлагаю вам переименовать переменные, потому что ваш код не на английском языке.
Это хороший пример того, как [копирование и вставка-программирование] (https://en.wikipedia.org/wiki/Copy_and_paste_programming) разрушает ваш собственный код. Не делай этого! –