2017-12-02 87 views
-6

我正在尝试将一个数独谜题读入我的数独解算器程序。该文件的名称是'puzzle1.py',但由于某些原因,此代码不起作用。有人可以帮我吗?如何将文件读入我的拼图解算器?

def read_sudoku(file): 
    stream = open(file) 
    data = stream.readlines() 
    stream.close() 
    return eval("".join(data)) 


def main(): 
    print ('File name: ') 
    file = input() 
    read_sudoku() 

main() 
+3

您定义'read_sudoku()'取一个参数,但你没有传递任何参数,当你把它叫做。当你运行这段代码时没有错误信息告诉你到底是什么? – jasonharper

+3

“不工作”是什么意思?它会产生错误吗?如果是,哪一个?它是否会产生与预期不同的结果?如果是这样,结果和预期结果如何?你的'puzzle1.py'格式是什么?如果它是一个python文件,你可能不应该读它,而是导入它。 – syntonym

+2

你真正想要做的是通过另一个python文件运行一个python文件? –

回答

0

使用open("filename", <Mode>)

<Mode>

  • 'r' - 阅读;
  • 'w' - 写;
  • 'a' - 追加:将新数据添加到文件末尾;
  • 'r+' - 两种读写操作。

例子:

open(file, "r") 
+0

'open()'文件和默认值为''r''时,''参数是可选的,所以添加这个参数不太可能有帮助,因为它已经发生了。 – martineau

0
  • read_sudoku(file)

更换read_sudoku()

(您没有传递任何文件作为参数,实际上是读它的功能。)
  • 替换stream = open(file)stream = open(file, 'r')

(您必须指定文件的读取模式(rwar+)等,在这种情况下,读= r

  • 将在根目录下的文件,你的项目或将完整目录包含到文件中。
0

您可能有错误,因为read_sudoku需要一个参数,并且您没有传递任何参数。

图片的标题说明:

  • 我也建议你使用with语句来打开文件。

  • 除非这是一个非常奇怪的数独,你不需要在这里使用evaleval所做的是将字符串作为Python代码执行,这几乎总是一个坏主意。

  • 另外一个你可以用来使代码略短的技巧是记住input可以在等待输入时显示一个字符串,所以你不需要预先print

应用所有上述情况,我们得到这个代码:

def read_sudoku(file): 
    with f as open(file, 'r'): # Use with statement 
           # pass 'r' to open file in read-only mode 
     data = f.readlines() 
    return "".join(data) 


def main(): 
    file = input('File name: ') # Remove print and pass the string to input 
    read_sudoku(file) # Pass the file name 

main()