2013-09-25 3 views
1

В Lua 5.2.1, я попытался сгенерировать случайное число сLua 5.2.1 - Генератор случайных чисел

num = math.random(9) 

Однако, каждый раз, когда я запускаю свою программу:

num = math.random(9) 
print("The generated number is "..num..".") 

Я получаю такое же количество.

[email protected]:~$ lua number 
The generated number is 8. 
[email protected]:~$ lua number 
The generated number is 8. 
[email protected]:~$ lua number 
The generated number is 8. 

Это расстраивает, потому что каждый раз я пытаюсь создать новый номер и перезапустить программу, я получаю ту же последовательность.

Есть ли другой способ генерации числа?

Кроме того, я посмотрел в

math.randomseed(os.time()) 

, но я действительно не понимаю. Если это действительно решение, вы могли бы объяснить, как это работает, что он делает и какой номер я получу?

Thx,

  • Brendan
+1

См. Http://stackoverflow.com/questions/18937897/my-randomstring-function-keeps-returning-the-same-result. – lhf

ответ

5

Это не является особенностью Lua. Псевдослучайные генераторы обычно работают так: им нужно засечь , и последовательность, которую они генерируют, на самом деле не случайна, а фактически детерминирована с учетом семени. Это хорошо для отладки, но для производства вам нужно изменить семена «случайным образом». Простой и типичный способ сделать это - использовать время для установки семени один раз в начале программы.

2

В Lua это ожидаемый выход. Вы не гарантируете получение разных последовательностей в разных сеансах.

Однако любые последующие вызовы math.random будет генерировать новый номер:

>> lua 
> =math.random(9) 
1 

>> lua 
> =math.random(9) 
1 

>> lua 
> =math.random(9) 
1 
> =math.random(9) 
6 
> =math.random(9) 
2 

math.randomseed() изменится, какая последовательность будет проигран. Если вы установите math.randomseed(3), например, вы всегда будете получать ту же последовательность, как и выше:

>> lua 
> math.randomseed(3) 
> =math.random(9) 
1 
> =math.random(9) 
2 
> =math.random(9) 
3 

>> lua 
> math.randomseed(3) 
> =math.random(9) 
1 
> =math.random(9) 
2 
> =math.random(9) 
3 

Однако, если вы установите math.randomseed() уникальное значение каждого запуска, например os.time(), вы получите конечно уникальная последовательность каждый раз.

1

Во-первых, вы должны назвать 'math.randomseed()'

'Почему?'

Потому что Lua генерирует псевдослучайные числа.

- Один из лучших семян для «math.randomseed()» - это время.

Таким образом, вы будете первым написать:

math.randomseed(os.time()) 

После этого

num = math.random(9) 
print("The generated number is "..num..".") 

Однако, есть ошибка в Windows. Тогда, если вы просто напишите 'num = math.random (9)', сгенерированное число будет одинаковым в течение 1 часа, я думаю.

«Как я могу это решить?»

Это легко, вам нужно сделать цикл for.

for n = 0, 5 do 
    num = math.random(9) 
end 

Так, в Windows, окончательный код будет выглядеть так:

math.randomseed(os.time()) 

for n = 0, 5 do 
    num = math.random(9) 
end 

print("The generated number is "..num..".") 

OBS: Если 'при п = 0, 5 у' не работает отлично, а затем заменить 5 с 10.

Смежные вопросы