Saya ingin nomor acak antara 0 dan 1, seperti 0.3452. Saya menggunakan acak.randrange(0, 1)
tetapi selalu 0 untuk saya. Apa yang harus saya lakukan?
random.random()
tidak tepat
>>> import random
>>> for i in range(10):
... print(random.random())
...
0.908047338626
0.0199900075962
0.904058545833
0.321508119045
0.657086320195
0.714084413092
0.315924955063
0.696965958019
0.93824013683
0.484207425759
Jika anda ingin really angka acak, dan untuk menutupi rentang [0, 1]:
>>> import os
>>> int.from_bytes(os.urandom(8), byteorder="big") / ((1 << 64) - 1)
0.7409674234050893
saya ingin nomor acak antara 0 dan 1, seperti 0.3452
random.random()
adalah apa yang anda cari adalah:
Dari python docs: random.random() Kembali ke depan acak angka floating point dalam berbagai [0.0, 1.0).
Dan, btw, Mengapa anda tidak mencoba't bekerja?:
Anda coba adalah: acak.randrange(0, 1)
Dari python docs: random.randrange() Kembali dipilih secara acak elemen dari range(start, stop, langkah). Ini setara dengan pilihan(range(start, stop, langkah)), tapi tidak benar-benar membangun berbagai objek.
Jadi, apa yang anda lakukan di sini, dengan random.randrange(a,b)
adalah memilih secara acak elemen dari range(a,b); dalam kasus anda, dari
range(0,1), tapi, coba tebak!: satu-satunya elemen dalam
range(0,1), adalah
0, jadi, satu-satunya elemen yang anda dapat memilih dari
range(0,1), adalah
0; yang's *mengapa* anda selalu mendapatkan
0` kembali.
anda dapat menggunakan menggunakan numpy.random modul, anda bisa mendapatkan menginap nomor acak dalam bentuk pilihan anda yang anda inginkan
>>> import numpy as np
>>> np.random.random(1)[0]
0.17425892129128229
>>> np.random.random((3,2))
array([[ 0.7978787 , 0.9784473 ],
[ 0.49214277, 0.06749958],
[ 0.12944254, 0.80929816]])
>>> np.random.random((3,1))
array([[ 0.86725993],
[ 0.36869585],
[ 0.2601249 ]])
>>> np.random.random((4,1))
array([[ 0.87161403],
[ 0.41976921],
[ 0.35714702],
[ 0.31166808]])
>>> np.random.random_sample()
0.47108547995356098
RTM
Dari dokumen untuk Python random
module:
Functions for integers:
random.randrange(stop)
random.randrange(start, stop[, step])
Return a randomly selected element from range(start, stop, step).
This is equivalent to choice(range(start, stop, step)), but doesn’t
actually build a range object.
Itu menjelaskan mengapa itu hanya memberikan 0, doesn't. range(0,1)
adalah [0]
. Itu adalah memilih dari daftar yang terdiri dari hanya nilai tersebut.
Juga dari orang-orang docs:
random.random()
Return the next random floating point number in the range [0.0, 1.0).
Tapi jika anda pencantuman numpy
tag disengaja, anda dapat menghasilkan banyak mengapung acak dalam kisaran tersebut dengan satu panggilan menggunakan np.random
fungsi.
Saya variasi yang saya temukan untuk menjadi lebih fleksibel.
str_Key = ""
str_FullKey = ""
str_CharacterPool = "01234ABCDEFfghij~-)"
for int_I in range(64):
str_Key = random.choice(str_CharacterPool)
str_FullKey = str_FullKey + str_Key