尼姆游戲是個著名的游戲,有很多變種玩法。兩個玩家輪流從一堆物品中拿走一部分。在每一步中,玩家可以自由選擇拿走多少物品,但是必須至少拿走一個并且最多只能拿走一半物品,然后輪到下一個玩家。拿走最后一個物品的玩家則輸掉游戲
在聰明模式中,計算機每次拿走一定數量的物品使得堆的大小是 2 的冪次方減 1—也就是 3、7、15、31、63 等。如果有一定數量的剩余物品,計算機就隨機拿出一些。編寫程序,模擬聰明版本的尼姆游戲。
先創建兩個函數,一個用于玩家拿走商品,另一個用于電腦拿走商品。題目要求電腦要隨機挑選,因此我們用到了random庫中的choice方法,用法為random.choice(iterable),就是從序列中隨機挑選一個元素。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
import random # 玩家拿走物品 def play(num): while True : try : if num = = 1 : print ( '請輸入要拿走物品的數量(1)' ) take_num = int ( input ()) assert take_num = = 1 else : print ( '請輸入要拿走物品的數量(1-%d)' % (num / 2 )) take_num = int ( input ()) assert 1 < = take_num < = num / / 2 except (ValueError, AssertionError): print ( '請正確輸入數量!' ) else : break num - = take_num print ( '玩家拿走了' , take_num, '個,還剩' , num, '個' ) return num # 電腦拿走物品 def computer(num): take_max = num / / 2 lst = [] for i in range ( 1 , num): temp = 2 * * i - 1 if temp < = num - 1 : lst.append(temp) else : break lst = list ( filter ( lambda y: num - y < = num / / 2 , lst)) if lst: temp_lst = [] for i in lst: x = num - i temp_lst.append(x) take_num = random.choice(temp_lst) num - = take_num print ( '電腦拿走了' , take_num, '個,還剩' , num, '個' ) return num else : take_num = random.randint( 1 , take_max) num - = take_num print ( '電腦拿走了' , take_num, '個,還剩' , num, '個' ) return num while True : try : initial_value = int ( input ( '請輸入起始數量堆的大?。?#39; )) except (ValueError, AssertionError): print ( '請正確輸入數量!' ) else : break player = 1 computer_player = 1 # 依次循環玩家和電腦那走物品,若玩家先拿完則提前跳出循環,若電腦先拿完則正常退出循環 while computer_player and player: initial_value = play(initial_value) player = initial_value if player = = 0 or player = = 1 : break initial_value = computer(initial_value) computer_player = initial_value if player = = 0 : print ( '\n電腦勝利!' ) else : print ( '電腦拿走了 1 個,還剩 0 個' ) print ( '\n玩家勝利!' ) |
以上代碼純本人想法,若有更好的想法可留言一起探討
到此這篇關于Python實現聰明的尼姆游戲的文章就介紹到這了,更多相關Python尼姆游戲內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/m0_46457323/article/details/121594329