Онлайн-справочник по самым часто задаваемым вопросам из темы "Как сделать?" на форуме QSP.su
13.10. Не работает многострочный код. Как исправить?
В: Не работает многострочный код. Как исправить?
Пишу такой код:
"На берёзе созрело несколько яблок."
act "Сорвать яблоко":
яблоко=яблоко+1
"Я сорвал яблоко и положил в консервную банку."
else яблоко>3:
"Мне больше не нужны яблоки"
end
end
Плеер выдаёт ошибку.
О:
Перепутаны назначения ключевых слов, очевидно от того, что вы не понимаете порядка работы оператора условия и оператора, создающего действие.
Многострочная форма записи конструкции условия имеет три вида.
Первый вид, это "простое" условие:
[команда 1]
[команда 2]
[команда 3]
END
За ключевым словом `IF` следует выражение `[#выражение]`, и если это выражение верно, плеер выполняет команды в последующих строках после двоеточия до ключевого слова `END`. Если выражение не верно, эти команды просто игнорируются плеером.
Второй вид, это "сложное" условие. Эта запись позволяет нам задать наборы команд на случай, если выражение верно, и на случай, если выражение неверно:
[команда 1]
[команда 2]
[команда 3]
ELSE
[команда 4]
[команда 5]
[команда 6]
END
В этом случае, если выражение `[#выражение]` верно, выполняются команды, записанные в последующих строках после двоеточия и до ключевого слова `ELSE`. Т.е. команды `[команда 1]`, `[команда 2]` и `[команда 3]`. А если выражение `[#выражение]` не верно, выполняются команды, записанные в последующих строках после ключевого слова `ELSE` и до ключевого слова `END`. Т.е. команды `[команда 4]`, `[команда 5]` и `[команда 6]`. При этом после `ELSE` не ставится двоеточие, и указать дополнительное условие проверки нельзя.
Чтобы указать дополнительное условие, предусмотрен третий вид, это "расширенное" условие, и выглядит он так:
[команда 1]
[команда 2]
[команда 3]
ELSEIF [#выражение 2]:
[команда 4]
[команда 5]
[команда 6]
ELSE
[команда 7]
[команда 8]
[команда 9]
END
Теперь мы можем в одну конструкцию уместить несколько условий и для каждого написать свой набор команд. Если верно выражение `[#выражение 1]`, плеер выполнит команды в последующих строках после двоеточия и до первого `ELSEIF`, т.е. команды `[команда 1]`, `[команда 2]` и `[команда 3]`. Все остальные команды в конструкции условия будет проигнорированы.
Однако, если выражение `[#выражение 1]` неверно, тогда проверяется выражение `[#выражение 2]`, и если оно верно, то выполняются команды в последующих строках до `ELSE`, т.е. комнады `[команда 4]`, `[команда 5]` и `[команда 6]`. И так далее.
Как видно, когда мы пишем ключевое слово `ELSEIF`, к нему нужно указать и выражение, истинность которого следует проверить, и после выражения поставить двоеточие.
Так выглядят три вида многострочной формы записи конструкции условий, но для многострочной записи действия предусмотрен только один вид.
[команда 1]
[команда 2]
END
В многострочной форме записи действия нельзя использовать ключевое слово `ELSE`, или `ELSEIF`. Они относятся только к конструкциям условий.
Тем не менее можно комбинировать различные конструкции, чтобы добиться правильной работы данного кода:
if яблоки_созрели=1:
! если значение переменной яблоки_созрели равно 1
! выводим на экран текст
"На берёзе созрело несколько яблок."
! выводим на экран соответствующее действие
act "Сорвать яблоко":
! далее следует код действия
! открываем внутри действия условие,
! проверяющее, сколько мы сорвали яблок
if яблоко>3:
! если мы сорвали больше трёх яблок
! выводим текст, что нам больше не нужны яблоки
"Мне больше не нужны яблоки"
else
! иначе, если мы сорвали три или меньше яблок
! увеличиваем число сорванных яблок
яблоко=яблоко+1
! выводим текст, что сорвали ещё яблоко
"Я сорвал яблоко и положил в консервную банку."
! закрываем условие внутри действия
end
! закрываем действие
end
! закрываем общее условие
end
От себя могу порекомендовать комментировать каждую строчку кода, если вы только начали изучать язык QSP. Это поможет более чётко и ясно понимать, как и что работает. Если вы не можете объяснить назначение той или иной строчки кода, то с ней следует разобраться. Она может быть банально лишней, а может вам ещё недостаёт знаний, чтобы правильно её применить.