Hướng dẫn how do i print a sudoku board in python? - làm cách nào để in bảng sudoku trong python?

Tôi đang cố gắng hiển thị một bảng Sudoku 2D trong Python như thế này:

0 0 3 |0 2 0 |6 0 0 
9 0 0 |3 0 5 |0 0 1 
0 0 1 |8 0 6 |4 0 0 
------+------+------
0 0 8 |1 0 2 |9 0 0 
7 0 0 |0 0 0 |0 0 8 
0 0 6 |7 0 8 |2 0 0 
------+------+------
0 0 2 |6 0 9 |5 0 0 
8 0 0 |2 0 3 |0 0 9 
0 0 5 |0 1 0 |3 0 0

Tôi đã quản lý để hiển thị bảng mà không có các dòng tách biệt bằng mã này:

rows = 'ABCDEFGHI'
cols = '123456789'

def display(values):
    for r in rows :
        for c in cols :
            print values[r+c],
    print 

Các giá trị là một từ điển {'a1': '0', 'a2': '0', 'a3': '3', 'a4': '0', 'a5': '2' ... vv} i Nhận đầu ra này:

0 0 3 0 2 0 6 0 0
9 0 0 3 0 5 0 0 1
0 0 1 8 0 6 4 0 0
0 0 8 1 0 2 9 0 0
7 0 0 0 0 0 0 0 8
0 0 6 7 0 8 2 0 0
0 0 2 6 0 9 5 0 0
8 0 0 2 0 3 0 0 9
0 0 5 0 1 0 3 0 0

Bất kỳ trợ giúp?

Đã hỏi ngày 2 tháng 2 năm 2015 lúc 16:54Feb 2, 2015 at 16:54

Hướng dẫn how do i print a sudoku board in python? - làm cách nào để in bảng sudoku trong python?

Những điều sau đây có thể hoạt động. Nhưng tôi nghĩ rằng một hàm kết quả là kết quả là một chuỗi có thể hữu ích hơn (để viết kết quả vào tệp văn bản chẳng hạn, không có quá nhiều chú khỉ).

rows = 'ABCDEFGHI'
cols = '123456789'

def display(values):
    for i, r in enumerate(rows):
        if i in [3, 6]:
            print '------+-------+------'
        for j, c in enumerate(cols):
            if j in [3, 6]:
                print '|',
            print values[r + c],
        print

Result:

9 6 0 | 5 0 7 | 9 5 2
1 9 3 | 9 3 4 | 5 4 2
4 9 7 | 2 3 0 | 1 3 1
------+-------+------
3 0 1 | 6 7 3 | 9 8 3
2 4 5 | 7 8 7 | 8 0 8
0 1 4 | 9 3 9 | 3 9 6
------+-------+------
6 1 2 | 8 7 6 | 5 0 1
4 3 9 | 3 0 8 | 5 6 6
4 1 7 | 5 9 9 | 3 1 7

Đã trả lời ngày 2 tháng 2 năm 2015 lúc 17:13Feb 2, 2015 at 17:13

Nagasaki45Nagasaki45Nagasaki45

2.4741 Huy hiệu vàng21 Huy hiệu bạc27 Huy hiệu đồng1 gold badge21 silver badges27 bronze badges

Đây là một cách tiếp cận hơi lộn xộn. Nếu bạn thêm một số định danh khác vào chuỗi hàng và cột của mình, bạn thực sự có được ở giữa các cột ở dạng dễ nhận biết:

# Use "x" as an identifier for a row or column where there should be a separator
rows = 'ABCxDEFxGHI'
cols = '123x456x789'

values = {'A1': '0', 'A2': '0', 'A3': '3'}
def display(values):
    for r in rows:
        for c in cols:
            if r == "x":
                if c == "x":
                    # Both row and column are the separator, show a plus
                    print "+",
                else:
                    # Only the row is the separator, show a dash
                    print "-"
            elif c == "x":
                    # Only the column is the separator, show a pipe
                print "|",
            else:
                # Not a separator, print the given cell (or ? if not found)
                print values.get(r+c, "?"),
        # Make sure there's a newline so we start a new row
        print ""

display(values)

Một khả năng khác là thông minh hơn và chèn các ô được sửa đổi phân tách vào từ điển (tức là

rows = 'ABCDEFGHI'
cols = '123456789'

def display(values):
    for r in rows :
        for c in cols :
            print values[r+c],
    print 
0), nhưng đó là công việc nhiều hơn. Bạn có thể sử dụng phương thức
rows = 'ABCDEFGHI'
cols = '123456789'

def display(values):
    for r in rows :
        for c in cols :
            print values[r+c],
    print 
1 của từ điển để tự động điền vào một tập hợp các tập hợp đó (tức là mặc định để trả lại một đường ống hoặc dấu gạch nối).

Đã trả lời ngày 2 tháng 2 năm 2015 lúc 17:14Feb 2, 2015 at 17:14

Thegrinnerthegrinnerthegrinner

10,9k5 Huy hiệu vàng42 Huy hiệu bạc64 Huy hiệu đồng5 gold badges42 silver badges64 bronze badges

sudoku="
0 0 3  0 2 0  6 0 0
9 0 0  3 0 5  0 0 1
0 0 1  8 0 6  4 0 0

0 0 8  1 0 2  9 0 0
7 0 0  0 0 0  0 0 8
0 0 6  7 0 8  2 0 0

0 0 2  6 0 9  5 0 0
8 0 0  2 0 3  0 0 9
0 0 5  0 1 0  3 0 0"

Bất cứ nơi nào không gian có mặt trong chuỗi, bạn có thể thay thế nó bằng '-'

import re
re.sub(r'\s+', '-', sudoku)

Không phải những gì bạn đang tìm kiếm? Cho tôi biết

Đã trả lời ngày 2 tháng 2 năm 2015 lúc 17:03Feb 2, 2015 at 17:03

Hướng dẫn how do i print a sudoku board in python? - làm cách nào để in bảng sudoku trong python?

m0bi5m0bi5m0bi5

8,5517 Huy hiệu vàng32 Huy hiệu bạc44 Huy hiệu đồng7 gold badges32 silver badges44 bronze badges

1

Cái này cần phải dùng mẹo:

rows = 'ABCDEFGHIJK'
cols = '123456789'

def display(values):
    for r in rows :
        if r == "D" or r == "H":
            print '------+-------+------'
        else: 
            for c in cols :
                if c%3 == 0 and c != 9:
                    print values[r+c] + "|"
                else:
                    print values[r+c]

Đã trả lời ngày 2 tháng 2 năm 2015 lúc 17:04Feb 2, 2015 at 17:04

Hướng dẫn how do i print a sudoku board in python? - làm cách nào để in bảng sudoku trong python?

Gian hàng Kyle BoothkyleKyle Booth

5553 Huy hiệu bạc9 Huy hiệu Đồng3 silver badges9 bronze badges

1

Giải pháp cho Python3:

values = {'A9': '1' , 'D8' : '9', 'A1': '7', ...}
sortedKeys = sorted(values)
for i in range(0, 9):
    if i != 0 and i % 3 == 0:
        print("- - - + - - - + - - -")
    for j in range(0, 9):
        if j != 0 and j % 3 == 0:
            print("|", end=' ')
        key = sortedKeys[i*9 + j]
        print(values[key], end=' ')
    print()

Đã trả lời ngày 28 tháng 10 năm 2019 lúc 15:19Oct 28, 2019 at 15:19

3