帮助编写带循环的Python数独验证器

1 投票
3 回答
648 浏览
提问于 2025-04-16 06:13

我正在为Python编写一个数独程序,需要一些帮助。这个程序会让用户输入9行数字,希望这些数字包含1到9的所有数字。用户输入完9行后,程序会检查每一行,看看是否符合数独游戏的规则。如果不符合,程序会返回一个错误信息,并显示出哪一行有问题。现在我需要帮助的是,如何在不写9个不同的if语句的情况下,最好地检查这些行。我需要用到循环。该怎么做呢?

到目前为止,我的代码进展如下:

from a5_import import *
import sys

sep = "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-."

print sep

print " Sudoku Verifier! "

print sep

row_0=int(raw_input("Enter Row 0: "))

row_1=int(raw_input("Enter Row 1: "))

row_2=int(raw_input("Enter Row 2: "))

row_3=int(raw_input("Enter Row 3: "))

row_4=int(raw_input("Enter Row 4: "))

row_5=int(raw_input("Enter Row 5: "))

row_6=int(raw_input("Enter Row 6: "))

row_7=int(raw_input("Enter Row 7: "))

row_8=int(raw_input("Enter Row 8: ")) 

if not check9(row0):
print "Error: row 0 is invalid."

if not check9(row1):
    print "Error: row 1 is invalid."

if not check9(row2):
    print "Error: row 2 is invalid."

if not check9(row3):
    print "Error: row 3 is invalid."

if not check9(row4):
    print "Error: row 4 is invalid."

if not check9(row5):
    print "Error: row 5 is invalid."

if not check9(row6):
    print "Error: row 6 is invalid."

if not check9(row7):
    print "Error: row 7 is invalid."

if not check9(row8):
    print "Error: row 8 is invalid."     



print sep

再次强调,我需要完成以下三件事:

  1. 程序能够产生正确的输出
  2. 程序正确使用循环来检查输入的列。
  3. 程序正确使用循环来检查输入的方块。

感谢你对验证循环的帮助。

3 个回答

0

我建议你使用数组,而不是像 row_0、row_1、row_2 这样一个一个地写。

可以试试下面这种写法:

row = []

for count in range (0, 9):
    answer = int(raw_input("Enter Row %s: " % count))
    if answer in row:
        PROBLEM?
    else:
        row.append (answer)
1

你可以通过把行转换成集合来检查这些行

if set(row) == set(range(1,10)):
    # ok
    ...

不过你需要先把这一行转换成字符串

0

好的,我能看到在这个情况下可以用两个循环。

LoopA 是一个用来获取输入的循环,LoopB 是一个用来检查输出的循环,下面是一个例子:

from a5_import import *
import sys

sep = "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-."

print sep

print " Sudoku Verifier! "

print sep

rows = []

for rowNum in range(1, 9):
    rowInput = int(raw_input("Enter Row %s: "% rowNum)) ## This is the same as int(raw_input("Enter Row +rowNum+": "))
    rows.append(rowInput) ##add the input to the list of rows

for row in rows:
    if not check9(row):
        print "Row %s is not valid"% rows[rows.index(row)] ##Prints the row position number

print sep

使用一系列的行来进行验证是最好的选择。

撰写回答