为什么python中出现unicode编码错误?

为什么python中出现unicode编码错误?,python,sublimetext,Python,Sublimetext,我开始学习Python,我只是简单地复制了一个粘贴的代码来在sublime文本编辑器中运行,但它在第163行和第30行显示了三个错误。它显示的另一个错误如下 File "C:\Users\JAYPA\Documents\Sublime_TicAI.py", line 164, in <module> `drawBoard()` File "C:\Users\JAYPA\Documents\Sublime_TicAI.py", line 31, in `drawBoard

我开始学习Python,我只是简单地复制了一个粘贴的代码来在sublime文本编辑器中运行,但它在第163行和第30行显示了三个错误。它显示的另一个错误如下

File "C:\Users\JAYPA\Documents\Sublime_TicAI.py", line 164, in <module>
    `drawBoard()`
  File "C:\Users\JAYPA\Documents\Sublime_TicAI.py", line 31, in `drawBoard
    board_status[1], board_status[2], board_status[3]`))
  File "C:\Users\JAYPA\AppData\Local\Programs\Python\Python37\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 1-13: character maps to <undefined>
文件“C:\Users\JAYPA\Documents\Sublime\u TicAI.py”,第164行,在
`拖板`
文件“C:\Users\JAYPA\Documents\Sublime_TicAI.py”,第31行,在“drawBoard”中
线路板状态[1],线路板状态[2],线路板状态[3]`)
文件“C:\Users\JAYPA\AppData\Local\Programs\Python\37\lib\encodings\cp1252.py”,第19行,在encode中
返回codecs.charmap\u encode(输入、自身错误、编码表)[0]
UnicodeEncodeError:“charmap”编解码器无法对位置1-13中的字符进行编码:字符映射到
有人能帮我吗

from random import randint, choice
from os import system as bash
from time import time


def intInput(StringToDisplay):
    # Simply checks that input is valid integer
    while True:
        try:
            x = int(input(StringToDisplay))
            return x
            break
        except ValueError:
            print('Input integer number, please')
        except Exception:
            print('Unexpected error or keyboard interrupt')


def drawBoard():
    print('\
 ╔═══╦═══╦═══╗\n\
 ║ {0} ║ {1} ║ {2} ║\n\
 ╠═══╬═══╬═══╣\n\
 ║ {3} ║ {4} ║ {5} ║\n\
 ╠═══╬═══╬═══╣\n\
 ║ {6} ║ {7} ║ {8} ║\n\
 ╚═══╩═══╩═══╝ '.format(
               board_status[7], board_status[8], board_status[9],
               board_status[4], board_status[5], board_status[6],     
               board_status[1], board_status[2], board_status[3]))


def askPlayerLetter():
    # Function that asks which letter player wants to use
    print('Do you want to be X or O?')
    Letter = input().upper()
    while Letter != 'X' and Letter != 'O':
        print('Please type appropriate symbol')
        Letter = input('Prompt: ').upper()
    if Letter == 'X':  # then X will be used by player; O by computer
        return ['X', 'O']
    else:
        return ['O', 'X']


def whoGoesFirst():
    # Timer used to count 0.75 seconds while displaying who goes first
    if randint(0, 1) == 0:
        CurrentTime, Timer = time(), time() + 0.75
        print('You go first')
        while Timer > CurrentTime:
            CurrentTime = time()
        return 'player'
    else:
        CurrentTime, Timer = time(), time() + 0.75
        print('Computer goes first')
        while Timer > CurrentTime:
            CurrentTime = time()
        return 'computer'


def makeMove(Board, Move, Letter):
    Board[Move] = Letter


def isSpaceFree(Board, Move):
    return Board[Move] == ' '


def playerMove():
    Move = 0
    while not (0 < Move < 10) or not (isSpaceFree(board_status, int(Move))):
        Move = intInput('Enter your move: ')
    return int(Move)


def isWinner(brd, lttr):
    # Returns a boolean value. brd (board) and lttr (letter) used to make
    # code block compact.
    return ((brd[7] == lttr and brd[8] == lttr and brd[9] == lttr) or
            (brd[4] == lttr and brd[5] == lttr and brd[6] == lttr) or
            (brd[1] == lttr and brd[2] == lttr and brd[3] == lttr) or
            (brd[7] == lttr and brd[5] == lttr and brd[3] == lttr) or
            (brd[9] == lttr and brd[5] == lttr and brd[1] == lttr) or
            (brd[7] == lttr and brd[4] == lttr and brd[1] == lttr) or
            (brd[8] == lttr and brd[5] == lttr and brd[2] == lttr) or
            (brd[9] == lttr and brd[6] == lttr and brd[3] == lttr))


def computerMove():
    '''
    Simple AI that checks
    1)Can computer win in the next move
    2)Can player win in the next move
    3)Is there any free corner
    4)Is center is free
    5)Is there any free side
    And returns a move digit

    '''


    for i in range(1, 10):
        Copy = board_status.copy()
        if isSpaceFree(Copy, i):
            makeMove(Copy, i, ComputerLetter)
            if isWinner(Copy, ComputerLetter):
                return i

    for i in range(1, 10):
        Copy = board_status.copy()
        if isSpaceFree(Copy, i):
            makeMove(Copy, i, PlayerLetter)
            if isWinner(Copy, PlayerLetter):
                return i

    move = randomMoveFromList([7, 9, 1, 3])
    if move is not None:
        return move

    if isSpaceFree(board_status, 5):
        return 5

    move = randomMoveFromList([8, 4, 2, 6])
    if move is not None:
        return move


def randomMoveFromList(MovesList):
    PossibleMoves = []
    for i in MovesList:
        if isSpaceFree(board_status, i):
            PossibleMoves.append(i)
    if len(PossibleMoves) != 0:
        return choice(PossibleMoves)
    else:
        return None


def isBoardFull():
    for i in range(1, 10):
        if isSpaceFree(board_status, i):
            return False
    return True


def playAgain():
    print('Do you want to play again? [y/N]')
    PlayAgainInput = input().lower()
    return (PlayAgainInput.startswith('y') or PlayAgainInput == '')

# "bash('clear')" function simply clears the screen of the terminal.
# If you want run this script on system that uses other shell then
# substitute "clear" with a command that your shell uses to clear the screen
# P.S. for windows it is "cls".

bash('clear')
print('Welcome to Tic Tac Toe')
PlayAgainWish = True
print('To win, you have to place 3 X-s or O-s in a row.\n\
Use NumPad to enter your move (!). Here is the key map.')
board_status = ['', 1, 2, 3, 4, 5, 6, 7, 8, 9]
drawBoard()
print('You have to be sure that you are making move to a free cell.\n\n')
PlayerLetter, ComputerLetter = askPlayerLetter()
while PlayAgainWish:
    bash('clear')
    board_status = 10 * [' ']
    turn = whoGoesFirst()
    while True:
        if turn == 'player':
            bash('clear')
            print('   YOUR MOVE')
            drawBoard()
            move = playerMove()
            makeMove(board_status, move, PlayerLetter)
            turn = 'computer'
            if isWinner(board_status, PlayerLetter):
                bash('clear')
                print('Hooray, you have won the game!')
                drawBoard()
                PlayAgainWish = playAgain()
                break
            elif isBoardFull():
                bash('clear')
                print("It's a tie!")
                drawBoard()
                PlayAgainWish = playAgain()
                break
        else:
            # All this dots and timers are used to make animation of
            # computer moving. You will understand if you will run the script.
            for i in ['', '.', '..', '...']:
                bash('clear')
                print(' Computer is making move' + i)
                drawBoard()
                CurrentTime, Timer = time(), time() + 0.15
                while Timer > CurrentTime:
                    CurrentTime = time()
                if i == '..':
                    move = computerMove()
                    makeMove(board_status, move, ComputerLetter)
                    turn = 'player'
            if isWinner(board_status, ComputerLetter):
                bash('clear')
                print('Oops, you lose!')
                drawBoard()
                PlayAgainWish = playAgain()
                break
            elif isBoardFull():
                bash('clear')
                print("It's a tie!")
                DrawBoard()
                PlayAgainWish = playAgain()
                break
从随机导入随机输入,选择
从操作系统导入系统作为bash
从时间导入时间
def输入(StringToDisplay):
#只需检查输入是否为有效整数
尽管如此:
尝试:
x=int(输入(StringToDisplay))
返回x
打破
除值错误外:
打印('请输入整数')
除例外情况外:
打印('意外错误或键盘中断')
def牵引板():
打印('\
╔═══╦═══╦═══╗\n\
║ {0} ║ {1} ║ {2} ║\n\
╠═══╬═══╬═══╣\n\
║ {3} ║ {4} ║ {5} ║\n\
╠═══╬═══╬═══╣\n\
║ {6} ║ {7} ║ {8} ║\n\
╚═══╩═══╩═══╝ '.格式(
单板状态[7],单板状态[8],单板状态[9],
单板状态[4],单板状态[5],单板状态[6],
线路板状态[1],线路板状态[2],线路板状态[3]))
def askPlayerLetter():
#询问字母播放器要使用哪个字母的函数
打印('您想成为X还是O?')
字母=输入()
而信X'和字母!='O':
打印('请键入适当的符号')
字母=输入('Prompt:')。上限()
如果字母=='X':#那么玩家将使用X;O通过计算机
返回['X','O']
其他:
返回['O','X']
def who goesfirst():
#计时器用于在显示谁先走时计数0.75秒
如果randint(0,1)=0:
CurrentTime,Timer=time(),time()+0.75
打印('你先走')
计时器>当前时间时:
CurrentTime=时间()
返回“玩家”
其他:
CurrentTime,Timer=time(),time()+0.75
打印('计算机优先')
计时器>当前时间时:
CurrentTime=时间()
返回“计算机”
def makeMove(板、移动、字母):
板[动]=信
def isSpaceFree(板,移动):
返回板[移动]==''
def playerMove():
移动=0
而不是(0<移动<10)或不是(isSpaceFree(板_状态,int(移动)):
Move=intInput('输入您的移动:')
返回整数(移动)
def isWinner(brd、lttr):
#返回一个布尔值。brd(董事会)和lttr(信函)用于
#代码块压缩。
返回((brd[7]==lttr和brd[8]==lttr和brd[9]==lttr)或
(brd[4]==lttr和brd[5]==lttr和brd[6]==lttr)或
(brd[1]==lttr和brd[2]==lttr和brd[3]==lttr)或
(brd[7]==lttr和brd[5]==lttr和brd[3]==lttr)或
(brd[9]==lttr和brd[5]==lttr和brd[1]==lttr)或
(brd[7]==lttr和brd[4]==lttr和brd[1]==lttr)或
(brd[8]==lttr和brd[5]==lttr和brd[2]==lttr)或
(brd[9]==lttr和brd[6]==lttr和brd[3]==lttr))
def computerMove():
'''
检查的简单人工智能
1) 下一步计算机能赢吗
2) 玩家下一步能赢吗
3) 有免费的角落吗
4) 中心是免费的吗
5) 有自由的一面吗
并返回一个移动数字
'''
对于范围(1,10)内的i:
复制=电路板状态。复制()
如果isSpaceFree(副本,i):
makeMove(副本、i、计算机信函)
如果是赢家(复印件,电子信函):
返回i
对于范围(1,10)内的i:
复制=电路板状态。复制()
如果isSpaceFree(副本,i):
makeMove(复制、i、播放文字)
如果是赢家(复制,播放记录):
返回i
move=randomMoveFromList([7,9,1,3])
如果“移动”不是“无”:
回击
如果isSpaceFree(电路板状态,5):
返回5
move=randomMoveFromList([8,4,2,6])
如果“移动”不是“无”:
回击
def randomMoveFromList(移动列表):
可能移动=[]
对于MovesList中的i:
如果isSpaceFree(板状态,i):
可能移动。附加(i)
如果len(可能移动)!=0:
返回选项(可能移动)
其他:
一无所获
def isBoardFull():
对于范围(1,10)内的i:
如果isSpaceFree(板状态,i):
返回错误
返回真值
def playreach():
打印('是否要再次播放?[y/N]')
PlayAgainInput=input().lower()
return(PlayAgainInput.startswith('y')或PlayAgainInput='')
#“bash('clear')”函数只是清除终端的屏幕。
#如果您想在使用其他shell的系统上运行此脚本,那么
#用shell用于清除屏幕的命令替换“clear”
#注意:对于windows,它是“cls”。
bash(‘清除’)
打印(‘欢迎来到Tic Tac Toe’)
PlayAgainWish=True
print('要赢得比赛,必须将3个X-s或O-s排成一行。\n\
使用NumPad输入您的移动(!)。这是关键地图。“)
董事会状态=['',1,2,3,4,5,6,7,8,9]
拖板
打印('必须确保移动到空闲单元格。\n\n')
PlayerLetter,ComputerLetter=askPlayerLetter()
在PlayAgainWish期间:
bash(‘清除’)
董事会状态=10*['']
回合=谁先去()
尽管如此:
如果回合==“玩家”:
bash(‘清除’)
打印('YOUR MOVE')
拖板
move=playerMove()
makeMove(棋盘状态、移动、播放记录)