random --- สร้างตัวเลขสุ่ม

โมดูลนี้ใช้งาน pseudo-random number generator (PRNG) โดย PRNG เป็น Yasmarang-style LCG แบบ 32 บิต เมื่อ import ครั้งแรกจะดึง seed ขนาด 32 บิตจากแหล่งฮาร์ดแวร์เดียวกับที่ os.urandom() ใช้ และตัวเลขถัดไปทุกตัวจะเป็นฟังก์ชันที่กำหนดได้จาก seed นั้น

Warning

ผลลัพธ์ไม่มีความปลอดภัยเชิงการเข้ารหัส -- อัลกอริทึมสามารถทำนายได้จากลำดับผลลัพธ์สั้นๆ และ seed เริ่มต้นมีความ entropy เพียง 32 บิต สำหรับข้อมูลสำคัญด้านการเข้ารหัส เช่น session token, password salt หรือการใช้งานที่ต้องการความปลอดภัย ให้เรียก os.urandom() แทน

Note

สัญลักษณ์ต่อไปนี้ใช้สำหรับช่วง:

  • () คือวงเล็บช่วงเปิดที่ไม่รวมค่าขอบเขต ตัวอย่างเช่น (0, 1) หมายถึงมากกว่า 0 และน้อยกว่า 1 ในรูปแบบเซต: (0, 1) = {x | 0 < x < 1}

  • [] คือวงเล็บช่วงปิดที่รวมจุดขอบเขตทั้งหมด ตัวอย่างเช่น [0, 1] หมายถึงมากกว่าหรือเท่ากับ 0 และน้อยกว่าหรือเท่ากับ 1 ในรูปแบบเซต: [0, 1] = {x | 0 <= x <= 1}

ฟังก์ชันสำหรับจำนวนเต็ม

random.getrandbits(n: int) int

คืนค่าจำนวนเต็มที่มี n บิตสุ่ม (0 <= n <= 32)

random.randint(a: int, b: int) int

คืนค่าจำนวนเต็มสุ่มในช่วง [a, b]

random.randrange(start: int, stop: int | None = None, step: int = 1) int

รูปแบบแรกคืนค่าจำนวนเต็มสุ่มจากช่วง [0, stop) รูปแบบที่สองคืนค่าจำนวนเต็มสุ่มจากช่วง [start, stop) รูปแบบที่สามคืนค่าจำนวนเต็มสุ่มจากช่วง [start, stop) โดยมีขั้น step ตัวอย่างเช่น การเรียก randrange(1, 10, 2) จะคืนค่าจำนวนคี่ระหว่าง 1 ถึง 9 รวม

ฟังก์ชันสำหรับจำนวนทศนิยม

random.random() float

คืนค่าจำนวนทศนิยมสุ่มในช่วง [0.0, 1.0)

random.uniform(a: float, b: float) float

คืนค่าจำนวนทศนิยมสุ่ม N โดยที่ a <= N <= b สำหรับ a <= b และ b <= N <= a สำหรับ b < a

ฟังก์ชันอื่นๆ

random.seed(n: int | None = None, /) None

กำหนดค่าเริ่มต้นให้โมดูล random number generator ด้วย seed n ซึ่งควรเป็นจำนวนเต็ม เมื่อไม่ส่งอาร์กิวเมนต์ (หรือส่ง None) PRNG จะถูก re-seed จากแหล่งเฉพาะแพลตฟอร์มเดียวกับที่ os.urandom() ใช้

random.choice(sequence: Any) Any

เลือกและคืนค่าหนึ่งรายการแบบสุ่มจาก sequence (tuple, list หรือออบเจกต์ใดๆ ที่รองรับการดำเนินการ subscript)