2017-12-02 85 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()