帮助编写带循环的Python数独验证器
我正在为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
再次强调,我需要完成以下三件事:
- 程序能够产生正确的输出
- 程序正确使用循环来检查输入的列。
- 程序正确使用循环来检查输入的方块。
感谢你对验证循环的帮助。
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
使用一系列的行来进行验证是最好的选择。