Хотя в вашем примере int(input(...))
делает трюк в любом случае, python-future
's builtins.input
заслуживает внимания, поскольку это гарантирует, что ваш код работает как для Python 2, так и для 3 и отключает поведение Python2 по умолчанию input
, пытающееся быть «умным» относительно типа входных данных (builtins.input
в основном ведет себя как raw_input
).
Я ожидал бы, что любая одна реализация даст одну и ту же последовательность для одного и того же семени, но могут быть различные реализации. Например, «онлайн-компилятор C #» может в конечном итоге использовать Mono, и я ожидаю, что у него будет другая реализация в .NET.
Я не знаю, изменились ли реализации между версиями .NET, но опять же это кажется вполне возможным.
Документация для конструктора Random(int)
гласит:
Предоставление одинакового значения семени различным объектам Random приводит к тому, что каждый экземпляр создает идентичные последовательности случайных чисел.
blockquote>... но в нем не указаны значения различных версий и т. д. Черт, он даже не указывает, будут ли версии x86 и x64 давать одинаковые результаты. Я ожидал бы те же результаты в любом конкретном экземпляре CLR (т. Е. Один процесс, а не два CLR, работающих бок о бок, либо *.
Если вам что-то нужно более стабильный, я бы начал с алгоритма , указанного - я уверен, что доступны версии Mersenne Twister и т. д.
Возможно, это связано с различными версиями рамок. Посмотрите на этот
Это не указано в качестве такого обещания, поэтому вы должны предположить, что это не так.
Хорошее правило с любой спецификацией - не давать обещаний, которые не требуются для разумного использования , поэтому вы более свободны, чтобы улучшить ситуацию позже.
Действительно, в документации Random
говорится:
Текущая реализация класса Random основана на Donald E Алгоритм генератора случайных чисел Кнута.
blockquote>Обратите внимание на фразу «текущая реализация», подразумевая, что она может измениться в будущем. Это очень убедительно свидетельствует о том, что не существует обещания быть совместимым между версиями, но нет никакого намерения.
Если спецификация требует последовательных псевдослучайных чисел, то она также должна указать алгоритм как начальное значение. Действительно, даже если
Random
был задан как предоставление такого обещания, что, если вам понадобится реализация не-.NET всей или части вашей спецификации или что-то, что взаимодействует с ней, в будущем?
Интернет-провайдер, которого вы пытались, может использовать реализацию Mono CLR, которая отличается от той, которую предоставляет Microsoft. Поэтому, вероятно, их реализация класса Random
немного отличается.