文章程式碼顯示

2017年8月16日 星期三

一起學 Python - 07 :import random 載入模塊? 結構體?

猜想的數字如果是固定的(如先前的 6 ),這樣不就很容易被破解了嗎?
不夠好玩 ! 於是我們引入亂數產生器

以下為程式碼

import random
answer = random.randint(1,10)

temp = input("輸入猜想的數字")
guess = int(temp)

if guess == answer :
    print("""哎呀一次就猜對了
你神仙不?""")
    

else :
    while guess != answer:
        if guess > answer :
            print("太大啦~~~~~~~\n")
        else :
            print("在大一點啊哥們\n")

        temp = input("再次輸入猜想的數字") 
        guess = int(temp)
    print("終於猜對啦")

print("\n遊戲結束 .") 

提取出與之前的程式碼唯一有差異的地方
import random
answer = random.randint(1,10)

(發現此結構與Verilog(硬體描述語言)呼叫module的型態非常相似,且在網路上多半也把這樣的寫法說成呼叫 random 模塊或 random 模組)

在程式碼的第一行 import 了一個名為 random 的模組(module),事實上我之前寫 Verilog 就驚艷其將每個 module 經由 top level 相互連在一塊兒,那種搭積木的感覺,沒想到 Python 也是這樣幹的阿 ...

而 C 語言與此較類似的地方就屬於建立結構體跟呼叫 object 了

以上為題外話,若有 C 語言及 Verilog 經驗的人可能較能理解我在說些什麼。

回到白紙的模式

程式中的第一行載入了一個名為 random 的模組(module),其功用是告訴 Python 在這個腳本裡面,我們將要使用 random 模組裡面的功能了。

而模塊的概念很好理解,我們在先前的文章寫程式碼時,常常會呼叫函數例如 print() ,但 Python 裡面內建的函數有限,所以當我們需要一些特殊的函數時,就必須導入其他的模組(在這裡我們就導入 random 模組),而模組內會自帶很多額外的函數,就像是裝設外掛的概念

第二行分兩個部分看,左半邊是一個名為answer的變數,其值被等號右半邊的語句賦予。而右邊那一長串可以拆成三個部分來看,分別是

random
模組的名稱

.randint
要呼叫模組名稱內哪個功能(或者我們可以理解成,要使用模組包內哪一個函數)在此為 randint 函數, randint為整數亂數的意思。

(1,10)
指定隨機亂數產生回傳的範圍,回傳1~10的整數 如:1,2,3,4,5,6,7,8,9,10

由此我們就可以知道,此腳本在每次重新執行時都會呼叫 random 模組替 answer 賦予一個1~10的亂數,藉此我們就可以實現每次玩都是不同的數字了。

補充說明:

在交談式視窗中鍵入import random 以及 help(random)即可得到此 module 的說明














由此看出的確是 C語言結構體的組成



















在此找到了 randint 的用法





在此引用此網頁,得知幾個比較常用的 random模組包裡的函數


隨機選取偶數
random.randrange(0, 101, 2)
42

隨機回傳浮點數
random.uniform(1, 10)
5.4221167969800881

隨機選擇一串字串中的某一個字符
random.choice(‘abcdefg&#%^*f’)
‘d’

一串字串中隨機選擇三個字符
random.sample(‘abcdefghij’,3)
[‘a’, ‘d’, ‘b’]

隨機選取字串
random.choice ( [‘apple’, ‘pear’, ‘peach’, ‘orange’, ‘lemon’] )
‘lemon’

洗牌
items = [1, 2, 3, 4, 5, 6]
random.shuffle(items)
items
[3, 2, 5, 6, 4, 1]

↓↓↓ 連結到部落格方針與索引 ↓↓↓

Blog 使用方針與索引