первый случайный номер lua math.random не перезаписывается - PullRequest
0 голосов
/ 06 мая 2018

, поэтому я новичок в LUA и пишу простой сценарий с угадыванием числа, но я обнаружил странную причуду, которая происходит с math.random, и я хотел бы понять, что здесь происходит.

Итак, я создаю случайное начальное число с math.randomseed(os.time()), но когда я иду, чтобы получить случайное число, например:
correctNum = math.random(10) print(correctNum),
он всегда получает одно и то же случайное число каждый раз, когда я запускаю его, если только я не делаю это дважды (независимо от приведенных аргументов):
random1 = math.random(10) print(random1)<br> random2 = math.random(10) print(random2)
в этом случае первое случайное число никогда не будет повторяться при каждом выполнении, но второе будет.

Просто запутался в том, как работает рандомизация в LUA, и был бы признателен за помощь.

Спасибо
-Electroshockist


Вот полный рабочий код:

math.randomseed(os.time())
random1 = math.random(10)
print(random1)

random2 = math.random(10)
print(random2)

repeat
  io.write "\nEnter your guess between 1 and 10: "
  guess = io.read()
  if tonumber(guess) ~= random2 then
    print("Try again!")
  end
  print()
until tonumber(guess) == random2
print("Correct!")

1 Ответ

0 голосов
/ 06 мая 2018

Полагаю, вы вызываете скрипт дважды в течение одной секунды. Разрешение os.time() составляет одну секунду, т. Е. Если вы вызываете скрипт дважды в одну и ту же секунду, вы начинаете с одного и того же начального числа.

os.time ([таблица])

Возвращает текущее время при вызове без аргументов или время, представляющее дату и время, указанные в данной таблице. Эта таблица должна иметь поля year, month и day и может иметь поля hour, min, sec и isdst (описание этих полей см. В os.date функция).

Возвращаемое значение - это число, значение которого зависит от вашей системы. В POSIX, Windows и некоторых других системах это число подсчитывает количество секунд, прошедшее с некоторого заданного времени начала («эпоха»). В других системах значение не указано, а число, возвращаемое time, может использоваться только в качестве аргумента для date и difftime.

Кроме того, вы катите число от 1 до 10, так что есть вероятность 0,1, что вы нажмете 4 (что не так уж и мало).

Чтобы узнать, как лучше посеять случайные числа, посмотрите здесь: https://stackoverflow.com/a/31083615

...