Использование цикла для решения, если число

#lua

Вопрос:

Я пишу небольшую программу на lua и надеялся получить некоторые указания на то, как было бы наиболее правильным подходом к этому. В принципе, если мой номер больше, чем последние 200 номеров, верните 1, иначе верните 0.

Я думаю, что лучшим способом будет петля? Допустим, x-это позиция моего числа в таблице, а затем я хочу проверить, что оно больше, чем предыдущие 200 чисел, и вернуть 1 в конце, если это так, и 0, если это не так.

 while (x > x-a)
    do
        isbigger = 1;
        a = a 1;
        return isbigger;
    end
 

Я не уверен, правильно ли это с точки зрения синтаксиса, технически это также будет возвращать 1 каждый раз, когда он проходит через цикл, и я просто хочу, чтобы это было в конце, если верно, что мое число больше, чем 200 предыдущих. Кроме того, как выйти из цикла, если он ложный (я бы предположил, с перерывом)?
Спасибо за любую помощь и хорошего дня!

Комментарии:

1. Вы сказали 200 предыдущих номеров, почему бы вам просто не отследить самый высокий предыдущий номер и не сравнить с ним?

2. @Nifim это имеет смысл, спасибо за идею! Я только начинаю с lua, не совсем уверен, как бы я это сделал. С таблицей или массивом, я полагаю? «200» не является фиксированным числом, я хотел бы также иметь возможность проверить 50 или 74 предыдущих номера для примера. Не могли бы вы указать мне правильное направление или, может быть, просто общий пример? Еще раз спасибо за помощь!

Ответ №1:

Если вы зацикливаетесь на массиве значений, вам следует использовать цикл for. вы также не хотите возвращаться isbigger из цикла, так как это приведет к преждевременному завершению цикла

 local last = 10
local myNumber = 123
local numbers = {}

--Setup our example numbers table
math.randomseed(os.clock())
for i = 1, 40 do
    numbers[i] = math.random(1,200)
end

--Run comparison on our the last x values
local isBigger = true
for i = #numbers, #numbers - last, -1 do
    print(myNumber, numbers[i],  myNumber > numbers[i])
    isBigger= isBigger and myNumber > numbers[i]
end

print("isBigger is: " .. isBigger)
return isBigger and 1 or 0
 

Пример Вывода

 123 181 false
123 6   true
123 77  true
123 78  true
123 145 false
123 130 false
123 104 true
123 114 true
123 6   true
123 4   true
123 15  true
isBigger is: false
 

Приведенный выше цикл for лучше подходит для понимания происходящего, но этот лучше использовать, так как он завершится, как только будет найден результат, который показывает myNumber , что он не больше.

 local isBigger = true
for i = #numbers, #numbers - last, -1 do
    print(myNumber, numbers[i],  myNumber > numbers[i])
    if not (myNumber > numbers[i]) then
        isBigger = false
        break
    end
end