最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

我的python之路三:井字棋

2022-12-14 23:08 作者:沙砂汾不清請(qǐng)褚諸  | 我要投稿

from random import choice
X="X"
O="O"
EM=" "
TIE="平局"

def 程序初始界面():
? ?"""初始界面介紹"""
? ?print("歡迎使用井字棋,你將與電腦對(duì)戰(zhàn),九個(gè)格子的位置依次用1~9代替\n"
? ? ? ? ?"每走一步,請(qǐng)輸入1~9的數(shù)字")
? ?print("""
? ? ? ? ? ? ? ?1 | 2 | 3
? ? ? ? ? ? ? ?4 | 5 | 6
? ? ? ? ? ? ? ?7 | 8 | 9""")

def 請(qǐng)用戶輸入yn(提示):
? ?"""返回”y“或”n“"""
? ?key=None
? ?print(提示)
? ?while key not in("y","n"):
? ? ? ?key=input("請(qǐng)輸入y/n:").lower()
? ?return key

def 接收用戶走法():
? ?"""返回用戶指定走哪一步:1~9數(shù)字,返回0~8"""
? ?key = None
? ?while key not in ("1","2","3","4","5","6","7","8","9"):
? ? ? ?key = input("請(qǐng)輸入(1~9):")
? ?return int(key)-1

def 決定誰用啥():
? ?"""返回兩個(gè)值,第一個(gè)是用戶,第二個(gè)是電腦,取值為X或者O"""
? ?go_first=請(qǐng)用戶輸入yn("你是否要先走?先走輸入y,否則按n")
? ?if go_first =="y":
? ? ? ?print("你選擇了先走,你執(zhí)X,電腦執(zhí)O")
? ? ? ?human=X
? ? ? ?computer=O
? ?else:
? ? ? ?print("你選擇了不先走,你執(zhí)O,電腦執(zhí)X")
? ? ? ?human = O
? ? ? ?computer = X
? ?return human,computer

def 定義新棋盤():
? ?"""是一個(gè)長(zhǎng)度為9的列表,每個(gè)格都為空格"""
? ?棋盤=[]
? ?for i in range(9):
? ? ? ?棋盤.append(EM)
? ?return 棋盤

def 刷新棋盤(棋盤):
? ?"""只管輸出棋盤列表[]"""
? ?print("\n\t", 棋盤[0], "|", 棋盤[1], "|", 棋盤[2]," ? ? ? 1", "|","2", "|","3")
? ?print("\t", 棋盤[3], "|", 棋盤[4], "|", 棋盤[5]," ? ? ? 4", "|","5", "|","6")
? ?print("\t", 棋盤[6], "|", 棋盤[7], "|", 棋盤[8]," ? ? ? 7", "|","8", "|","9")

def 可以下子的列表(棋盤):
? ?"""位置用0~8表示,返回列表元素為0~8"""
? ?可下=[]
? ?for i in range(9):
? ? ? ?if 棋盤[i] == EM:
? ? ? ? ? ?可下.append(i)
? ?return 可下

def 局面(棋盤):
? ?"""掃描棋盤,返回四種狀態(tài):X,O,平局,None"""
? ?win=((0,1,2),(3,4,5),(6,7,8),(0,3,6),(1,4,7),(2,5,8),(0,4,8),(2,4,6))
? ?for i in win:
? ? ? ?if 棋盤[i[0]]==棋盤[i[1]]==棋盤[i[2]]!=EM:
? ? ? ? ? ?return 棋盤[i[0]]
? ?if EM not in 棋盤:
? ? ? ?return TIE
? ?else:
? ? ? ?return None

def 用戶下子(棋盤):#返回一個(gè)0~8的數(shù)字位置
? ?print("該你下了")
? ?while True:
? ? ? ?key=接收用戶走法()
? ? ? ?if 棋盤[key] !=EM:
? ? ? ? ? ?print("該位置有棋子了")
? ? ? ?else:
? ? ? ? ? ?break
? ?return key

def 電腦決定(棋子,棋盤):
? ?"""
? ?傳入電腦使用的棋子,返回一個(gè)0~8的數(shù)字位置,如果都滿了就返回None
? ?策略:
? ?生成一個(gè)合法下子位置列表
? ?先遍歷合法下子列表,依次下一子,判斷能不能贏,能贏就返回該位置
? ?再次遍歷合法下子列表,替玩家下一子,判斷能不能贏,能贏就返回該位置
? ?最后先確定一個(gè)最優(yōu)格順序表,中心最優(yōu),四角最差,
? ?在最優(yōu)順序表中依次找一個(gè)合法下子點(diǎn),返回該位置
? ?"""
? ?print("電腦思考中……")
? ?合法=可以下子的列表(棋盤)#合法為一個(gè)數(shù)字1~9列表
? ?棋盤副本=棋盤[:]
? ?for i in 合法:
? ? ? ?棋盤副本[i]=棋子#在合法處下自己的棋子
? ? ? ?j=局面(棋盤副本)#返回四種狀態(tài)字符串
? ? ? ?if j==棋子:#電腦贏了
? ? ? ? ? ?print("你輸了")
? ? ? ? ? ?return i
? ? ? ?棋盤副本[i] =EM

? ?if 棋子==X:
? ? ? ?對(duì)手棋子=O
? ?else:
? ? ? ?對(duì)手棋子=X
? ?棋盤副本 = 棋盤[:]
? ?for i in 合法:
? ? ? ?棋盤副本[i] = 對(duì)手棋子 ?# 在合法處下用戶的棋子
? ? ? ?j = 局面(棋盤副本)
? ? ? ?if j==對(duì)手棋子:#電腦贏了
? ? ? ? ? ?print("堵死你")
? ? ? ? ? ?return i
? ? ? ?棋盤副本[i] = EM

? ?棋盤副本 = 棋盤[:]
? ?if (棋盤副本.count(EM))>5:
? ? ? ?print("我想想……")
? ? ? ?if 棋盤副本[4]==EM:
? ? ? ? ? ?return 4
? ? ? ?elif (棋盤副本[1]==EM)or(棋盤副本[3]==EM)or(棋盤副本[5]==EM)or(棋盤副本[7]==EM):
? ? ? ? ? ?mm=[]
? ? ? ? ? ?for m in range(1,8,2):
? ? ? ? ? ? ? ?if 棋盤副本[m]==EM:
? ? ? ? ? ? ? ? ? ?mm.append(m)
? ? ? ? ? ?jg=choice(mm)
? ? ? ? ? ?return jg
? ? ? ?elif (棋盤副本[0]==EM)or(棋盤副本[2]==EM)or(棋盤副本[6]==EM)or(棋盤副本[8]==EM):
? ? ? ? ? ?mm=[]
? ? ? ? ? ?for m in [0,2,6,8]:
? ? ? ? ? ? ? ?if 棋盤副本[m] == EM:
? ? ? ? ? ? ? ? ? ?mm.append(m)
? ? ? ? ? ?jg = choice(mm)
? ? ? ? ? ?return jg
? ?else:
? ? ? ?print("我隨便下了")
? ? ? ?return choice(合法)


def 切換下棋方(t):
? ?"""將下棋方變量的內(nèi)容XO反轉(zhuǎn),傳入下棋方變量,返回XO"""
? ?if t==X:
? ? ? ?return O
? ?else:
? ? ? ?return X

def 結(jié)局處理(t,computer,human):
? ?"""t接收X,O,TIE"""
? ?if t!=TIE:
? ? ? ?print(f"{t}贏了")
? ? ? ?if t==computer:
? ? ? ? ? ?print("不好意思,贏的是我,愚蠢的人類")
? ? ? ? ? ?global sc
? ? ? ? ? ?sc+=1
? ? ? ?elif t==human:
? ? ? ? ? ?print("祝賀你,戰(zhàn)勝了一臺(tái)電腦")
? ? ? ? ? ?global sh
? ? ? ? ? ?sh+=1
? ?else:
? ? ? ?print("游戲結(jié)束,平局")

def main(誰是X):
? ?"""傳入?yún)?shù)’h'或'c',h代表本局用戶先走"""
? ?pan=定義新棋盤()
? ?刷新棋盤(pan)
? ?if 誰是X=="h":
? ? ? ?turn=human
? ?else:
? ? ? ?turn=computer
? ?while 局面(pan)==None: ?#掃描棋盤,返回四種狀態(tài):X,O,平局,None
? ? ? ?if turn == human:
? ? ? ? ? ?print("你是",human)
? ? ? ? ? ?下子=用戶下子(pan)
? ? ? ? ? ?pan[下子]=human
? ? ? ?else:
? ? ? ? ? ?下子=電腦決定(computer,pan)
? ? ? ? ? ?pan[下子] = computer
? ? ? ?刷新棋盤(pan)
? ? ? ?turn=切換下棋方(turn)

? ?結(jié)局=局面(pan)
? ?結(jié)局處理(結(jié)局, computer, human)



n=1
sc,sh=0,0
程序初始界面()
human, computer = 決定誰用啥()
if human == X:
? ?先 = "h"
else:
? ?先 = "c"
while True:
? ?main(先)
? ?key = 請(qǐng)用戶輸入yn("\n\n是否再玩一次?")
? ?if key == "y":
? ? ? ?n += 1
? ? ? ?if 先 == "h":
? ? ? ? ? ?先="c"
? ? ? ? ? ?print("這局電腦先")
? ? ? ?else:
? ? ? ? ? ?先="h"
? ? ? ? ? ?print("這局你先")
? ?else:
? ? ? ?print(f"游戲結(jié)束,共玩了{(lán)n}次","你贏了",sh,"次")
? ? ? ?break
exit()

我的python之路三:井字棋的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
兴文县| 蒙阴县| 安康市| 阳泉市| 绍兴县| 芦溪县| 梨树县| 民和| 贵南县| 松原市| 厦门市| 诸暨市| 陕西省| 晋中市| 舟曲县| 木里| 吉木乃县| 高唐县| 阆中市| 墨竹工卡县| 邵阳县| 阿巴嘎旗| 江达县| 禄劝| 克东县| 英吉沙县| 柞水县| 江孜县| 华宁县| 江北区| 溆浦县| 彰化市| 谢通门县| 永宁县| 石棉县| 黄冈市| 泽普县| 茂名市| 洛南县| 南华县| 常宁市|