[英]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.