python - 如何将python中的对象与整数进行比较
问题描述
这就是我写的一切。我知道 Increment.count 等于 9,因为我已经放置了打印语句并且我已经检查了所有内容,但是当我将 Increment.count 设置为 9 时,由于某种原因它并没有结束游戏。结束游戏的方法是看看棋盘上的每个空间是否都已满,并且还没有人获胜。
import random
board_layout = [
' ', ' ', ' ',
' ', ' ', ' ',
' ', ' ', ' '
]
class Increment:
count = 0
def __init__(self):
Increment.count += 1
def board():
print(board_layout[0] + '|' + board_layout[1] + '|' + board_layout[2])
print('-' + '+' + '-' + '+' + '-')
print(board_layout[3] + '|' + board_layout[4] + '|' + board_layout[5])
print('-' + '+' + '-' + '+' + '-')
print(board_layout[6] + '|' + board_layout[7] + '|' + board_layout[8])
def human_turn():
position = ' '
position = input('Enter a position from 1-9\n')
position = int(position) - 1
board_layout[position] = 'O'
Increment.count += 1
board()
def computer_turn():
while True:
try:
position = random.randint(1, 9)
if is_board_empty(position):
board_layout[position] = 'X'
board()
Increment.count += 1
break
except:
pass
def is_board_empty(position):
return board_layout[position] == ' '
def is_winner():
if board_layout[0] != ' ' and board_layout[1] != ' ' and board_layout[2] != ' ' and \
board_layout[0] == board_layout[1] == board_layout[2]:
board()
print(board_layout[0] + ' won!')
return board_layout[0]
elif board_layout[3] != ' ' and board_layout[4] != ' ' and board_layout[5] != ' ' and \
board_layout[3] == board_layout[4] == board_layout[5]:
board()
print(board_layout[3] + ' won!')
return board_layout[3]
elif board_layout[6] != ' ' and board_layout[7] != ' ' and board_layout[8] != ' ' and \
board_layout[6] == board_layout[7] == board_layout[8]:
board()
print(board_layout[6] + ' won!')
return board_layout[6]
elif board_layout[0] != ' ' and board_layout[3] != ' ' and board_layout[6] != ' ' and \
board_layout[0] == board_layout[3] == board_layout[6]:
board()
print(board_layout[0] + ' won!')
return board_layout[0]
elif board_layout[1] != ' ' and board_layout[4] != ' ' and board_layout[7] != ' ' and \
board_layout[1] == board_layout[4] == board_layout[7]:
board()
print(board_layout[1] + ' won!')
return board_layout[1]
elif board_layout[2] != ' ' and board_layout[5] != ' ' and board_layout[8] != ' ' and \
board_layout[2] == board_layout[5] == board_layout[8]:
board()
print(board_layout[2] + ' won!')
return board_layout[2]
elif board_layout[0] != ' ' and board_layout[4] != ' ' and board_layout[8] != ' ' and \
board_layout[0] == board_layout[4] == board_layout[8]:
board()
print(board_layout[0] + ' won!')
return board_layout[0]
elif board_layout[2] != ' ' and board_layout[4] != ' ' and board_layout[6] != ' ' and \
board_layout[2] == board_layout[4] == board_layout[6]:
board()
print(board_layout[2] + ' won!')
return board_layout[2]
elif Increment.count == 9:
print('draw')
while is_winner() is None and Increment.count != 9:
human_turn()
print('\n')
computer_turn()
print('\n')
if Increment.count == 9 and is_winner is None:
print('draw')
解决方案
似乎在计算机进行最后一回合时,电路板已满,计算机进入一个永久循环,因此我们将不得不更改计算机代码来修复它。
替换这个
def computer_turn():
while True:
try:
position = random.randint(1, 9)
if is_board_empty(position):
board_layout[position] = 'X'
board()
Increment.count += 1
break
except:
pass
和
def computer_turn():
while True:
try:
if Increment.count == 9: # If the board is already full
break
position = random.randint(1, 9)
if is_board_empty(position):
board_layout[position] = 'X'
board()
Increment.count += 1
break
except:
pass
推荐阅读
- c++ - C++ 中的当前 UTC 时间点
- reactjs - 如何将 .eps 文件加载到画布
- mysql - Express + MySql 如何获取数据并创建嵌套数组
- sql - 字段为给定值的按行分组
- reactjs - 是否可以在 React 中为每个应用程序只制作一次 API
- python - 有没有办法用python自动化/脚本视频编辑?
- regex - 正则表达式组匹配未给出预期结果
- ruby - 在 Ruby 中编写一个标头 HTML 标签 Markdown 解析器
- ruby-on-rails - 使用 RSpec 模拟类实例的实例变量/访问器
- reactjs - ReactDOM:未捕获的类型错误:无法读取未定义的属性“渲染”