2015-12-14 51 views
1

我有打印出一個網格的戰列艦遊戲(5'行打印5x),並生成一個隨機點供用戶猜測。嘗試打印行號時輸入錯誤

這些都是行:16-20

""" Allows the function to print row by row """ 
    def print_board(board): 
     for row in board: 
      for x in enumerate(row): 
       print('%s " ".join(row)' % (x)) 

我得到這些錯誤。但是,只是後我改變線20來打印印格旁邊的數量(http://imgur.com/uRyMeLU)圖片有

Traceback (most recent call last): File "C:\Users\Jarrall\pythonPrac\battleship.py", line 23, in <module> 
    print_board(board) File "C:\Users\Jarrall\pythonPrac\battleship.py", line 20, in print_board 
    print('%s " ".join(row)' % (x)) TypeError: not all arguments converted during string formatting 

我怎麼會拿到這塊代碼打印數量(枚舉排列表的長度?)旁邊的網格?

+0

只是,你的文檔字符串應該在*函數內部,在簽名之後並且縮進到與最外部的'for'相同的級別。 – jpmc26

回答

0

從您的堆棧跟蹤以一種猜測,我會說你需要x變量轉換爲字符串,像這樣:

print('%s " ".join(row)' % (str(x))) 
1

您使用enumerate錯誤。我不能完全肯定,但像你想它來打印像它看起來對我說:

0 0 0 0 0 0 
1 0 0 0 0 0 
2 0 0 0 0 0 
3 0 0 0 0 0 
4 0 0 0 0 0 

這可以通過enumerate(board)因爲enumerate回報指數和迭代器來完成:

def print_board(board): 
    for index,row in enumerate(board): 
     print('{} {}'.format(index, ' '.join(row)) 

使你可以得到:

>>> board = [['0' for _ in range(5)] for __ in range(5)] 
>>> print_board(board) 
0 0 0 0 0 0 
1 0 0 0 0 0 
2 0 0 0 0 0 
3 0 0 0 0 0 
4 0 0 0 0 0 

編輯 - 添加,爲什麼你的當前print聲明需要一些fixin':

您的print聲明不符合您的預期。讓我們通過它:

print('%s " ".join(row)' % (x)) 
    #'    ' will create a string literal. This is obvious. 
    # %s    a string formatting token meaning to replace with a string 
    #     % (x) the replacement for any of the string formatting 
    # " ".join(row) this is your vital flaw. Although this is valid code, the print 
    #     statement will print this as literally `" ".join(row) 
    #     rather than actually running the code. 

這就是爲什麼你需要將其更改爲:

print('{} {}'.format(index, ' '.join(row)) 
#shout-out to jpmc26 for changing this 

這取代的{}format給出的參數的所有實例。您可以瞭解更多關於與字符串格式有關的迷你語言here

+0

我編寫了'print'調用,因爲它不兼容Python 2.7(儘管它在Python 3.x中工作)。你可能還想提一下關於與'print'命令不同的地方,因爲OP似乎對如何使用字符串格式感到困惑。 – jpmc26

+0

@ jpmc26感謝編輯,我現在正在重新編輯添加解釋。意外地點擊編輯加載框,而我的編輯中,並失去了我已經有的所有*爲什麼我必須這樣做自己* –

0

Python的枚舉方法返回一個包含0索引整數的元組以及列表值。所以,而不是簡單地作爲行中的值,你的x變量實際上是(整數,行)。如果您只想打印整數列表,請將您的內循環更改爲以下內容:

for x,y in enumerate(row): 
    print('%s " ".join(row)' % (x)) 

這應該可以解決您的問題。如果您想要更具體的答案,請詳細說明您想要做什麼以及行變量是什麼。