randrange(start, stop)
รับอาร์กิวเมนต์เป็นจำนวนเต็มเท่านั้น ดังนั้นฉันจะได้รับตัวเลขสุ่มระหว่างค่าทศนิยมสองค่าอย่างไร
randrange(start, stop)
รับอาร์กิวเมนต์เป็นจำนวนเต็มเท่านั้น ดังนั้นฉันจะได้รับตัวเลขสุ่มระหว่างค่าทศนิยมสองค่าอย่างไร
คำตอบ:
>>> random.uniform(1.5, 1.9)
1.8733202628557872
Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < a
ในคำอื่น ๆ ที่ส่งออกN
สามารถเท่ากับการป้อนข้อมูลอย่างใดอย่างหนึ่งและa
b
ในกรณีนี้และ1.5
1.9
.uniform
ฟังก์ชั่น แต่แทนที่จะใช้อย่างใดอย่างหนึ่ง.random
หรือrandrange
?
1.5 + random.random() * (1.9 - 1.5)
ควรทำแม้ว่าตามรายละเอียดนี้จะไม่กลับมาแน่นอน1.9
(แม้ในทางทฤษฎี)
uniform(a, b)
จะดำเนินการเป็นa + (b-a) * random()
และส่งกลับตัวเลขสุ่มในช่วง [A, B) หรือ [a, b] ขึ้นอยู่กับการปัดเศษ github.com/python/cpython/blob/...
random.uniform(a, b)
ดูเหมือนจะเป็นสิ่งที่คุณมองหา จากเอกสาร:
ส่งคืนตัวเลขทศนิยมแบบสุ่มที่ N ซึ่ง <= N <= b สำหรับ <= b และ b <= N <= a สำหรับ b <a
หากคุณต้องการสร้างการลอยแบบสุ่มด้วยตัวเลข N ทางด้านขวาของจุดคุณสามารถทำสิ่งนี้:
round(random.uniform(1,2), N)
อาร์กิวเมนต์ที่สองคือจำนวนทศนิยม
ส่วนใหญ่คุณจะใช้:
import random
random.uniform(a, b) # range [a, b) or [a, b] depending on floating-point rounding
Python จัดเตรียมการแจกแจงอื่น ๆหากคุณต้องการ
หากคุณnumpy
นำเข้าแล้วคุณสามารถใช้สิ่งที่เทียบเท่าได้:
import numpy as np
np.random.uniform(a, b) # range [a, b)
อีกครั้งถ้าคุณต้องการกระจายอื่นnumpy
ให้การกระจายเช่นเดียวกับงูหลามเช่นเดียวกับคนอีกมากมาย
np.random.uniform(start, stop)
หรือnp.random.uniform(start, stop, samples)
ถ้าคุณต้องการตัวอย่างหลาย ๆ มิฉะนั้นคำตอบด้านล่างจะดีที่สุด