练习:尼姆游戏(聪明版/傻瓜式•人机对战)
生活随笔
收集整理的這篇文章主要介紹了
练习:尼姆游戏(聪明版/傻瓜式•人机对战)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
??尼姆游戲,這是一個著名的游戲,有很多變種玩法。兩個玩家輪流從一堆物品中拿走一部分。在每一步中,玩家可以自由選擇拿走多少物品,但是必須拿走一部并且最多只能拿走一半物品,然后輪到下一個玩家。拿走最后一個物品的玩家輸掉游戲。先手隨機。(2021-12-08 :44)我已優化代碼,當時app更新,不支持修正已發博文,另發一篇《尼姆游戲修正優化版》。
代碼運行效果
回首頁
python代碼
#/sur/bin/nve python # coding: utf-8 import os #用os.system(r'clear')清屏 import random #用random.randint()隨機取數def clear():'''#Linux清屏'''clear = os.system(r'clear')def optimal(n):'''機器最優拿法'''if n in (1, 2, 3, 4):return 1take = int(n/2)m = 1for i in range(take):if m>take:breakm *= 2take = n-m+1if take>int(n/2):take = random.randint(1, int(n/2))return takedef common(n):'''機器一般拿法'''while True:if n==1:return 1return random.randint(1, int(n/2))def effect(first, take, n):'''結果輸出'''cl()print('\n'*6)flag_s = ('簡單', '困難')[flag-1]print('%s\n'%('【%s】'%flag_s).rjust(20))print('﹊'*21)print(' '*4, end='')print('%s已取走%s。物品堆物品還剩%s。'%(first, take, n))print('﹊'*21)def show_error():'''報錯信息打印'''print('\n\n%s'%error)print('輸入錯誤!請重試。'.rjust(20))print('﹊'*21)input('任意鍵繼續……'.rjust(20))#Main Codes cl = clear s = '''尼姆游戲,這是一個著名的游戲,有很多變種玩法。兩個玩家輪流從一堆物品中拿走一部分。在每一步中,玩家可以自由選擇拿走多少物品,但是必須拿走一個并且最多只能拿走一半物品,然后輪到下一個玩家。拿走最后一個物品的玩家輸掉游戲。先手隨機。 ''' #規則打印 cl() print('\n\n%s'%'“尼姆”游戲規則'.rjust(20)) print() print('﹊'*21) print(s) print('﹊'*21) input('任意鍵繼續……'.rjust(20)) #難度選擇 while True:cl()print('\n'*6)print('\n%s'%'【難度選擇】'.rjust(20))print()print('﹊'*21)print('1. 簡單 2. 困難'.rjust(24))print('﹊'*21)try:flag = int(input('請選擇:'.rjust(12)))if flag not in (1, 2):error()continuebreakexcept Exception as error:show_error()#開始游戲 p = '小可愛' cl() print('\n'*6) while True:try:c = input('給對手命名:'.rjust(12))breakexcept Exception as error:error()continue if flag==2:n = random.randint(1, 500) else:n = random.randint(1, 100) cl() print('\n'*6) print('﹊'*21) print('%s\n'%'【本局游戲物品堆】'.rjust(21)) print(('%s:%3d'%('物品總數', n)).rjust(22)) print('﹊'*21) input('任意鍵繼續……'.rjust(20)) #隨機先手選擇 first = random.choice((c, p)) while n>0:#機器取if flag==2 and first==c:take = optimal(n)n = n-takeif flag==1 and first==c:take = common(n)n = n-takeif first==c:effect(first, take, n)if n==0:breakfirst = p #轉換玩家先手#玩家取if first==p:while True:try:take = int(input('\n%s'%'您取物:'.rjust(12)))if take==1 and (n in (1, 2, 3)):breakif take>int(n/2) or take<1:error()continue breakexcept Exception as error:show_error()n = n-takeif first==p:effect('您', take, n)input('任意鍵繼續……'.rjust(20))if n==0:breakfirst = c #轉換機器先手#結果輸出 if first==p:first = '您' cl() print('\n'*6) print('﹊'*21) print(('%s輸了!'%first).rjust(20)) print('﹊'*21)此篇博文發文時沒有完善代碼,有些錯漏。修正后正值app更新到最新版本,不可以修改已發博文了,才另發一篇“練習:尼姆游戲(優化版)”。今天app再次更新,又能修正已發博文,在此加上后文鏈接。(2021-12-05)
回首頁
上一篇:?練習:任意多行字條串拆分數值求和&冒泡排序&兩數的最大公約數和最大公倍數
下一篇:?尼姆游戲(修正優化版)
回首頁
精品文章:
- 通過內置對象理解python
- Python 完全自學手冊
- 海象運算符
- Python中的 `!=`與`is not`不同
- 學習編程的正確方法
來源:老齊教室
總結
以上是生活随笔為你收集整理的练习:尼姆游戏(聪明版/傻瓜式•人机对战)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: webstorm直接运行js
- 下一篇: P背景软件测试,软件测试的背景和发展