python-3.9 - 在第 4 , 113 , 130 行制作井字游戏时输入错误
问题描述
我正在尝试制作井字游戏,但出现这些错误,我不知道为什么会出现这些错误。我检查了所有内容,但找不到任何东西。这就是我帮助你的原因。请告诉我发生这种情况的原因如果你知道的话。我会为此感谢你的。
在此处输入代码
Exception has occurred: TypeError
list indices must be integers or slices, not NoneType
line 4, in insertLetter
board[pos] = letter
line 113, in main
insertLetter('O' , move)
line 130, in <module>
main()
这些是行中的错误,下面是我为这个程序编写的代码。请帮助我。
board = [' ' for x in range(10)]
def insertLetter(letter,pos):
board[pos] = letter
def spaceIsFree(pos):
return board[pos] == ' '
def printBoard(board):
print(' | | ')
print(' ' + board[1] + ' | ' + board[2] + ' | '+ board[3])
print(' | | ')
print('------------')
print(' | | ')
print(' ' + board[4] + ' | ' + board[5] + ' | '+ board[6])
print(' | | ')
print('------------')
print(' | | ')
print(' ' + board[7] + ' | ' + board[8] + ' | '+ board[9])
print(' | | ')
def isBoardFull(board):
if board.count(' ') > 1:
return False
else:
return True
def IsWinner(b,l):
return (b[1] == l and b[2] == l and b[3] == l)
(b[4] == l and b[5] == l and b[6] == l)
(b[7] == l and b[8] == l and b[9] == l)
(b[1] == l and b[4] == l and b[7] == l)
(b[2] == l and b[5] == l and b[8] == l)
(b[3] == l and b[6] == l and b[9] == l)
(b[1] == l and b[5] == l and b[9] == l)
(b[3] == l and b[5] == l and b[7] == l)
def playerMove():
run = True
while run:
move = input("Please select a position to enter the X between 1 to 9")
try:
move = int(move)
if move > 0 and move < 10:
if spaceIsFree(move):
run = False
insertLetter('X' , move)
else:
print("Sorry this space is occupied")
else:
print("Please type a number between 1 to 9")
except:
print('Please type a number')
def computerMove():
possibleMoves = [x for x , letter in enumerate(board) if letter == ' ' and x != 0 ]
move = 0
for let in ['O' , 'X']:
for i in possibleMoves:
boardcopy = board[:]
boardcopy[i] = let
if IsWinner(boardcopy , let):
move = i
return move
cornersOpen = []
for i in possibleMoves:
if i in [1 , 3 , 7 , 9]:
cornersOpen.append(i)
if len(cornersOpen) > 0:
move = selectRandom(cornersOpen)
return move
if 5 in possibleMoves:
move = 5
return move
edgesOpen = []
for i in possibleMoves:
if i in [2 , 4 , 6 , 8]:
edgesOpen.append(i)
if len(edgesOpen) > 0:
move = selectRandom(edgesOpen)
return move
def selectRandom(li):
import random
ln = len(li)
r = random.randrange(0,ln)
return li[r]
def main():
print("Welcome to the Game!")
printBoard(board)
while not(isBoardFull(board)):
if not(IsWinner(board , 'O')):
playerMove()
printBoard(board)
else:
print("Sorry you Loose!")
break
if not(IsWinner(board , 'X')):
move = computerMove()
if move == 0:
print(" ")
else:
insertLetter('O' , move)
print('computer placed an O on position' , move , ':')
printBoard(board)
else:
print("You Win!")
break
if isBoardFull(board):
print("Tie Game")
while True:
x = input("Do you want to play again? (y/n)")
if x.lower() == 'y':
board = [' ' for x in range(10)]
print('---------------------')
main()
else:
break
解决方案
如果正在编辑板,python 将其视为局部变量。你想改变你的功能是
def insert_letters(letter,pos):
global board
board[x] = y
Some_other_stuff()
推荐阅读
- go - 如何在 Mac 上修复 dep 确保错误“无法统计文件”?
- excel - 在 Excel 中突出显示和删除部分重复项
- python - 使用 pandas 为每个日期时间值保留最新的行
- c# - 一个项目不能引用同一个解决方案的另一个项目——方法或操作没有实现
- vb.net - 使用VS 2017和VB连接数据库
- deep-learning - 任何测试 Pytorch 安装的脚本
- appdynamics - AppDynamics - 业务交易满足什么用例?
- javascript - 使用 eventListener 更改布尔值
- jira - 使用 Zapier 在 Trello 中移动卡时 JIRA 中的更新问题
- common-lisp - Common Lisp 中在加载/编译时将选项传递给库的常见做法