簡體   English   中英

Python代碼適用於2.7,但不適用於3.5

[英]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")

等等

  1. 在Python 3.x中, print語句更改為函數 要打印不帶換行符的語句,您需要傳遞end=' '參數(如果您from __future__ import print_function放在代碼開頭,則可以將print作為Python 2.7中的函數使用):

     print(board[counter], end=' ') 
  2. input在Python 3.x中返回一個字符串。 (不評估輸入字符串)。 您需要在使用input每個位置將值轉換為int

     value = input("input number between 1 and 9") value = int(value) 

    另外,也可以將輸入字符串與字符串'1''2'進行比較,而不是將輸入字符串與整數立即數12進行比較,而無需將字符串轉換為整數。 (但這要求您在Python 2.7中使用raw_input而不是input

  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM