Python小遊戲——猜數字教程(random庫教程)

今天來開發一個簡單的數字邏輯遊戲,猜數字(數字炸彈)

 首先開發遊戲第一件事,瞭解需求。

猜數字遊戲規則:

計算機隨機生成一個指定範圍的數字,由玩家來猜測,

之後計算機會根據玩家提供數字來與自己生成的數字進行對比,並返回結果太大或者太小

例:計算機隨機生成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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章