Автор | Сообщение |
|
| |
Сообщение: 21
Зарегистрирован: 23.11.12
|
|
Отправлено: 15.03.14 13:10. Заголовок: Некорректная обработка кода(?)
Привет всем участникам сообщества. Написал код вот такого вида: :1 pln введите пароль: instr pass1= input pass1 if pass#count_1$=="abc2" then pln есть& else pln нет end Далее запускаю это через Акурку и ввожу в редактор текст "abc2" (без кавычек естественно). После нажатия на энтер на экран почему-то выводится "нет". В моём коде есть ошибка или это такой баг в самой Акурке? Заранее спасибо!
|
|
Профиль
Цитата
Ответить
|
Новых ответов нет
, стр:
1
2
All
[см. все]
|
|
|
| постоянный участник
|
Сообщение: 90
Зарегистрирован: 05.08.08
|
|
Отправлено: 29.03.14 23:28. Заголовок: Регулярные выражения..
Регулярные выражения в урке не поддерживаются.
|
|
Профиль
Цитата
Ответить
|
|
| |
Сообщение: 35
Зарегистрирован: 23.11.12
|
|
Отправлено: 30.03.14 15:54. Заголовок: Frodo пишет: Цитата..
Frodo пишет: Цитата: Регулярные выражения в урке не поддерживаются. Это как так? Выходит документация по Акурке написана неправильно? И вообще, как тогда на Урке возможно создавать парсеры или по крайней мере что-то к ним приближённое? Или возможно я просто не совсем понимаю термин "Регулярные выражения". Вы хотите сказать, что операции с текстовыми переменными в Урке вообще не возможны?
|
|
Профиль
Цитата
Ответить
|
|
| постоянный участник
|
Сообщение: 88
Зарегистрирован: 02.01.09
|
|
Отправлено: 30.03.14 17:24. Заголовок: Prime, вижу проблему..
Prime, вижу проблему в этом участке кода: цитата: | if maxteamnum=="[!0-9]" or len(maxteamnum)=0 or not maxteamnum=abs(maxteamnum) or #maxteamnum-50$>0 |
| В первом (с ==) и втором (с len) условии maxteamnum рассматривается, как строковая переменная, во всех остальных - как числовая. Моя гипотеза - для числовой переменной (а судя по предыдущему коду, maxteamnum считается таковой, если только где-то не было объявлено ее инициализации с instr) возвращаемое значение строковой длины (len) всегда будет равно нулю. Вам надо проинициализиовать maxteamnum как строковую переменную, потом каким-то образом сконвертить ее в числовую и у этой числовой уже проверять значения. Подробный пример кода продемонстрировать сейчас не готова.
|
|
Профиль
Цитата
Ответить
|
|
| |
Сообщение: 36
Зарегистрирован: 23.11.12
|
|
Отправлено: 30.03.14 21:10. Заголовок: Veto, я проверил зна..
Veto, я проверил значение переменной len(maxteamnum). В случае с числом 49 или 50 (на других не пробовал) оно равно двум! Как собственно и надо. Судя по всему проблема не в конвертации типа переменной. Здесь, думаю, что-то из разряда особых тонкостей языка URQ (или возможно даже самой Акурки).
|
|
Профиль
Цитата
Ответить
|
|
| постоянный участник
|
Сообщение: 89
Зарегистрирован: 02.01.09
|
|
Отправлено: 30.03.14 23:30. Заголовок: Prime пишет: Veto, ..
Prime пишет: цитата: | Veto, я проверил значение переменной len(maxteamnum). В случае с числом 49 или 50 (на других не пробовал) оно равно двум! Как собственно и надо. Судя по всему проблема не в конвертации типа переменной. Здесь, думаю, что-то из разряда особых тонкостей языка URQ (или возможно даже самой Акурки). |
| Это говорит только о том, что maxteamnum воспринимается как строковая переменная. Я бы тестировала так: 1. Убрала бы из исходного if условия, интерпретирующие maxteamnum как числовую переменную (not maxteamnum=abs(maxteamnum) or #maxteamnum-50$>0). Проверила бы, как отрабатываются нештатные варианты - ввод пустой строки, наличие отличных от чисел символов в строке. (Кстати, условие maxteamnum=="[!0-9]", по идее, должно и отрицательные числа отсекать, так что дальнейшая проверка тут вроде и не нужна. Но это так, к слову). 2. Если в п. 1 все работает, как ожидается, я бы уже после if-а добавила вычисления abs(maxteamnum) и #maxteamnum-50$ и посмотрела бы, правильно ли они отрабатывают. Если нет, то, значит, автоматической конвертации строкового значения в число не происходит, и надо это сделать принудительно в программе. Если же все нормально, то поэкспериментировала бы еще с присваиванием значений промежуточным переменным и использованием в операторе if именно этих переменных, а не оригинальных значений.
|
|
Профиль
Цитата
Ответить
|
|
| |
Сообщение: 38
Зарегистрирован: 23.11.12
|
|
Отправлено: 01.04.14 17:39. Заголовок: Спасибо, Veto, попро..
Спасибо, Veto, попробую.
|
|
Профиль
Цитата
Ответить
|
|
| постоянный участник
|
Сообщение: 91
Зарегистрирован: 05.08.08
|
|
Отправлено: 02.04.14 09:52. Заголовок: frodo пишет: Регуля..
frodo пишет: цитата: | Регулярные выражения в урке не поддерживаются. |
| Прошу прощения, забыл, что мы говорим об АкУрке. Prime пишет: цитата: | if maxteamnum=="[!0-9]" or len(maxteamnum)=0 or not maxteamnum=abs(maxteamnum) or #maxteamnum-50$>0 then maxteamnum=7 ... |
| Я уже советовал ранее: pln - чуть ли не единственный способ отладки. Можно проверить, как работает код, если разбить его на составляющие. Например, так: incorrect1=0 incorrect2=0 incorrect3=0 incorrect4=0 if maxteamnum=="[!0-9]" then incorrect1=1 if len(maxteamnum)=0 then incorrect2=1 if not maxteamnum=abs(maxteamnum) then incorrect3=1 if #maxteamnum-50$>0 then incorrect4=1 pln Step 1: #incorrect1$, step 2: #incorrect2$, step 3: #incorrect3$, step 4: #incorrect4$ if incorrect1 or incorrect2 or incorrect3 or incorrect4 then maxteamnum=7 ... Впоследствии код можно не менять, только закомментировать pln.
|
|
Профиль
Цитата
Ответить
|
Новых ответов нет
, стр:
1
2
All
[см. все]
|
|