使用循环帮助Python Sudoku Verifier

时间:2010-10-28 06:19:52

标签: 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

再次要求我需要完成以下三件事:

  1. 程序生成正确的输出
  2. 程序正确使用循环来检查输入的列。
  3. 程序正确使用循环来检查输入框。
  4. 感谢您对验证程序循环的帮助。

3 个答案:

答案 0 :(得分:1)

您可以通过将行转换为集来检查行

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

你需要先将行转换为str,但

答案 1 :(得分: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

使用行列表是验证的最佳选择。

答案 2 :(得分: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)