Hướng dẫn python random choices - lựa chọn ngẫu nhiên python




Mô tả

Hàm choice() trong Python trả về một item ngẫu nhiên trong một list, tuple, hoặc một string.choice() trong Python trả về một item ngẫu nhiên trong một list, tuple, hoặc một string.

Show


Cú pháp

Cú pháp của hàm choice() trong Python:choice() trong Python:

import random
random.choice(seq)

Ghi chú: Hàm này không có thể truy cập trực tiếp, vì thế chúng ta cần import random module và sau đó chúng ta cần gọi hàm này bởi sử dụng đối tượng random. Hàm này không có thể truy cập trực tiếp, vì thế chúng ta cần import random module và sau đó chúng ta cần gọi hàm này bởi sử dụng đối tượng random.

Các tham số:

  • seq: Đây có thể là một list, tuple, hoặc string ...: Đây có thể là một list, tuple, hoặc string ...


Ví dụ sau minh họa cách sử dụng của choice() trong Python.

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))

Chạy chương trình Python trên sẽ cho kết quả:

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r







Cách sử dụng class NotSoRandom(object): def seed(self, a=3): """Seed the world's most mysterious random number generator.""" self.seedval = a def random(self): """Look, random numbers!""" self.seedval = (self.seedval * 3) % 19 return self.seedval _inst = NotSoRandom() seed = _inst.seed random = _inst.random 6 trên máy phát điện

Thay thế các yếu tố ngẫu nhiên trong một mảng numpychoice() trong Python trả về một item ngẫu nhiên trong một list, tuple, hoặc một string.



Cú pháp

Cú pháp của hàm choice() trong Python:choice() trong Python:

import random
random.choice(seq)

Ghi chú: Hàm này không có thể truy cập trực tiếp, vì thế chúng ta cần import random module và sau đó chúng ta cần gọi hàm này bởi sử dụng đối tượng random. Hàm này không có thể truy cập trực tiếp, vì thế chúng ta cần import random module và sau đó chúng ta cần gọi hàm này bởi sử dụng đối tượng random.

Các tham số:

  • seq: Đây có thể là một list, tuple, hoặc string ...: Đây có thể là một list, tuple, hoặc string ...


Ví dụ sau minh họa cách sử dụng của choice() trong Python.

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))

Chạy chương trình Python trên sẽ cho kết quả:

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r



Cách sử dụng

class NotSoRandom(object):
    def seed(self, a=3):
        """Seed the world's most mysterious random number generator."""
        self.seedval = a
    def random(self):
        """Look, random numbers!"""
        self.seedval = (self.seedval * 3) % 19
        return self.seedval

_inst = NotSoRandom()
seed = _inst.seed
random = _inst.random
6 trên máy phát điện


Thay thế các yếu tố ngẫu nhiên trong một mảng numpy

Nhận số từ /dev /ngẫu nhiên trong Python
The list should contain a randomly selection of the values from a specified list, and there should be 10 times higher possibility to select "apple" than the other two:

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Tạo dữ liệu ngẫu nhiên trong Python

Phương pháp ngẫu nhiên

Thí dụ

Trả về một danh sách với 14 mục. Danh sách phải chứa một lựa chọn ngẫu nhiên các giá trị từ một danh sách được chỉ định và có khả năng cao gấp 10 lần để chọn "Apple" so với hai giá trị còn lại:


Nhập ngẫu nhiên

Mylist = ["Apple", "Chuối", "Cherry"]

in (ngẫu nhiên.choices (mylist, trọng số = [10, 1, 1], k = 14)))

Hãy tự mình thử »


Định nghĩa và cách sử dụng

Phương thức

import random
random.choice(seq)
8 trả về một danh sách với phần tử được chọn ngẫu nhiên từ chuỗi được chỉ định.

Bạn có thể cân nhắc khả năng của mỗi kết quả với tham số trọng số hoặc tham số cum_weights.

Trình tự có thể là một chuỗi, một phạm vi, một danh sách, một tuple hoặc bất kỳ loại trình tự nào khác.Sự mô tả
Bảo mật bằng mã hóa
import random
random.choice(seq)
9
Dữ liệu ngẫu nhiên Fasty & Easy sử dụng Mersenne TwisterKhông
Default None
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
9
Như
import random
random.choice(seq)
9 nhưng cho các mảng (có thể đa chiều)
Example: normal weights list: [2, 1, 1] is the same as this cum_weights list; [2, 3, 4].
Default None
choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
0
Chứa
choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
07, cơ sở của các chức năng khác được đề cập ở đây

Cách sử dụng

class NotSoRandom(object):
    def seed(self, a=3):
        """Seed the world's most mysterious random number generator."""
        self.seedval = a
    def random(self):
        """Look, random numbers!"""
        self.seedval = (self.seedval * 3) % 19
        return self.seedval

_inst = NotSoRandom()
seed = _inst.seed
random = _inst.random
6 trên máy phát điện


Cách nhanh nhất để tạo một chuỗi duy nhất giống như ngẫu nhiên với độ dài ngẫu nhiên This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Generating Random Data in Python

Cách sử dụng

class NotSoRandom(object):
    def seed(self, a=3):
        """Seed the world's most mysterious random number generator."""
        self.seedval = a
    def random(self):
        """Look, random numbers!"""
        self.seedval = (self.seedval * 3) % 19
        return self.seedval

_inst = NotSoRandom()
seed = _inst.seed
random = _inst.random
6 trên máy phát điện

Thay thế các yếu tố ngẫu nhiên trong một mảng numpy

Nhận số từ /dev /ngẫu nhiên trong Python

Xem bây giờ hướng dẫn này có một khóa học video liên quan được tạo bởi nhóm Python thực sự. Xem cùng với hướng dẫn bằng văn bản để hiểu sâu hơn về sự hiểu biết của bạn: Tạo dữ liệu ngẫu nhiên trong Python

Làm thế nào ngẫu nhiên là ngẫu nhiên? Đây là một câu hỏi kỳ lạ để hỏi, nhưng nó là một trong những tầm quan trọng tối quan trọng trong trường hợp có liên quan đến bảo mật thông tin. Bất cứ khi nào bạn tạo ra dữ liệu, chuỗi hoặc số ngẫu nhiên trong Python, thì một ý tưởng tốt là có ít nhất một ý tưởng sơ bộ về cách tạo dữ liệu đó.pseudorandom: generated with a pseudorandom number generator (PRNG), which is essentially any algorithm for generating seemingly random but still reproducible data.

Tại đây, bạn sẽ bao gồm một số ít các tùy chọn khác nhau để tạo dữ liệu ngẫu nhiên trong Python, và sau đó xây dựng để so sánh từng loại về mức độ bảo mật, tính linh hoạt, mục đích và tốc độ của nó.

Tôi hứa rằng hướng dẫn này sẽ không phải là một bài học về toán học hay mật mã, mà tôi sẽ được trang bị tốt để giảng bài ngay từ đầu. Bạn sẽ nhận được nhiều môn toán như cần thiết, và không còn nữa.

Làm thế nào ngẫu nhiên là ngẫu nhiên?

Đầu tiên, một từ chối trách nhiệm nổi bật là cần thiết. Hầu hết dữ liệu ngẫu nhiên được tạo ra với Python không hoàn toàn ngẫu nhiên theo nghĩa khoa học của từ này. Thay vào đó, nó là giả: được tạo bằng trình tạo số giả (PRNG), về cơ bản là bất kỳ thuật toán nào để tạo dữ liệu dường như ngẫu nhiên nhưng vẫn có thể tái tạo.

Bạn có thể đã được nói với những người đọc các tài liệu! ở một điểm nào đó. Vâng, những người đó không sai. Ở đây, một đoạn trích đặc biệt đáng chú ý từ tài liệu mô -đun ____39 mà bạn không muốn bỏ lỡ:

CẢNH BÁO: Không nên sử dụng các trình tạo giả ngẫu nhiên của mô-đun này cho mục đích bảo mật. (Nguồn): The pseudo-random generators of this module should not be used for security purposes. (Source)

Bạn có thể đã nhìn thấy

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
0,
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
1 hoặc tương tự, trong Python. Cuộc gọi chức năng này đang gieo hạt Trình tạo số ngẫu nhiên cơ bản được sử dụng bởi mô -đun Python từ ____39. Đó là những gì thực hiện các cuộc gọi tiếp theo để tạo ra các số ngẫu nhiên xác định: Đầu vào A luôn tạo ra đầu ra B. Phước lành này cũng có thể là một lời nguyền nếu nó được sử dụng một cách độc hại.

Có lẽ các thuật ngữ ngẫu nhiên của người Hồi giáo và người xác định có vẻ như chúng không thể tồn tại bên cạnh nhau. Để làm cho điều đó rõ ràng hơn, ở đây, một phiên bản cực kỳ được cắt giảm của

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
3 mà lặp đi lặp lại một số ngẫu nhiên của người Hồi giáo bằng cách sử dụng
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
4.
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
5 ban đầu được định nghĩa là giá trị hạt giống và sau đó biến thành một chuỗi số xác định dựa trên hạt giống đó:

class NotSoRandom(object):
    def seed(self, a=3):
        """Seed the world's most mysterious random number generator."""
        self.seedval = a
    def random(self):
        """Look, random numbers!"""
        self.seedval = (self.seedval * 3) % 19
        return self.seedval

_inst = NotSoRandom()
seed = _inst.seed
random = _inst.random

Don Tiết lấy ví dụ này theo nghĩa đen, vì nó có nghĩa là chủ yếu để minh họa cho khái niệm này. Nếu bạn sử dụng giá trị hạt giống 1234, thì chuỗi các cuộc gọi tiếp theo đến

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
3 phải luôn giống hệt nhau:

>>>

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]

Bạn sẽ thấy một minh họa nghiêm túc hơn về điều này trong thời gian ngắn.

Những gì là bảo mật về mặt mật mã học là gì?

Nếu bạn đã có đủ với các từ viết tắt của RNG RNG, hãy để Lừa ném thêm một bản vào hỗn hợp: CSPRNG hoặc PRNG an toàn bằng mã hóa. CSPRNGS phù hợp để tạo dữ liệu nhạy cảm như mật khẩu, trình xác thực và mã thông báo. Đưa ra một chuỗi ngẫu nhiên, thực tế không có cách nào để joe độc ​​hại để xác định chuỗi nào đến trước hoặc sau chuỗi đó theo một chuỗi các chuỗi ngẫu nhiên.

Một thuật ngữ khác mà bạn có thể thấy là entropy. Tóm lại, điều này đề cập đến số lượng ngẫu nhiên được giới thiệu hoặc mong muốn. Ví dụ: một mô -đun Python mà bạn sẽ bao gồm ở đây xác định

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
7, số lượng byte để trả về theo mặc định. Các nhà phát triển cho rằng đây là những người đủ điều kiện là một lượng lớn tiếng ồn.entropy. In a nutshell, this refers to the amount of randomness introduced or desired. For example, one Python module that you’ll cover here defines
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
7, the number of bytes to return by default. The developers deem this to be “enough” bytes to be a sufficient amount of noise.

Một điểm quan trọng về CSPRNGS là chúng vẫn còn giả. Chúng được thiết kế theo một cách nào đó có tính quyết định nội bộ, nhưng chúng thêm một số biến khác hoặc có một số tài sản làm cho chúng đủ ngẫu nhiên để cấm hỗ trợ vào bất kỳ chức năng nào thực thi chủ nghĩa quyết định.

Những gì bạn sẽ bao gồm ở đây

Trong các thuật ngữ thực tế, điều này có nghĩa là bạn nên sử dụng các PRNG đơn giản để mô hình hóa, mô phỏng và mô hình hóa thống kê có thể tái tạo dữ liệu ngẫu nhiên. Họ cũng nhanh hơn đáng kể so với CSPRNG, như bạn sẽ thấy sau này. Sử dụng CSPRNG cho các ứng dụng bảo mật và mật mã trong đó độ nhạy dữ liệu là bắt buộc.

Ngoài việc mở rộng các trường hợp sử dụng ở trên, trong hướng dẫn này, bạn sẽ đi sâu vào các công cụ Python để sử dụng cả PRNG và CSPRNGS:

  • Các tùy chọn PRNG bao gồm mô-đun
    import random
    random.choice(seq)
    
    9 từ thư viện tiêu chuẩn Python và đối tác Numpy dựa trên mảng,
    import random
    print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
    print ("choice('Hello World!') : ", random.choice('Hello World!'))
    
    9.
  • Các mô -đun Python từ
    choice([1, 2, 3, 4, 5, 6]) :  5
    choice('Hello World!') :  r
    
    0,
    choice([1, 2, 3, 4, 5, 6]) :  5
    choice('Hello World!') :  r
    
    1 và
    choice([1, 2, 3, 4, 5, 6]) :  5
    choice('Hello World!') :  r
    
    2 chứa các chức năng để tạo các đối tượng bảo mật bằng mật mã.

Bạn có thể chạm vào tất cả những điều trên và kết thúc với một so sánh cấp cao.

Prngs trong Python

Mô -đun import random random.choice(seq) 9

Có lẽ công cụ được biết đến rộng rãi nhất để tạo dữ liệu ngẫu nhiên trong Python là mô -đun ____39 của nó, sử dụng thuật toán Mersenne Twister Prng làm trình tạo lõi của nó.

Trước đó, bạn đã chạm vào một thời gian ngắn trên

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
5, và bây giờ là thời điểm tốt để xem nó hoạt động như thế nào. Đầu tiên, hãy để xây dựng một số dữ liệu ngẫu nhiên mà không cần gieo hạt. Hàm
choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
6 trả về một chiếc phao ngẫu nhiên trong khoảng [0,0, 1.0). Kết quả sẽ luôn luôn nhỏ hơn điểm cuối bên phải (1.0). Điều này còn được gọi là phạm vi bán mở:

>>>

>>> # Don't call `random.seed()` yet
>>> import random
>>> random.random()
0.35553263284394376
>>> random.random()
0.6101992345575074

Bạn sẽ thấy một minh họa nghiêm túc hơn về điều này trong thời gian ngắn.

Những gì là bảo mật về mặt mật mã học là gì?

>>>

>>> random.seed(444)
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987

>>> random.seed(444)  # Re-seed
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987

Bạn sẽ thấy một minh họa nghiêm túc hơn về điều này trong thời gian ngắn.

Những gì là bảo mật về mặt mật mã học là gì?

>>>

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
0

Bạn sẽ thấy một minh họa nghiêm túc hơn về điều này trong thời gian ngắn.

>>>

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
1

Nếu bạn cần tạo ra những chiếc phao ngẫu nhiên nằm trong một khoảng [x, y] cụ thể, bạn có thể sử dụng

class NotSoRandom(object):
    def seed(self, a=3):
        """Seed the world's most mysterious random number generator."""
        self.seedval = a
    def random(self):
        """Look, random numbers!"""
        self.seedval = (self.seedval * 3) % 19
        return self.seedval

_inst = NotSoRandom()
seed = _inst.seed
random = _inst.random
2, rút ​​ra từ phân phối đồng nhất liên tục:

>>>

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
2

Để chọn một phần tử ngẫu nhiên từ một chuỗi không trống (như danh sách hoặc một tuple), bạn có thể sử dụng

class NotSoRandom(object):
    def seed(self, a=3):
        """Seed the world's most mysterious random number generator."""
        self.seedval = a
    def random(self):
        """Look, random numbers!"""
        self.seedval = (self.seedval * 3) % 19
        return self.seedval

_inst = NotSoRandom()
seed = _inst.seed
random = _inst.random
3. Ngoài ra còn có
class NotSoRandom(object):
    def seed(self, a=3):
        """Seed the world's most mysterious random number generator."""
        self.seedval = a
    def random(self):
        """Look, random numbers!"""
        self.seedval = (self.seedval * 3) % 19
        return self.seedval

_inst = NotSoRandom()
seed = _inst.seed
random = _inst.random
4 để chọn nhiều yếu tố từ một chuỗi với sự thay thế (có thể trùng lặp):

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
3

Để bắt chước lấy mẫu mà không thay thế, hãy sử dụng

class NotSoRandom(object):
    def seed(self, a=3):
        """Seed the world's most mysterious random number generator."""
        self.seedval = a
    def random(self):
        """Look, random numbers!"""
        self.seedval = (self.seedval * 3) % 19
        return self.seedval

_inst = NotSoRandom()
seed = _inst.seed
random = _inst.random
5:

>>>

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
4

Bạn có thể chọn ngẫu nhiên một chuỗi tại chỗ bằng cách sử dụng

class NotSoRandom(object):
    def seed(self, a=3):
        """Seed the world's most mysterious random number generator."""
        self.seedval = a
    def random(self):
        """Look, random numbers!"""
        self.seedval = (self.seedval * 3) % 19
        return self.seedval

_inst = NotSoRandom()
seed = _inst.seed
random = _inst.random
6. Điều này sẽ sửa đổi đối tượng chuỗi và ngẫu nhiên thứ tự của các phần tử:

>>>

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
5

Nếu bạn không thay đổi danh sách ban đầu, bạn sẽ cần tạo một bản sao trước và sau đó xáo trộn bản sao. Bạn có thể tạo các bản sao của danh sách Python với mô -đun

class NotSoRandom(object):
    def seed(self, a=3):
        """Seed the world's most mysterious random number generator."""
        self.seedval = a
    def random(self):
        """Look, random numbers!"""
        self.seedval = (self.seedval * 3) % 19
        return self.seedval

_inst = NotSoRandom()
seed = _inst.seed
random = _inst.random
7 hoặc chỉ
class NotSoRandom(object):
    def seed(self, a=3):
        """Seed the world's most mysterious random number generator."""
        self.seedval = a
    def random(self):
        """Look, random numbers!"""
        self.seedval = (self.seedval * 3) % 19
        return self.seedval

_inst = NotSoRandom()
seed = _inst.seed
random = _inst.random
8 hoặc
class NotSoRandom(object):
    def seed(self, a=3):
        """Seed the world's most mysterious random number generator."""
        self.seedval = a
    def random(self):
        """Look, random numbers!"""
        self.seedval = (self.seedval * 3) % 19
        return self.seedval

_inst = NotSoRandom()
seed = _inst.seed
random = _inst.random
9, trong đó
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
5 là danh sách.

Trước khi chuyển sang tạo dữ liệu ngẫu nhiên với Numpy, hãy để Lôi nhìn vào một ứng dụng liên quan hơn một chút: tạo ra một chuỗi các chuỗi ngẫu nhiên độc đáo có độ dài đồng nhất.

Nó có thể giúp suy nghĩ về thiết kế của chức năng đầu tiên. Bạn cần phải chọn từ một nhóm các ký tự như các ký tự như chữ cái, số và/hoặc dấu chấm câu, kết hợp chúng thành một chuỗi, sau đó kiểm tra xem chuỗi này chưa được tạo ra. Một Python

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]
1 hoạt động tốt cho loại thử nghiệm thành viên này:

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
6

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]
2 tham gia các chữ cái từ
class NotSoRandom(object):
    def seed(self, a=3):
        """Seed the world's most mysterious random number generator."""
        self.seedval = a
    def random(self):
        """Look, random numbers!"""
        self.seedval = (self.seedval * 3) % 19
        return self.seedval

_inst = NotSoRandom()
seed = _inst.seed
random = _inst.random
4 vào một python duy nhất
>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]
4 có độ dài
>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]
5. Mã thông báo này được thêm vào tập hợp, có thể chứa các bản sao và vòng lặp
>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]
6 thực thi cho đến khi tập hợp có số lượng các phần tử mà bạn chỉ định.

Hãy để thử chức năng này:

>>>

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
7

Đối với phiên bản tinh chỉnh của chức năng này, câu trả lời tràn ngăn xếp này sử dụng các hàm của máy phát, ràng buộc tên và một số thủ thuật nâng cao khác để tạo phiên bản an toàn, an toàn bằng mã hóa nhanh hơn của

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]
7 ở trên.

PRNGS cho mảng: import random print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6])) print ("choice('Hello World!') : ", random.choice('Hello World!')) 9

Một điều bạn có thể nhận thấy là phần lớn các hàm từ

import random
random.choice(seq)
9 trả về giá trị vô hướng (một
>>> # Don't call `random.seed()` yet
>>> import random
>>> random.random()
0.35553263284394376
>>> random.random()
0.6101992345575074
0,
>>> # Don't call `random.seed()` yet
>>> import random
>>> random.random()
0.35553263284394376
>>> random.random()
0.6101992345575074
1 hoặc đối tượng khác). Nếu bạn muốn tạo một chuỗi các số ngẫu nhiên, một cách để đạt được điều đó sẽ là với một danh sách Python hiểu được:

>>>

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
8

Nhưng có một tùy chọn khác được thiết kế đặc biệt cho việc này. Bạn có thể nghĩ về gói

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
9 của Numpy, giống như thư viện tiêu chuẩn ____ ____39, nhưng đối với các mảng numpy. (Nó cũng được tải với khả năng rút ra từ nhiều phân phối thống kê hơn.)

Hãy lưu ý rằng

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
9 sử dụng PRNG của riêng mình tách biệt với
import random
random.choice(seq)
9 cũ. Bạn đã giành được sản phẩm các mảng numpy ngẫu nhiên xác định với một lời kêu gọi đến Python tựa
choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
5:

>>>

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
9

Không có gì khó chịu, đây là một vài ví dụ để kích thích sự thèm ăn của bạn:

>>>

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
0

Trong cú pháp cho

>>> # Don't call `random.seed()` yet
>>> import random
>>> random.random()
0.35553263284394376
>>> random.random()
0.6101992345575074
7, các tham số
>>> # Don't call `random.seed()` yet
>>> import random
>>> random.random()
0.35553263284394376
>>> random.random()
0.6101992345575074
8 là tùy chọn và biểu thị hình dạng của đối tượng cuối cùng. Ở đây,
>>> # Don't call `random.seed()` yet
>>> import random
>>> random.random()
0.35553263284394376
>>> random.random()
0.6101992345575074
9 tạo ra một mảng 2D với 3 hàng và 4 cột. Dữ liệu sẽ là i.i.d., có nghĩa là mỗi điểm dữ liệu được rút ra độc lập với các điểm khác.

Một hoạt động phổ biến khác là tạo ra một chuỗi các giá trị boolean ngẫu nhiên,

>>> random.seed(444)
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987

>>> random.seed(444)  # Re-seed
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987
0 hoặc
>>> random.seed(444)
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987

>>> random.seed(444)  # Re-seed
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987
1. Một cách để làm điều này sẽ là với
>>> random.seed(444)
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987

>>> random.seed(444)  # Re-seed
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987
2. Tuy nhiên, nó thực sự nhanh hơn khoảng 4 lần để chọn từ
>>> random.seed(444)
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987

>>> random.seed(444)  # Re-seed
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987
3 và sau đó xem các số nguyên này đến các giá trị boolean tương ứng của chúng:

>>>

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
1

Điều gì về việc tạo dữ liệu tương quan? Hãy nói rằng bạn muốn mô phỏng hai chuỗi thời gian tương quan. Một cách để đi về điều này là với chức năng Numpy từ ____994, tính đến một ma trận hiệp phương sai. Nói cách khác, để rút ra từ một biến ngẫu nhiên được phân phối thông thường, bạn cần chỉ định giá trị trung bình và phương sai của nó (hoặc độ lệch chuẩn).

Để lấy mẫu từ phân phối bình thường đa biến, bạn chỉ định ma trận phương pháp và hiệp phương sai, và bạn kết thúc với nhiều chuỗi dữ liệu tương quan, mỗi chuỗi được phân phối gần như bình thường.

Tuy nhiên, thay vì hiệp phương sai, mối tương quan là một biện pháp quen thuộc và trực quan hơn với hầu hết. Nó có sự hiệp phương sai được chuẩn hóa bởi sản phẩm của độ lệch chuẩn, và do đó bạn cũng có thể xác định hiệp phương sai về mặt tương quan và độ lệch chuẩn:

Hướng dẫn python random choices - lựa chọn ngẫu nhiên python

Vì vậy, bạn có thể vẽ các mẫu ngẫu nhiên từ phân phối bình thường đa biến bằng cách chỉ định một ma trận tương quan và độ lệch chuẩn? Có, nhưng bạn sẽ cần phải đưa các mẫu trên vào mẫu ma trận trước tiên. Ở đây, S là một vectơ của độ lệch chuẩn, p là ma trận tương quan của chúng và C là ma trận hiệp phương sai (vuông) kết quả (vuông):S is a vector of the standard deviations, P is their correlation matrix, and C is the resulting (square) covariance matrix:

Hướng dẫn python random choices - lựa chọn ngẫu nhiên python

Điều này có thể được thể hiện trong Numpy như sau:

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
2

Bây giờ, bạn có thể tạo hai chuỗi thời gian tương quan nhưng vẫn ngẫu nhiên:

>>>

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
3

Bạn có thể nghĩ

>>> random.seed(444)
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987

>>> random.seed(444)  # Re-seed
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987
5 là 500 cặp điểm dữ liệu tương quan nghịch. Ở đây, một kiểm tra tỉnh táo rằng bạn có thể quay lại các đầu vào ban đầu, gần đúng
>>> random.seed(444)
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987

>>> random.seed(444)  # Re-seed
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987
6,
>>> random.seed(444)
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987

>>> random.seed(444)  # Re-seed
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987
7 và
>>> random.seed(444)
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987

>>> random.seed(444)  # Re-seed
>>> random.random()
0.3088946587429545
>>> random.random()
0.01323751590501987
8 từ trên:

>>>

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
4

Trước khi chúng tôi chuyển sang CSPRNGS, có thể hữu ích khi tóm tắt một số chức năng

import random
random.choice(seq)
9 và các đối tác
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
9 của chúng:

Mô -đun Python
import random
random.choice(seq)
9
Đối tác numpySử dụng
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
3
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
03
Phao ngẫu nhiên trong [0,0, 1.0)
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
04
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
05
Số nguyên ngẫu nhiên trong [A, B]
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
06
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
07
Số nguyên ngẫu nhiên trong [A, B)
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
08
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
09
Phao ngẫu nhiên trong [A, B]
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
10
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
11
Yếu tố ngẫu nhiên từ
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
12
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
13
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
11
Yếu tố ngẫu nhiên từ
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
12
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
13
Các yếu tố ngẫu nhiên
>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]
5 từ
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
12 với sự thay thế
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
17
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
11 với
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
19
Các yếu tố ngẫu nhiên
>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]
5 từ
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
12 mà không cần thay thế
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
22
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
23
Xáo trộn chuỗi
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
5 tại chỗ
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
25 hoặc
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
26

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
27

Mẫu từ phân phối bình thường với trung bình import random print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6])) print ("choice('Hello World!') : ", random.choice('Hello World!')) 28 và độ lệch chuẩn import random print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6])) print ("choice('Hello World!') : ", random.choice('Hello World!')) 29

Bây giờ, bạn đã bao gồm hai tùy chọn cơ bản cho PRNG, hãy để Lôi chuyển sang một vài điều chỉnh an toàn hơn.

CSPRNGS trong Python

  • import random
    print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
    print ("choice('Hello World!') : ", random.choice('Hello World!'))
    
    30: về ngẫu nhiên khi nó nhận được

  • Chức năng Python từ

    import random
    print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
    print ("choice('Hello World!') : ", random.choice('Hello World!'))
    
    30 được sử dụng bởi cả
    choice([1, 2, 3, 4, 5, 6]) :  5
    choice('Hello World!') :  r
    
    1 và
    choice([1, 2, 3, 4, 5, 6]) :  5
    choice('Hello World!') :  r
    
    2 (cả hai bạn sẽ thấy ở đây trong một khoảnh khắc). Không đi sâu vào quá nhiều chi tiết,
    import random
    print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
    print ("choice('Hello World!') : ", random.choice('Hello World!'))
    
    30 tạo ra các byte ngẫu nhiên phụ thuộc vào hệ điều hành có thể được gọi một cách an toàn về mặt mật mã:

Trên các hệ điều hành UNIX, nó đọc các byte ngẫu nhiên từ tệp đặc biệt

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
35, từ đó cho phép truy cập vào tiếng ồn môi trường được thu thập từ trình điều khiển thiết bị và các nguồn khác. .

>>>

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
5

Trên Windows, hàm C ++

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
36 được sử dụng. Hàm này vẫn là giả kỹ thuật, nhưng nó hoạt động bằng cách tạo giá trị hạt giống từ các biến như ID quy trình, trạng thái bộ nhớ, v.v.

Với

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
30, không có khái niệm về gieo hạt thủ công. Mặc dù về mặt kỹ thuật vẫn giả, chức năng này phù hợp hơn với cách chúng ta nghĩ về tính ngẫu nhiên. Đối số duy nhất là số byte trả về:

>>>

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
6

Trước khi chúng ta đi xa hơn, đây có thể là thời điểm tốt để đi sâu vào một bài học nhỏ về mã hóa ký tự. Nhiều người, bao gồm cả bản thân tôi, có một số loại phản ứng dị ứng khi họ nhìn thấy các đối tượng

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
38 và một dòng dài các ký tự
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
39. Tuy nhiên, nó rất hữu ích khi biết làm thế nào các chuỗi như
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
5 ở trên cuối cùng bị biến thành các chuỗi hoặc số.

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
30 Trả về một chuỗi các byte đơn:

>>>

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
7

Nhưng làm thế nào điều này cuối cùng được biến thành một con trăn

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]
4 hoặc chuỗi số?

Đầu tiên, nhớ lại một trong những khái niệm cơ bản của điện toán, đó là một byte được tạo thành từ 8 bit. Bạn có thể nghĩ một chút như một chữ số duy nhất là 0 hoặc 1. Một byte chọn hiệu quả trong khoảng từ 0 đến 1 tám lần, do đó, cả

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
43 và
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
44 có thể đại diện cho byte. Hãy thử điều này, sử dụng các chuỗi Python F được giới thiệu trong Python 3.6, trong phiên dịch của bạn:

Điều này tương đương với

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
45, với một số định dạng đặc biệt.
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
46 chuyển đổi một số nguyên thành biểu diễn nhị phân của nó dưới dạng chuỗi.

Điều đó để chúng ta ở đâu? Sử dụng

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
47 ở trên không phải là một lựa chọn ngẫu nhiên. .

>>>

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
8

Điều này có nghĩa là mỗi byte ánh xạ tới một số nguyên từ 0 đến 255. Nói cách khác, chúng ta sẽ cần hơn 8 bit để thể hiện số nguyên 256. Bạn có thể xác minh điều này bằng cách kiểm tra xem

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
49 hiện là 9 chứ không phải 8.

>>>

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
9

Được rồi, bây giờ hãy để Lừa quay lại kiểu dữ liệu

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
38 mà bạn đã thấy ở trên, bằng cách xây dựng chuỗi các byte tương ứng với các số nguyên từ 0 đến 255:

Nếu bạn gọi

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
51, bạn sẽ quay lại danh sách Python chạy từ 0 đến 255. Nhưng nếu bạn chỉ in
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
52, bạn sẽ có một chuỗi trông xấu xí nằm rải rác với các dấu gạch chéo ngược:

Cuối cùng, hãy để Lừa quay trở lại nơi bạn bắt đầu, với chuỗi các byte ngẫu nhiên

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
5. Hy vọng điều này có ý nghĩa hơn một chút bây giờ. Gọi
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
59 trên đối tượng
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
38 cho
>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]
4 số thập lục phân, với mỗi số tương ứng với số thập phân từ 0 đến 255:

>>>

import random
random.choice(seq)
0

Một câu hỏi cuối cùng: Làm thế nào

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
62 12 ký tự ở trên, mặc dù
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
5 chỉ là 6 byte? Điều này là do hai chữ số thập lục phân tương ứng chính xác với một byte duy nhất. Phiên bản
>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]
4 của
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
38 sẽ luôn dài gấp đôi so với mắt chúng ta có liên quan.

Ngay cả khi byte (chẳng hạn như

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
66) không cần được biểu diễn 8 bit đầy đủ,
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
62 sẽ luôn sử dụng hai chữ số hex trên byte, do đó, số 1 sẽ được biểu diễn là
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
68 thay vì chỉ
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
69. Tuy nhiên, về mặt toán học, cả hai đều có cùng kích thước.

Với điều đó dưới vành đai của bạn, hãy để cảm ứng trên một mô-đun được giới thiệu gần đây,

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
1, giúp tạo ra các mã thông báo an toàn thân thiện với người dùng hơn nhiều.

Python sườn tốt nhất giữ choice([1, 2, 3, 4, 5, 6]) : 5 choice('Hello World!') : r 1

Được giới thiệu trong Python 3.6 bởi một trong những PEP đầy màu sắc hơn ngoài kia, mô -đun

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
1 được dự định là mô -đun Python thực tế để tạo ra các byte và chuỗi ngẫu nhiên an toàn bằng mật mã.

Bạn có thể kiểm tra mã nguồn cho mô -đun, ngắn và ngọt ngào với khoảng 25 dòng mã.

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
1 về cơ bản là một trình bao bọc vào khoảng
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
30. Nó xuất khẩu chỉ một số ít các hàm để tạo số ngẫu nhiên, byte và chuỗi. Hầu hết các ví dụ này phải khá tự giải thích:

>>>

import random
random.choice(seq)
1

Một câu hỏi cuối cùng: Làm thế nào

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
62 12 ký tự ở trên, mặc dù
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
5 chỉ là 6 byte? Điều này là do hai chữ số thập lục phân tương ứng chính xác với một byte duy nhất. Phiên bản
>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]
4 của
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
38 sẽ luôn dài gấp đôi so với mắt chúng ta có liên quan.

Ngay cả khi byte (chẳng hạn như

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
66) không cần được biểu diễn 8 bit đầy đủ,
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
62 sẽ luôn sử dụng hai chữ số hex trên byte, do đó, số 1 sẽ được biểu diễn là
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
68 thay vì chỉ
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
69. Tuy nhiên, về mặt toán học, cả hai đều có cùng kích thước.short.ly. Here’s a function to get you started with your service:

import random
random.choice(seq)
2

Với điều đó dưới vành đai của bạn, hãy để cảm ứng trên một mô-đun được giới thiệu gần đây,

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
1, giúp tạo ra các mã thông báo an toàn thân thiện với người dùng hơn nhiều.

Python sườn tốt nhất giữ

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
1

>>>

import random
random.choice(seq)
3

Được giới thiệu trong Python 3.6 bởi một trong những PEP đầy màu sắc hơn ngoài kia, mô -đun

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
1 được dự định là mô -đun Python thực tế để tạo ra các byte và chuỗi ngẫu nhiên an toàn bằng mật mã.

Bạn có thể kiểm tra mã nguồn cho mô -đun, ngắn và ngọt ngào với khoảng 25 dòng mã. choice([1, 2, 3, 4, 5, 6]) : 5 choice('Hello World!') : r 1 về cơ bản là một trình bao bọc vào khoảng import random print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6])) print ("choice('Hello World!') : ", random.choice('Hello World!')) 30. Nó xuất khẩu chỉ một số ít các hàm để tạo số ngẫu nhiên, byte và chuỗi. Hầu hết các ví dụ này phải khá tự giải thích:

Bây giờ, làm thế nào về một ví dụ cụ thể? Bạn có thể đã sử dụng các dịch vụ rút ngắn URL như tinyurl.com hoặc bit.ly biến một url khó sử dụng thành một cái gì đó như https://bit.ly/2iccp9u. Hầu hết các bộ rút ngắn don lồng làm bất kỳ băm phức tạp nào từ đầu vào đến đầu ra; Họ chỉ tạo ra một chuỗi ngẫu nhiên, đảm bảo rằng chuỗi chưa được tạo trước đó và sau đó buộc đó trở lại URL đầu vào.

>>>

import random
random.choice(seq)
4

Hãy nói rằng sau khi xem xét cơ sở dữ liệu vùng gốc, bạn đã đăng ký trang web ngắn. Ở đây, một chức năng để giúp bạn bắt đầu với dịch vụ của mình:

>>>

import random
random.choice(seq)
5

Đây có phải là một minh họa thực sự đầy đủ? Không. Tôi sẽ đánh cược bit đó. Làm mọi việc theo cách tiên tiến hơn một chút so với việc lưu trữ mỏ vàng của nó trong một từ điển Python toàn cầu không tồn tại giữa các phiên.

  • Tuy nhiên, nó rất chính xác về mặt khái niệm:

  • Điểm mấu chốt ở đây là, trong khi

    choice([1, 2, 3, 4, 5, 6]) :  5
    choice('Hello World!') :  r
    
    1 thực sự chỉ là một trình bao bọc xung quanh các chức năng Python hiện có, thì đó có thể là bạn khi bảo mật là mối quan tâm quan trọng nhất của bạn.

Một ứng cử viên cuối cùng:

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
2

Một tùy chọn cuối cùng để tạo mã thông báo ngẫu nhiên là hàm

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
77 từ mô -đun PythonTHER
choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
2. UUID là một định danh độc đáo toàn cầu, trình tự 128 bit (
>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]

>>> seed(1234)
>>> [random() for _ in range(10)]
[16, 10, 11, 14, 4, 12, 17, 13, 1, 3]
4 có độ dài 32) được thiết kế để đảm bảo tính duy nhất trên không gian và thời gian.
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
77 là một trong những chức năng hữu ích nhất của mô -đun và chức năng này cũng sử dụng
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
30:

Điều tuyệt vời là tất cả các chức năng của ____ 52 tạo ra một thể hiện của lớp

import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
83, gói gọn ID và có các thuộc tính như
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
84,
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
85 và
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
86:

Một cách sử dụng phổ biến của

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
2 là ở Django, có
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
99 thường được sử dụng làm khóa chính trong cơ sở dữ liệu quan hệ cơ bản của mô hình.

Tại sao không chỉ là mặc định của người Viking choice([1, 2, 3, 4, 5, 6]) : 5 choice('Hello World!') : r 00?

Ngoài các mô-đun an toàn được thảo luận ở đây như

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
1, mô-đun Python, ____39 thực sự có một lớp ít được sử dụng gọi là
choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
00 sử dụng
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
30. .

Tại thời điểm này, bạn có thể tự hỏi mình tại sao bạn sẽ chỉ mặc định vào phiên bản này? Tại sao không phải là người luôn luôn an toàn, thay vì mặc định các chức năng

import random
random.choice(seq)
9 xác định mà aren không an toàn về mặt mật mã?

Tôi đã đề cập đến một lý do: Đôi khi bạn muốn dữ liệu của mình có thể xác định và có thể tái tạo cho những người khác theo dõi.

Nhưng lý do thứ hai là CSPRNG, ít nhất là trong Python, có xu hướng chậm hơn có ý nghĩa so với PRNG. Hãy để thử nghiệm rằng với một tập lệnh,

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
09, so sánh các phiên bản PRNG và CSPRNG của
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
07 bằng cách sử dụng Python tựa
choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
11:

import random
random.choice(seq)
6

Bây giờ để thực hiện điều này từ shell:

import random
random.choice(seq)
7

Sự khác biệt về thời gian 5X chắc chắn là một sự cân nhắc hợp lệ ngoài bảo mật mật mã khi chọn giữa hai.

Tỷ lệ cược và kết thúc: băm

Một khái niệm đã nhận được nhiều sự chú ý trong hướng dẫn này là của băm, có thể được thực hiện với mô -đun Python tựa

choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
12.

Một hàm băm được thiết kế là ánh xạ một chiều từ giá trị đầu vào sang chuỗi có kích thước cố định hầu như không thể đảo ngược kỹ sư. Do đó, trong khi kết quả của hàm băm có thể giống như dữ liệu ngẫu nhiên, nhưng nó không thực sự đủ điều kiện theo định nghĩa ở đây.

Tóm tắt lại

Bạn đã bao phủ rất nhiều nền tảng trong hướng dẫn này. Tóm lại, đây là một so sánh cấp cao về các tùy chọn có sẵn cho bạn về tính ngẫu nhiên kỹ thuật trong Python:

Package/ModuleSự mô tảBảo mật bằng mã hóa
import random
random.choice(seq)
9
Dữ liệu ngẫu nhiên Fasty & Easy sử dụng Mersenne TwisterKhông
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
9
Như
import random
random.choice(seq)
9 nhưng cho các mảng (có thể đa chiều)
Không
import random
print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
print ("choice('Hello World!') : ", random.choice('Hello World!'))
9
Như
import random
random.choice(seq)
9 nhưng cho các mảng (có thể đa chiều)
choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
0
Chứa
choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
07, cơ sở của các chức năng khác được đề cập ở đây
Đúng
choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
0
Chứa
choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
07, cơ sở của các chức năng khác được đề cập ở đây
Đúng
choice([1, 2, 3, 4, 5, 6]) :  5
choice('Hello World!') :  r
1

Được thiết kế để trở thành mô -đun thực tế Python sườn để tạo ra các số ngẫu nhiên, byte và chuỗi an toàn

choice([1, 2, 3, 4, 5, 6]) : 5 choice('Hello World!') : r 2

  • Trang chủ cho một số ít các chức năng để xây dựng số nhận dạng 128 bit
  • Vâng,
    import random
    print ("choice([1, 2, 3, 4, 5, 6]) : ", random.choice([1, 2, 3, 4, 5, 6]))
    print ("choice('Hello World!') : ", random.choice('Hello World!'))
    
    77
  • Hãy thoải mái để lại một số bình luận hoàn toàn ngẫu nhiên dưới đây, và cảm ơn đã đọc.
  • Liên kết bổ sung
  • Random.org cung cấp các số ngẫu nhiên thực sự cho bất kỳ ai trên Internet có nguồn gốc từ tiếng ồn trong khí quyển.
  • Phần công thức nấu ăn từ mô -đun
    import random
    random.choice(seq)
    
    9 có một số thủ thuật bổ sung.
  • Bài báo bán kết trên Mersienne Twister xuất hiện vào năm 1997, nếu bạn thích loại điều đó.
  • Các công thức nấu ăn ITERTOOLS xác định các chức năng để chọn ngẫu nhiên từ một tập hợp tổ hợp, chẳng hạn như từ các kết hợp hoặc hoán vị.
  • Scikit-learn bao gồm các trình tạo mẫu ngẫu nhiên khác nhau có thể được sử dụng để xây dựng các bộ dữ liệu nhân tạo có kích thước và độ phức tạp được kiểm soát.
    • Eli Bendersky đào sâu vào
      class NotSoRandom(object):
          def seed(self, a=3):
              """Seed the world's most mysterious random number generator."""
              self.seedval = a
          def random(self):
              """Look, random numbers!"""
              self.seedval = (self.seedval * 3) % 19
              return self.seedval
      
      _inst = NotSoRandom()
      seed = _inst.seed
      random = _inst.random
      
      0 trong bài viết của mình các phương pháp chậm và nhanh để tạo số nguyên ngẫu nhiên trong Python.
    • Peter Norvig, một giới thiệu cụ thể về xác suất sử dụng Python cũng là một nguồn tài nguyên toàn diện.
    • Thư viện PANDAS bao gồm một trình quản lý bối cảnh có thể được sử dụng để đặt trạng thái ngẫu nhiên tạm thời.
    • Từ Stack Overflow:
    • Tạo ngày ngẫu nhiên trong một phạm vi nhất định

Cách nhanh nhất để tạo một chuỗi duy nhất giống như ngẫu nhiên với độ dài ngẫu nhiên This tutorial has a related video course created by the Real Python team. Watch it together with the written tutorial to deepen your understanding: Generating Random Data in Python