繁体   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