фон
Я хочу, чтобы проверить свой код, который зависит от random
модуля.random.choice дает разные результаты на Python 2 и 3
Проблематика ПР https://github.com/Axelrod-Python/Axelrod/pull/202 и код здесь https://github.com/Axelrod-Python/Axelrod/blob/master/axelrod/strategies/qlearner.py
Проблема
Поскольку random
модуль производит псевдослучайные числа, я всегда устанавливают random.seed(X)
к известному значению X
. Это работает для последовательных тестовых прогонов. Однако, Python 3, кажется, дают различные значения, чем Python 2 при использовании random.choice([D, C])
После сниппета:
import random
random.seed(1)
for i in range(10):
print(random.choice(['C', 'D']), end=', ')
дает другой результат для Python 2 и 3
$ python2 test.py
C, D, D, C, C, C, D, D, C, C
$ python3 test.py
C, C, D, C, D, D, D, D, C, C
Однако random.random
метод работает такие же на 2.x и 3.x:
import random
random.seed(1)
for i in range(10):
print(random.random())
$ python3 test.py
0.13436424411240122
0.8474337369372327
0.763774618976614
0.2550690257394217
0.49543508709194095
0.4494910647887381
0.651592972722763
0.7887233511355132
0.0938595867742349
0.02834747652200631
$ python2 test.py
0.134364244112
0.847433736937
0.763774618977
0.255069025739
0.495435087092
0.449491064789
0.651592972723
0.788723351136
0.0938595867742
0.028347476522
Обходной путь
Я могу mock
выход random.choice
, который хорошо работает для простых тестовых случаев. Однако для довольно сложных тестовых примеров я не могу издеваться над выводами, потому что я просто не знаю, как это должно выглядеть.
Вопрос
ли я сделал что-то неправильно при вызове метода random.choice
?
Я предполагаю, что в фрагменте это должно быть 'для i в диапазоне (10):' и не 'для i в случайном порядке (10):' –
Почему вы ожидаете, что случайный модуль будет производить одни и те же результаты в разных версиях Python? –
Возможно, что-то с 'random.seed()'? – Zizouz212