2016-12-05 7 views
-1

Я новичок и написал небольшой скрипт для игры судокукак проверить квадратным условия в судоку

Я был в состоянии проверить для строк и столбцов условий, но мне нужно немного помочь, чтобы проверить квадратным состояние, т.е. должен быть только один уникальный цифра 3х3 квадрата

Также я был бы признателен, если кто-то мне помочь уменьшить размер условий и может пожалуйста, объясните мне, как создать случайный судоку платы генерации случайных чисел, как я взял статическую плату в

тс()

Также я хочу сделать GUI версию для так пожалуйста порекомендуйте мне способ сделать это.

Заранее спасибо Ниже ссылка код доступен здесь https://drive.google.com/file/d/0B0mzB3WBm-8-VzJua1BLakExajQ/view?usp=sharing

board=[[5,7,3,6,9,4,2,1,8],[9,2,4,7,8,1,3,5,'X'],['X',1,6,3,5,'X',7,9,4],[3,8,5,4,2,7,9,6,1],[1,9,2,5,3,6,8,4,7],[4,6,7,9,1,8,5,2,3],[7,3,1,'X',4,5,6,8,'X'], 
['X',5,8,1,7,9,4,3,2],[2,4,9,8,6,3,'X',7,5]]#simple sudoku board for testing 
def initiator():#print the board and start redirect to the funtion 
    for i in range(0,9): 
     print str(board[i])+"\n" 
    rc_checker() 

def find_xs():#find whether there are any remaining spaces to fill 
    count = 0 
    for i in range(0,9): 
     for j in range(0,9): 
      if board[i][j] == 'X': 
       count+=1 
    if count>0: 
     return 1 
    else: 
     for i in range(0,9): 
      print str(board[i])+"\n" 
      print "Thanks for playing" 
def rc_checker():#checks whether inputted row and column are valid 
    if find_xs()==1: 
     for i in range(0,9): 
      print str(board[i])+"\n" 
     print "Give the row and column" 
     r = int(input()) 
     c = int(input()) 
     if r<10 and c<10: 
      r=r-1 
      c-=1 
      validator(r,c) 


def validator(r,c):#validate whether the field is empty and redirects accordingly 
    if board[r][c]=='X': 
     print "Enter the value" 
     val = int(input()) 
     if val>0 and val <10: 
      tf(r,c,val) 
      rc_checker() 
    else: 
     print "The feild is not empty please try again" 
     rc_checker() 
def tf(r,c,val):#checking if the inputted value is repeated in corresponding row or column 
    i = 0 
    r1 = 0 
    c1 = 0 

    if val!=board[r][i] and val!=board[r][i+1] and val!=board[r][i+2] and val!=board[r][i+3] and val!=board[r][i+4] and val!=board[r][i+5] and val!=board[r][i+6] and val!=board[r][i+7] and val!=board[r][i+8] and val!=board[r1][c] and val!=board[r1+1][c] and val!=board[r1+2][c] and val!=board[r1+3][c] and val!=board[r1+4][c] and val!=board[r1+5][c] and val!=board[r1+6][c] and val!=board[r1+7][c] and val!=board[r1+8][c]: 
     print "Value entered is correct" 
     board[r][c]=val#value is set 
    else: 
     print "Invalid value Retry" 
     board[r][c]='X' 


def main():#welcome message 
    print "Welcome to sudoku game" 
    print "Fill all 'X' with valid input" 
    initiator() 

main() 
+1

У вас здесь много вопросов. Попробуйте разбить его на несколько разных простых вопросов. – Jeremy

ответ

0

Вопросы вы спросили:

1. Как проверить квадраты?

2. Как уменьшить размер условий?

3. Как сгенерировать случайные числа?

4. Как сделать версию GUI?


Ответы.

1. и 2.

Во-первых, один простой способ проверить такого рода условий:

val = 6 
my_list = [2, 4, 3, 1, 'X', 7, 8, 9, 5] # this might be your row for example 

if val in my_list: 
    print 'Invalid value Retry' 
else: 
    print 'Value entered is correct' 

В зависимости от случая, вы должны построить my_list по-разному:

  • получить список для строки

    r = 3 
    my_list = board[r] 
    
  • получить список для колонки

    c = 4 
    my_list = [row[4] for row in board] 
    
  • получить список для квадрата

    # where the squares are numbered as follows: 
    # 0 1 2 
    # 3 4 5 
    # 6 7 8 
    
    s = 3 # second row, first column 
    r = int(s/3) # r = 1 
    c = s%3 # c = 0 
    
    my_list = [element for row in board[r*3:r*3+3] 
          for element in row[c*3:c*3+3]] 
    

Здесь я использовал 2 важные особенности:

Обязательно ознакомьтесь с ними, поскольку они действительно полезны.

3.

Вы можете использовать функцию randint

import random 
random.randint(0,8) # random integer in range [0, 8], including both end points. 

4.

Есть много способов сделать это, и у меня нет достаточно опыта, чтобы сказать вы о. Лично мне это очень понравилось tutorial. Это может быть полезно, если вы хотите запрограммировать простую игру с графическим интерфейсом. Прежде чем начинать проект с GUI, мой совет - изучить занятия.

+0

Большое спасибо. мой третий вопрос заключался в том, что «я хочу создать панель sudoku, например, когда вы начинаете игру, нажав кнопку воспроизведения, тогда вы видите неполную доску, а затем вы ее заполняете», поэтому я хочу создать эту начальную неполную доску. Остальное было полностью понято, спасибо снова – RajkumarG

Смежные вопросы