[英]Python code works in 2.7 but not in 3.5
我的課程是用Python創建Tic Tac Toe,我的導師幫助我在2.7中使它工作,但是它必須在3.5中。
首先,在2.7中,下面的代碼打印3x3列表,但是在3.5中,它只是向下打印列表,而不是3x3。 我的導師說,也許在end = ' '
處放end = ' '
,但這也不起作用。
def printBoard( board ):
counter = 0
for y in range(3):
for x in range(3):
print (board[counter]),
counter += 1
print
print
第二個問題是在2.7上,它允許我繼續輸入數字,直到板子上填滿X或O;在3.5上,它只允許輸入一次,然后程序結束?
value = input("input number between 1 and 9")
value = int(value)
if value == 1:
alist[0] = player1
printBoard( alist )
value = input("input number between 1 and 9")
if value == 2:
alist[1] = player1
printBoard( alist )
value = input("input number between 1 and 9")
等等
在Python 3.x中, print
從語句更改為函數 。 要打印不帶換行符的語句,您需要傳遞end=' '
參數(如果您from __future__ import print_function
放在代碼開頭,則可以將print
作為Python 2.7中的函數使用):
print(board[counter], end=' ')
input
在Python 3.x中返回一個字符串。 (不評估輸入字符串)。 您需要在使用input
每個位置將值轉換為int
:
value = input("input number between 1 and 9") value = int(value)
另外,也可以將輸入字符串與字符串'1'
, '2'
進行比較,而不是將輸入字符串與整數立即數1
或2
進行比較,而無需將字符串轉換為整數。 (但這要求您在Python 2.7中使用raw_input
而不是input
)
print
應該被稱為: print()
。 否則,不打印任何內容。
我假設board
是[['*', '*', '*'], ['*', '*', '*'], ['*', '*', '*']]
。 這意味着您可以通過一個簡單的print()
調用來輕松打印此內容。
print(*(''.join(row) for row in board), sep='\n')
這會將每一行連接到一個新的字符串中,從而將每一行作為生成器的一部分生成。 該生成器用*
拆包,並發送到print()
,其中每行用換行符分隔。
對於第二個問題,問題很簡單:您將int()
為第一個value
,但不轉換為后續的值。 但是,這是您應該使用循環執行的操作。 它將完全防止此類錯誤。 如果發現自己使用Ctrl + V編寫了大量代碼,則說明您做錯了什么。 如果每個塊都有一個遞增的數字,那么您可以使用for i in range(n):
來執行此操作,這使您可以在每次迭代中以遞增的數字執行相同的代碼。
但是,我建議您使用一個簡單的while
循環來檢查游戲是否完成:
while True:
move = request_move()
do_move('X', move)
if game_complete():
break
request_move()
do_move('O', move)
if game_complete():
break
然后,您將編寫適當的函數來請求移動坐標,將輸入輸入到棋盤中,並檢查游戲是否完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.