01/10/2018, 00:26

Hỏi về random trong Python

Chào anh em.

Mới đây thằng cu bạn em mới làm một mini game nhỏ theo kiểu nhập số - xem kết quả: http://ideone.com/dt4fZF

Em đã thử chạy bằng Code::Block và thấy rằng, mặc dù nhập cùng một giá trị, nhưng cứ mỗi lần Run code, thì kết quả đưa ra màn hình lại khác nhau. Em đoán là do thằng này (bên trong code):

mt19937_64 randomGenerator(time(NULL));
uniform_int_distribution<int> hATK(0, 40);
uniform_int_distribution<int> oATK(0, 50);

Em không hiểu nhiều lắm về hàm này trong C++, vì em học Python mà.

SAu đó, em “translate” code của thằng bạn ra Python:

Ideone.com

Ideone.com

Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.

Và mặc dù chạy rất nhiều lần bằng lệnh python trong Terminal

~$ python  <tên file>.py

Thì kết quả hiện ra màn hình của code Python này vẫn giống ý như nhau, với cùng một giá trị nhập vào

Vậy thì cái này

mt19937_64 randomGenerator(time(NULL));
uniform_int_distribution<int> hATK(0, 40);
uniform_int_distribution<int> oATK(0, 50);

là chi? Và làm sao “translate” nó ra Python đây ạ?

Em cảm ơn ạ

viết 02:42 ngày 01/10/2018

em import random rồi xài random.randint(a,b) là được

uniform_int_distribution<int> hATK(0, 40) là để lấy số ngẫu nhiên trong đoạn [0,40] mỗi khi gọi hATK(andomGenerator) (từ 0 tới 40 có 41 số, và 41 số này có xác suất chọn tương đương nhau, nên gọi là “uniform distribution”)

với Python thì gọi random.randint(0, 40) thay cho hATK(andomGenerator). Khỏi cần tạo random generator hay hATK gì hết, thư viện random nó lo hết rồi.

Thanos viết 02:42 ngày 01/10/2018

Và mặc dù chạy rất nhiều lần bằng lệnh python trong Terminal

~$ python <tên file>.py

Thì kết quả hiện ra màn hình của code Python này vẫn giống ý như nhau, với cùng một giá trị nhập vào

Vậy làm sao để em nhận được giá trị random không cố định mỗi khi mở file chứa code qua Terminal ạ?
Ví dụ: Em nhập số Human là: 3 , và số Orcs cũng là: 3.
Cứ mỗi lần chạy code với cặp giá trị 3 - 3 này, thì chỉ có duy nhất một diễn biến trên màn hình. Dù em có chạy code bao nhiu lần nữa? :

Thành Phạm viết 02:31 ngày 01/10/2018

Việc đầu tiên là print 2 cái biến hATKoATK để “minh oan” cho cái hàm randint :V hàm này không thể sai được. Sau đó thì debug cái đống bên dưới, print hết các biến ra để theo dõi xem có thằng nào không đúng thì xử lí. Chứ debug kiểu chạy đi chạy lại chờ nó đúng thì … cùy

Chán print rồi có thể dùng cách này để debug:

python -m pdb test.py
(Gõ ? để xem hướng dẫn)

Hoặc đặt import pdb;pdb.set_trace() ở vị trí muốn dừng lại

viết 02:36 ngày 01/10/2018

hATK = random.randint(0,40)
để ở dòng
hATKp = hATK(randomGenerator);
trong vòng for ấy. Ai lại đi để ở ngoài vòng for?

    hATK = random.randint(0,40)
    oATK = random.randint(0,50)
# your true face
    while hNum != 0 and oNum != 0:
        combatEnd = False    
        hHP = 155
        oHP = 80
        while combatEnd == False:
            hATKp = hATK
            oATKp = oATK

thành

# your true face
    while hNum != 0 and oNum != 0:
        combatEnd = False    
        hHP = 155
        oHP = 80
        while combatEnd == False:
            hATK = random.randint(0,40)
            oATK = random.randint(0,50)
Bài liên quan
0