Python代码适用于2.7但不适用于3.5

时间:2015-11-22 11:46:25

标签: python python-2.7 python-3.x tic-tac-toe python-3.5

我的课程是用Python创建Tic Tac Toe,我的导师帮助我让它在2.7中工作但是它需要在3.5中。

首先在2.7中,下面的代码打印一个3x3列表,但是在3.5中它只打印列表而不是3x3。我的导师说可能会把def printBoard( board ): counter = 0 for y in range(3): for x in range(3): print (board[counter]), counter += 1 print print 放在最后,但这也行不通。

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")

第二个问题是2.7它允许我继续输入数字直到电路板充满X或O,在3.5它只允许输入一次然后程序结束?

Console.Read();

2 个答案:

答案 0 :(得分:4)

  1. print在Python 3.x中从statement更改为a function。要打印没有换行符的语句,您需要传递end=' '参数(如果将print放在代码的开头,则可以使用from __future__ import print_function作为Python 2.7中的函数:< / p>

    print(board[counter], end=' ')
    
  2. input在Python 3.x中返回一个字符串。 (不评估输入字符串)。您需要在使用int的每个地方将值转换为input

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

    或者,不是将输入与整数文字12进行比较,而是将输入字符串与字符串'1''2'进行比较,而不将字符串转换为整数。 (但这需要您在Python 2.7中使用raw_input而不是input

  3. 应该调用
  4. printprint()。否则,不会打印任何内容。

答案 1 :(得分:0)

我认为board类似[['*', '*', '*'], ['*', '*', '*'], ['*', '*', '*']]。这意味着您可以通过一次print()调用轻松打印此内容。

print(*(''.join(row) for row in board), sep='\n')

这会将每一行连接成一个新字符串,将每一行作为生成器的一部分生成。此生成器已使用*解压缩并发送到print(),其中每行由换行符分隔。

对于您的第二个问题,问题很简单:您为第一个int()投射value,而不是后续版本for i in range(n):。但是,这是你应该用循环做的事情。它会完全防止这种错误。如果你发现自己用 Ctrl + V 写了很多代码,那么你做错了什么。如果每个块略有不同,并且数字递增,则可以使用类似while的方法来执行此操作,这允许您在每次迭代时使用递增的数字执行相同的代码。

但是,我建议使用一个简单的while True: move = request_move() do_move('X', move) if game_complete(): break request_move() do_move('O', move) if game_complete(): break 循环来检查游戏是否完整:

public class MyException extends RuntimeException {

}


public class Test {

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    try{
        method1();
    }catch(MyException ne){
        System.out.print("A");
    }

  }

  public static void method1() {
    // TODO Auto-generated method stub
    try{
        throw Math.random() > 0.5 ?new MyException(): new  RuntimeException(); 
    } catch (RuntimeException re){
        System.out.print("B");
    }
  }
}

然后你会编写适当的函数来请求移动坐标,输入移动到棋盘中,然后检查游戏是否完整。