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 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 ạ
em
import random
rồi xàirandom.randint(a,b)
là đượcuniform_int_distribution<int> hATK(0, 40)
là để lấy số ngẫu nhiên trong đoạn [0,40] mỗi khi gọihATK(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 chohATK(andomGenerator)
. Khỏi cần tạo random generator hay hATK gì hết, thư viện random nó lo hết rồi.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? :
Việc đầu tiên là print 2 cái biến
hATK
vàoATK
để “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ùyChá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ạihATK = random.randint(0,40)
để ở dòng
hATKp = hATK(randomGenerator);
trong vòng for ấy. Ai lại đi để ở ngoài vòng for?
thành