相信許多小伙伴都玩過數字炸彈游戲,就是指在一定數字范圍(一般是整數,不包含邊界)里,一個玩家選中一個數字當作炸彈,其余玩家在這個范圍猜數字,每次只要沒猜中炸彈數字,則根據玩家猜的數字縮小范圍,直至其中一個玩家猜中炸彈數字,游戲結束。
在這里,我們可以嘗試用Python編程的思想來拆解游戲過程(純屬無聊),核心主要為以下兩個問題:
(1)數字炸彈的產生
(2)如何縮小范圍
第一個問題很簡單,可以使用random模塊隨機生成,需要注意的是數字炸彈不包含邊界,randint函數可以生成指定范圍的整數,但包含邊界,所以需要做一下處理。本人是采用循環的方法,將生成的不符合要求的數字炸彈過濾掉;第二個問題是更為核心的問題,不斷縮小范圍,我們容易想到用while循環,最后猜中數字break跳出循環,游戲結束。
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
|
import random def user_num(): num = int ( input ( '請輸入你的數字:\n' )) return num def max_num(): max_num = int ( input ( '請輸入最高數字:\n' )) return max_num def min_num(): min_num = int ( input ( '請輸入起始數字:\n' )) return min_num min_num,max_num = min_num(),max_num() while True : res = random.randint(min_num,max_num) #res可能會包括兩端數字,需剔除 if res! = min_num and res! = max_num: break f = [min_num,max_num] #核心代碼 def comp(a,b): if a>b: f[ 1 ] = a else : f[ 0 ] = a print ( '游戲繼續,范圍{}到{},請再次輸入' . format (f[ 0 ],f[ 1 ])) flag = 0 while True : num = user_num() if num not in range (f[ 0 ],f[ 1 ]): print ( '不在范圍內,請重新輸入' ) continue elif num! = res: comp(num,res) elif num = = res: print ( "你猜中啦,游戲結束!" ) break flag + = 1 print ( "你一共猜了%d次" % flag) |
核心代碼那里我定義了一個比較函數,用來更替范圍的兩端,這樣就可實現縮小猜數范圍。代碼還可以繼續完善,不過本人還是菜鳥,光想這個問題二就想了不少時間。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/qq_43034773/article/details/90141717