การสร้างทศนิยมและจำนวนเต็มแบบสุ่มใน Python รวมถึง random(), randrange() และ randint()

ธุรกิจ

ตัวเลขสุ่มสามารถสร้างได้โดยใช้ฟังก์ชัน random(), uniform(), randange() และ randint() ในโมดูลสุ่มของไลบรารีมาตรฐาน Python

โมดูลสุ่มรวมอยู่ในไลบรารีมาตรฐาน ดังนั้นจึงไม่จำเป็นต้องติดตั้งเพิ่มเติม แน่นอน คุณต้องนำเข้ามัน

ข้อมูลต่อไปนี้มีให้ที่นี่

  • random.random()(จำนวนจุดลอยตัวระหว่าง 0.0 ถึง 1.0)
  • random.uniform()(ช่วงของตัวเลขทศนิยมใด ๆ)
  • สร้างตัวเลขสุ่มตามการแจกแจงแบบปกติ การแจกแจงแบบเกาส์เซียน ฯลฯ
  • random.randrange()(จำนวนเต็มของช่วงและขั้นตอนโดยพลการ)
  • random.randint()(จำนวนเต็มในช่วงใดๆ)
  • การสร้างรายการที่มีตัวเลขสุ่มเป็นองค์ประกอบ
    • รายการเลขทศนิยมสุ่ม
    • รายการตัวเลขสุ่มจำนวนเต็ม
  • เริ่มต้นตัวสร้างตัวเลขสุ่ม (แก้ไขเมล็ดตัวเลขสุ่ม)

ดูบทความต่อไปนี้เกี่ยวกับวิธีการแยกหรือเรียงลำดับองค์ประกอบของรายการแบบสุ่ม

random.random()(จำนวนจุดลอยตัวระหว่าง 0.0 ถึง 1.0)

ฟังก์ชันของโมดูลสุ่ม random() สร้างจำนวนจุดลอยตัวแบบสุ่มของประเภท float ที่อยู่ระหว่าง 0.0 ถึง 1.0

import random

print(random.random())
# 0.4496839011176701

random.uniform()(ช่วงของตัวเลขทศนิยมใด ๆ)

uniform(a, b)ฟังก์ชันของโมดูลสุ่มนี้จะสร้างตัวเลขสุ่มของประเภททศนิยมจำนวนจุดทศนิยมในช่วงใดๆ ต่อไปนี้

  • a <= n <= b
  • b <= n <= a
import random

print(random.uniform(100, 200))
# 175.26585048238275

อาร์กิวเมนต์ทั้งสองอาจมีขนาดใหญ่กว่าหรือเล็กกว่าก็ได้ หากเท่ากันก็จะคืนค่านั้นโดยธรรมชาติ ค่าที่ส่งกลับจะเป็นจำนวนทศนิยมเสมอ

print(random.uniform(100, -100))
# -27.82338731501028

print(random.uniform(100, 100))
# 100.0

อาร์กิวเมนต์ยังสามารถระบุเป็นทศนิยม

print(random.uniform(1.234, 5.637))
# 2.606743596829249

ค่าของ b จะรวมอยู่ในช่วงหรือไม่นั้นขึ้นอยู่กับการปัดเศษต่อไปนี้ ตามเอกสาร
a + (b-a) * random.random()

ค่าจุดสิ้นสุด b อยู่ในช่วงหรือไม่ขึ้นอยู่กับการปัดเศษทศนิยมในสมการต่อไปนี้
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation

สร้างตัวเลขสุ่มตามการแจกแจงแบบปกติ การแจกแจงแบบเกาส์เซียน ฯลฯ

ฟังก์ชัน random() และ uniform() ด้านบนสร้างตัวเลขสุ่มแบบกระจายแบบสม่ำเสมอ แต่ยังมีฟังก์ชันสำหรับสร้างตัวเลขทศนิยมที่ตามมาด้วยการแจกแจงต่อไปนี้

  • การกระจายเบต้า:random.betavariate()
  • การกระจายแบบเลขชี้กำลัง:random.expovariate()
  • การกระจายแกมมา:random.gammavariate()
  • การกระจายแบบเกาส์เซียน:random.gauss()
  • การกระจายแบบล็อกปกติ:random.lognormvariate()
  • การกระจายแบบปกติ:random.normalvariate()
  • Von Mises แจกจ่าย:random.vonmisesvariate()
  • การกระจายพาเรโต:random.paretovariate()
  • การกระจาย Weibull:random.weibullvariate()

พารามิเตอร์ของการแจกแจงแต่ละครั้งถูกระบุโดยอาร์กิวเมนต์ ดูเอกสารอย่างเป็นทางการสำหรับรายละเอียด

random.randrange()(จำนวนเต็มของช่วงและขั้นตอนโดยพลการ)

randrange(start, stop, step)
ฟังก์ชันของโมดูลสุ่มนี้จะส่งคืนองค์ประกอบที่เลือกแบบสุ่มจากองค์ประกอบต่อไปนี้
range(start, stop, step)

เช่นเดียวกับ range() อาร์กิวเมนต์ start และ step สามารถละเว้นได้ หากละไว้ start=0 และ step=1

import random

print(list(range(10)))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(random.randrange(10))
# 5

ขั้นตอนอาร์กิวเมนต์สามารถตั้งค่าให้สร้างจำนวนเต็มสุ่มคู่หรือคี่ หรือจำนวนเต็มสุ่มที่เป็นผลคูณของสาม

ตัวอย่างเช่น ถ้า start เป็นเลขคู่และ step=2 เฉพาะเลขจำนวนเต็มในช่วงเท่านั้นที่สามารถสุ่มได้

print(list(range(10, 20, 2)))
# [10, 12, 14, 16, 18]

print(random.randrange(10, 20, 2))
# 18

random.randint()(จำนวนเต็มในช่วงใดๆ)

randint(a, b)
ฟังก์ชันของโมดูลสุ่มนี้จะคืนค่า int จำนวนเต็มสุ่มต่อไปนี้
a <= n <= b
randrange(a, b + 1)เทียบเท่ากับสิ่งนี้ โปรดทราบว่าค่าของ b จะรวมอยู่ในช่วงด้วย

print(random.randint(50, 100))
# print(random.randrange(50, 101))
# 74

การสร้างรายการที่มีตัวเลขสุ่มเป็นองค์ประกอบ

ในส่วนนี้ เราจะอธิบายวิธีใช้โมดูลสุ่มของไลบรารีมาตรฐานเพื่อสร้างรายการที่มีตัวเลขสุ่มเป็นองค์ประกอบ

รายการตัวเลขสุ่มพร้อมทศนิยมลอยตัว

ในการสร้างรายการที่มีองค์ประกอบเป็นตัวเลขสุ่มทศนิยม ให้รวมฟังก์ชัน random() และ uniform() เข้ากับสัญลักษณ์แสดงความเข้าใจรายการ

import random

print([random.random() for i in range(5)])
# [0.5518201298350598, 0.3476911314933616, 0.8463426180468342, 0.8949046353303931, 0.40822657702632625]

ในตัวอย่างข้างต้น range() ถูกใช้ แต่รายการและ tuples ยังเป็นไปได้สำหรับจำนวนองค์ประกอบที่ต้องการ สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับความเข้าใจในรายการ โปรดดูบทความต่อไปนี้

รายการสุ่มเลขเต็มจำนวนเต็ม

เมื่อสร้างรายการที่มีองค์ประกอบเป็นตัวเลขสุ่มจำนวนเต็ม การรวม randange() และ randint() ด้านบนกับสัญลักษณ์ความเข้าใจรายการอาจส่งผลให้เกิดค่าที่ซ้ำกัน

print([random.randint(0, 10) for i in range(5)])
# [8, 5, 7, 10, 7]

หากคุณต้องการสร้างลำดับจำนวนเต็มแบบสุ่มโดยไม่ทำซ้ำ ให้แยกองค์ประกอบของ range() ด้วยช่วงที่กำหนดโดยใช้ random.sample()

print(random.sample(range(10), k=5))
# [6, 4, 3, 7, 5]

print(random.sample(range(100, 200, 10), k=5))
# [130, 190, 140, 150, 170]

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ random.sample() โปรดดูบทความต่อไปนี้

เริ่มต้นตัวสร้างตัวเลขสุ่ม (แก้ไขเมล็ดตัวเลขสุ่ม)

โดยการให้จำนวนเต็มตามอำเภอใจกับ seed(ฟังก์ชันของโมดูลสุ่ม) เมล็ดตัวเลขสุ่มสามารถแก้ไขได้และตัวสร้างตัวเลขสุ่มสามารถเริ่มต้นได้

หลังจากการเริ่มต้นด้วยเมล็ดพันธุ์เดียวกัน ค่าสุ่มจะถูกสร้างขึ้นในลักษณะเดียวกันเสมอ

random.seed(0)
print(random.random())
# 0.8444218515250481

print(random.random())
# 0.7579544029403025

random.seed(0)
print(random.random())
# 0.8444218515250481

print(random.random())
# 0.7579544029403025