Перейти к содержимому
  • 0
Dismid_

Помогите исправить ошибки в коде

Вопрос


--PROGRAMM BY DISMID

--RELOADER ALFA
--ALL RIGHTS RESERVED
-----------------------------------------
computer = require("computer")
local utm = computer.uptime()
print('КОмпьютер уже работает'..utm)
print('Введите через сколько секунд работы перезагрузить ПК (Пока только двухзначные числа )')
local vremua = io.read("*n")
print('Перезагрузить пк или просто выключить?? y - перезагрузить, n - просто выключить')
zn = io.read()
print('СПАСИБО ЧТО ИСПОЛЬЗУЕТЕ НАШЕ ПО')
-----------------------------------------
if zn == y then
if computer.uptime() >= vremua then
computer.shutdown(true)
end
elseif zn == n then
if computer.uptime() >= vremua then
computer.shutdown(false)
end
else
print('ТЫ что то не так сделал) Перезапусти прогу)')
end 

У меня мой код почему-то не очень работает, и принимает значения для vreuma только двухзначные то есть значение 100 уже не принимает, видно на скрине. Прошу гуру луа помочь.

А еще программа пропускает  zn = io.read()

 

 FOjLAYMsJbo.jpg

 

Изменено пользователем Alex
форматирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

НУ короче) У меня мой говнокод почему-то не очень работает, и принимает значения для vreuma только двухзначные тоесть значение 100 уже не принимает, вижно на скрине)

А как на скрине можно увидеть, что значение 100 не принято?

 

Мне скрин показывает, что выполнение пошло по третьей ветви условий, то есть, первые два условия оказались ложными. А такое поведение может быть объяснено кодом zn == y, который выполняет сравнение переменной zn с переменной y. Учитывая, что предыдущий код не иницализирует переменную y, то она, скорее всего, не существует, и условие всегда будет ложным.

 

Если код переписать код таким образом: zn == "y", то он выполнит сравнение переменной zn с символом "y", в случае успеха направив выполнение программы по первой ветви. Аналогичным образом следует поправить и вторую ветвь условия.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А как на скрине можно увидеть, что значение 100 не принято?

 

Мне скрин показывает, что выполнение пошло по третьей ветви условий, то есть, первые два условия оказались ложными. А такое поведение может быть объяснено кодом zn == y, который выполняет сравнение переменной zn с переменной y. Учитывая, что предыдущий код не иницализирует переменную y, то она, скорее всего, не существует, и условие всегда будет ложным.

 

Если код переписать код таким образом: zn == "y", то он выполнит сравнение переменной zn с символом "y", в случае успеха направив выполнение программы по первой ветви. Аналогичным образом следует поправить и вторую ветвь условия.

По скрину видно что не принимает более двухзначные числа, потому-что local utm = computer.uptime()

print('КОмпьютер уже работает'..utm) Показывает 7к секунд, а я задал перезагрузку через 100 секунд, пк в итоге не перезагрузился

Изменено пользователем Dismid_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А как на скрине можно увидеть, что значение 100 не принято?

 

Мне скрин показывает, что выполнение пошло по третьей ветви условий, то есть, первые два условия оказались ложными. А такое поведение может быть объяснено кодом zn == y, который выполняет сравнение переменной zn с переменной y. Учитывая, что предыдущий код не иницализирует переменную y, то она, скорее всего, не существует, и условие всегда будет ложным.

 

Если код переписать код таким образом: zn == "y", то он выполнит сравнение переменной zn с символом "y", в случае успеха направив выполнение программы по первой ветви. Аналогичным образом следует поправить и вторую ветвь условия.

А не можешь подсказать как сделать что бы при записи переменной через io.read она записываласчь не как "переменная" а переменная без "" Просто ето убивает много моих говнокодов, но всеравно спавсибо

Изменено пользователем Dismid_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А не можешь подсказать как сделать что бы при записи переменной через io.read она записываласчь не как "переменная" а переменная без "" Просто ето убивает много моих говнокодов

Если я верно понял вопрос, то никак. И дело не в io.read(), а в синтаксие Lua. Переменная указывается по её имени, а строковая константа всегда записывается в двойные и одинарные кавычки, а также в двойные квадратные скобки. То есть, Lua всегда интерпретирует name как имя, а 'name' как строковую константу.

 

В случае твоего кода необходимо сравнивать значение переменной со строковой константой, и потому без кавычек не обойтись. Но можно пойти на хитрость, предварительно записав константу в переменную. Например:

local y, n = "y", "n"

local a = io.read()
if a==y then
  ...
elseif a==n then
  ...
else
  ...
end
Так мы избавимся от кавычек на нужном участке кода, используя их в другом месте. Но зачем?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Но зачем?

К примеру для моей попытки создать калькулятор, она заруинилась тоже из-за ""

print('Введите пример(ЗНАКИ /*-+)')
local krya = io.read()
print (krya)
Я еще много раз пытался ето все починить но потом забил на него....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

А еще программа пропускает  zn = io.read() 
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Указанный код похож на работоспособный, и потому ничего не поясняет. Ну, будем мы сравнивать krya=='*', и как это нам помешает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Указанный код похож на работоспособный, и потому ничего не поясняет. Ну, будем мы сравнивать krya=='*', и как это нам помешает?

 

 

 

Ну если бы не было етих противных скобочек local krua  = (10*10)

print (krua) код бы выдавал правильный ответ, а не то что я написал(((
ЖАль что нету аргумента для io.read() типо '*n' который присваивает етой переменной хначение без "" (надеюсь понятно сформулировал речь)

MOpxuYvi9EM.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну если бы не было етих противных скобочек local krua  = (10*10) print (krua) код бы выдавал правильный ответ, а не то что я написал((( ЖАль что нету аргумента для io.read() типо '*n' который присваивает етой переменной хначение без "" (надеюсь понятно сформулировал речь)

Эта задача решается даже с противными скобочками:

local expr="2+2*2"
print( load("return "..expr)() )
И еще раз говорю, io.read тут не при чём, дело в синтаксисе языка.

 

Можно и так:

local value = load("return " .. io.read() )()
print( value )
Изменено пользователем eu_tomat

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Эта задача решается даже с противными скобочками:

local expr="2+2*2"
print( load("return "..expr)() )
И еще раз говорю, io.read тут не при чём, дело в синтаксисе языка.

 

Можно и так:

local value = load("return " .. io.read() )()
print( value )

Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

По скрину видно что не принимает более двухзначные числа, потому-что local utm = computer.uptime()

print('КОмпьютер уже работает'..utm) Показывает 7к секунд, а я задал перезагрузку через 100 секунд, пк в итоге не перезагрузился

Не заметил это сообщение сразу, отвечу сейчас:

Проверить, какие числа принимаются, а какие нет, можно, вставив для контроля print() сразу же за read():

local vremua = io.read("*n")
print(vremua)
Такой отладочный код поможет увидеть, что число всегда возвращается верное.

 

И почему-то не заметил это:

А еще программа пропускает  zn = io.read()

Действительно, после чтения числа через read("*n") следующий за ним вызов read() возвращает пустую строку. Вот пример, в нём же показано, как обойти такое поведение read():

$ lua5.3

> print( '-' .. io.read() .. '-' .. io.read() .. '-' .. io.read() .. '-' )
111
222
333
-111-222-333-

> print( '-' .. io.read("*number") .. '-' .. io.read() .. '-' .. io.read() .. '-' )
111
222
-111--222-

> print( '-' .. io.read("*number",1) .. '-' .. io.read() .. '-' .. io.read() .. '-' )
111
222
333
-111-222-333-
Почему так происходит, я сам не понимаю. С удовольствием послушаю более опытных знатоков Lua.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...