Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การสร้างตัวเลขสุ่มเทียมใน Python (random)

แอปพลิเคชันคอมพิวเตอร์หลายอย่างต้องการสร้างตัวเลขสุ่ม อย่างไรก็ตาม ไม่มีตัวใดสร้างตัวเลขสุ่มจริงได้ Python เหมือนเทคนิคการเขียนโปรแกรมอื่นๆ ใช้ตัวสร้างสุ่มเทียม (pseudo-random generator) การสุ่มของ Python อาศัยอัลกอริทึม Mersenne Twister ที่ผลิต float ความแม่นยำ 53-bit เทคนิคนี้เร็วและ thread-safe แต่ไม่เหมาะสำหรับวัตถุประสงค์ทางเข้ารหัส

ไลบรารีมาตรฐานของ Python มีโมดูล random ซึ่งกำหนดฟังก์ชันต่างๆ สำหรับจัดการการสุ่ม:

random.seed() - ฟังก์ชันนี้เริ่มต้นตัวสร้างตัวเลขสุ่ม เมื่อนำเข้าโมดูล random ตัวสร้างจะถูกเริ่มต้นด้วยความช่วยเหลือของเวลาระบบ เพื่อเริ่มต้นตัวสร้างใหม่ (reseed) ใช้ int, str, bytes หรือ bytearray object ใดๆ

random.getstate() - ฟังก์ชันนี้ร่วมกับ setstate() ช่วยให้สร้างข้อมูลสุ่มเดียวกันซ้ำๆ ได้ ฟังก์ชัน getstate() คืนค่าสถานะภายในของตัวสร้างตัวเลขสุ่ม

random.setstate() - ฟังก์ชันนี้กู้คืนสถานะภายในของตัวสร้าง

ฟังก์ชันต่อไปนี้จัดการการสร้างตัวเลขจำนวนเต็มสุ่ม:

random.randrange() - ฟังก์ชันนี้สร้างจำนวนเต็มสุ่มระหว่างช่วงที่กำหนด สามารถรับ 3 พารามิเตอร์:

random.randrange(start, stop, step)

พารามิเตอร์ start และ step เป็นตัวเลือก ค่าเริ่มต้นคือ 0 และ 1 ตามลำดับ Step กำหนดช่วงห่างระหว่างตัวเลขติดต่อกัน:

>>> random.randrange(10)
5
>>> random.randrange(10, 20)
17
>>> random.randrange(100, 200, 2)
188

(หมายเหตุ: จำไว้ว่าเอาต์พุทของคำสั่งข้างต้น และคำสั่งอื่นๆ ในบทความนี้อาจไม่เหมือนกัน เพราะสร้างขึ้นแบบสุ่ม)

random.randint() - ฟังก์ชันนี้สร้างจำนวนเต็มสุ่มระหว่าง 2 พารามิเตอร์ คล้ายกับ randrange() แต่ไม่มีพารามิเตอร์ step พารามิเตอร์ start บังคับ:

>>> random.randint(1, 10)
6
>>> random.randint(100, 200)
134

ฟังก์ชันต่อไปนี้จัดการตัวเลขทศนิยมสุ่ม:

random.random() - ฟังก์ชันนี้สร้างตัวเลขทศนิยมสุ่มระหว่าง 0.0 และ 1.0:

>>> random.random()
0.668544544081956

random.uniform() - ฟังก์ชันนี้คืนค่าตัวเลขทศนิยมสุ่มระหว่าง 2 พารามิเตอร์:

>>> random.uniform(0.5, 1.5)
1.2760281470664903
>>> random.uniform(1, 10)
7.336985794193224
>>> random.uniform(10, 5)
7.817794757786727

ฟังก์ชันต่อไปนี้กระทำต่ออ็อบเจ็กต์ลำดับ เช่น สตริง, ลิสต์ หรือทูเพิล:

random.choice() - ฟังก์ชันนี้เลือกองค์ประกอบสุ่มจากลำดับ หากลำดับว่าง จะยก IndexError:

>>> random.choice("Tutorialspoint")
'o'
>>> random.choice(range(10))
2
>>> random.choice([15, 31, 6, 29, 55, 5])
55
>>> random.choice((15, 31, 6, 29, 25, 55))
15

random.choices() - ฟังก์ชันนี้เลือกหลายองค์ประกอบจากลิสต์แบบสุ่ม พารามิเตอร์แรกคือลำดับ และพารามิเตอร์ที่สองคือจำนวนครั้งที่จะเลือก:

>>> name = "TutorialsPoint"
>>> random.choices(name, k=2)
['T', 'o']

random.shuffle() - ฟังก์ชันนี้เรียงลำดับองค์ประกอบในลำดับที่เปลี่ยนแปลงได้ (mutable sequence) และวางแบบสุ่ม:

>>> num = [10, 20, 30, 40, 50]
>>> random.shuffle(num)
>>> num
[50, 20, 40, 30, 10]

random.sample() - ฟังก์ชันนี้ทำงานกับลำดับที่ไม่เปลี่ยนแปลงได้ (immutable sequence) คืนค่ารายการของรายการที่เลือกสุ่มจากลำดับ โดยปล่อยให้ลำดับเดิมคงที่:

>>> name = "TutorialsPoint"
>>> nm = random.sample(name, k=2)
>>> name, nm
('TutorialsPoint', ['i', 'a'])