今天來開發一個簡單的數字邏輯遊戲,猜數字(數字炸彈)
首先開發遊戲第一件事,瞭解需求。
猜數字遊戲規則:
計算機隨機生成一個指定範圍的數字,由玩家來猜測,
之後計算機會根據玩家提供數字來與自己生成的數字進行對比,並返回結果太大或者太小
例:計算機隨機生成1-100的數字53,玩家猜測爲50,計算機對比結果後返回結果:太小了
多次重複直到玩家猜中數字,遊戲結束統計分數。
需求分析:
1.計算機隨機生成數字;
2.與輸入結果進行比較,返回太大太小結果;
3.判定是否回答正確,結束遊戲;
3.記錄分數並且輸出;
開發環境:
python版本:IDLE 3.7
開 發 軟 件:sublime_text
技術支持:
隨機數在計算機應用中十分常見,在Python中,通過內置random庫來實現產生各種分佈的僞隨機數序列。
random數據庫通過採用梅森旋轉算法,可用於除隨機性要求更高的加密算法外的大多數工程應用。
簡單理解,random庫的作用就是生成隨機數。主要使用函數如下:
1. random.random()
random.random()方法返回一個隨機數,其在[0.0,1.0)的範圍之內的隨機小數。
2. random.uniform(a,b)
random.uniform()是在指定範圍內生成隨機小數,其有兩個參數,一個是範圍上限,一個是範圍下限,範圍爲[a,b]。
3. random.randint(a,b)
random.randint()是隨機生成指定範圍內的整數,其有兩個參數,一個是範圍上限,一個是範圍下限制,範圍爲[a,b]。
4. random.randrange(start,stop[,step])
random.randrange()是在指定範圍內,按指定基數遞增的集合中獲得一個隨機數,有三個參數,前兩個參數代表範圍上限和下限,第三個參數是遞增增量,默認爲1。
5. random.choice(sep)
random.choice()是從序列中獲取一個隨機元素。
6. random.shuffle(sep)
random.shuffle()函數是將一個列表中的元素打亂,隨機排序。
7. random.sample(pop,k)
random.sample()函數是從指定序列中隨機獲取指定長度的片段,原有序列不會改變,有兩個參數,第一個參數代表指定序列,第二個參數是需獲取的片段長度。
8. randm.getrandbits(k)
getrandbits()函數生成一個k比特長度的隨機整數
8. randm.seed(a=None)
seed()函數主要作用爲初始化隨機數種子,默認值爲當前系統時間
程序開發:
參照需求分析,開發步驟如下
1.創建一個指定範圍內的整數,以1-100爲例
首先生成隨機數需要調用random函數,爲方便通過關鍵詞as改爲r。
其次我們需要生成的數字爲整數,且有着明確的範圍,所有應當使用random.randint(a,b)來生成對應整數。
最後輸出檢測是否成功生成。
代碼設計如下
import random as r
a = r.randint(1,100)
print(a)
注意:有的同學習慣將第二行、第三行寫到一起,即:print(r.random(1,100))
這樣寫是沒有任何問題的,但是由於後期判斷玩家回答是否正確需要用到這一數字,所以還是創建一個變量來保存比較好。
2.接收玩家輸入的數字,並且計較大小
首先創建一個變量來接收玩家輸入的數字,剛剛使用的a來存儲計算機所生成的隨機數,所以這裏用b來代表玩家輸入的數字。
之後使用 if 判斷語句來將玩家輸入數字b與計算機生成數據a來作比較 。
當b>a時輸出太大了;當b<a時輸出太小了;當 b=a時輸出猜中了。
代碼如下:
import random as r
a = r.randint(1,100)
# 方便調試程序、調試結束當將本句註釋掉
print(a)
b=int(input("輸入數字"))
if b>a:
print("太大了")
elif b<a:
print("太小了")
else:
print("恭喜答對")
注意:由於b是通過input()函數接收到的數據,所以b默認的數據類型爲string,所以會報錯string類型的b不能與int類型的a做比較大小操作。情況如下
解決方法:
1.通過int(),改變b的數據類型,如上文所寫b=int(input("輸入數字"))
2.通過eval(),自動識別接收數據類型
3.創建循環,重複第二部分,直到玩家答對數字
兩種循環,for循環和 while循環哪一個更好一點呢?
for循環的特點爲先判斷條件,再執行語句。
while循環的特點爲先執行語句,再循環。
猜數字遊戲自然是先執行語句再判斷的好所以本處使用while循環
跳出循環的條件爲玩家回答正確,跳出的方式也多種多樣
第一種:判斷條件爲False
我們可以創建變量 flag,while條件爲flag爲真
此時只需要在玩家回答正確之後,更改falg值爲假即可。
import random as r
a = r.randint(1,100)
# 方便調試程序、調試結束當將本句註釋掉
print(a)
flag = 1
while flag == 1:
b=int(input("輸入數字"))
if b>a:
print("太大了")
elif b<a:
print("太小了")
else:
print("恭喜答對")
flag = 0
第二種:break跳出
關鍵字break 功能爲跳出本循環體,所以這時候可以設定while循環條件恆爲真
import random as r
a = r.randint(1,100)
# 方便調試程序、調試結束當將本句註釋掉
print(a)
while True:
b=int(input("輸入數字"))
if b>a:
print("太大了")
elif b<a:
print("太小了")
else:
print("恭喜答對")
break
4.添加分數、遊戲輸出
分數的統計方法十分簡單,只需要統計循環體的循環次數即可。
設定一個變量來統計循環次數,變量初量爲“0”,在每次循環前變量+1即可。
當然個人喜好也可以賦初值爲100,每次循環-1,最後統計輸出數值即可。
所以最終代碼如下:
import random as r
a = r.randint(1,100)
# 方便調試程序、調試結束當將本句註釋掉
#print(a)
score = 0
while True:
b=int(input("輸入數字"))
score+=1
if b>a:
print("太大了")
elif b<a:
print("太小了")
else:
print("恭喜答對")
break
print("score=%d"%score)
程序優化:
1.手動輸入上下限制
上述程序中,以1-100爲例,而我們平常所使用中,可以自主設定上下限。
所以第一步將原來的限制更改爲自主輸入。
上述設定a爲計算機生成數,b爲玩家輸入數字,理所當然c、d承擔起上下限制的重任
首先需要來接收玩家輸入的數據,由於生成的隨機數a需要上下限制的參數,所以接收應當在生成隨機數前面。
之後將random傳入參數改爲 變量名c、d
如下代碼所示
import random as r
c = int(input("請輸入最小數"))
d = int(input("請輸入最大數"))
a = r.randint(c,d)
# 方便調試程序、調試結束當將本句註釋掉
#print(a)
score = 0
while True:
b=int(input("輸入數字"))
score+=1
if b>a:
print("太大了")
elif b<a:
print("太小了")
else:
print("恭喜答對")
break
print("score=%d"%score)
2.顯示數字範圍
每一次都只回應請”輸入數字”,如果可以將之前的數據更新迭代,也就是輸出範圍想來要比原計劃好一些。
如果這樣做,最先修改的便是輸入b時候的語句,需要將上下限制加入。
之後上下限制的數據也要對應發生改變,以1-100爲範圍,隨機數爲60爲例:
玩家輸入50,計算機給出迴應太小了,之後請求輸入的是51-100的數據。
也就是說最初玩家輸入c(1)~d(100) 當玩家輸入新數據b(50)之後,cd將要根據b的情況來更新
當太小了時候,c=b+1
當太大了時候,d=b-1
代碼以及結果如下:
import random as r
c = int(input("請輸入最小數"))
d = int(input("請輸入最大數"))
a = r.randint(c,d)
# 方便調試程序、調試結束當將本句註釋掉
print(a)
score = 0
while True:
b=int(input("輸入%d到%d數字:"%(c,d)))
score+=1
if b>a:
print("太大了")
d=b-1
elif b<a:
print("太小了")
c=b+1
else:
print("恭喜答對")
break
print("score=%d"%score)
原文出處:https://www.cnblogs.com/lyy135146/p/11703283.html