Уведомления

Группа в Telegram: @pythonsu

#1 Март 27, 2010 17:27:13

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

Сочетание символов, как задать операторы.

ах да и ещё если посмотреть в мой код например сюда

for simv in n:
for chya in ch:
for operator in operators:
то можно увидеть что для состыковки каждого из разных списков я делаю каждый раз вложеные функции
Ещё ничего когда их 2
Но вотя наткнулся на проблему когда их 4, и по 2-5 переменных в каждом списке, и программа моя будет естетвенно плоховато работать. Да и по индусски жто както.

А проблема у меня такая
что напимер символ n должен ровнятся хоть какойто переменной из этого сиска
если использовать такой синтаксис n==
то то что мне нужно будет выглядить так

tf = True
if n==:
tf = False
но такого в питоне я не знаю. Подскажите может есть функция покомпактнее которая сравнивает 1 переменную с каждой переменой в списке,
Ато по 5 вложеных циклов это слишком



Офлайн

#2 Март 27, 2010 18:26:07

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

Сочетание символов, как задать операторы.

>>> n = 1
>>> if n in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
print('счастье и радость!')


счастье и радость!



Офлайн

#3 Март 27, 2010 18:41:34

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

Сочетание символов, как задать операторы.

О госоди, я написал маленькую Часть кода, И в нём ошибка, я не могу найти какая!!
Помогите

n= "(((!x)>x)_((!y)=(!x)))" # Юзер задал какуюто функцию
ch=["x","y"] # программа должна определить переменные (я ещё не придумал функциии но помойму это не сложно)
operatorsNO = [">","<","=","_","&"] # я задал операторы включаа яоператор НЕТ
operators = [">","<","=","_"] # я задал опрераторы без оператора НЕТ
# мне надо сделать так чтоб после переменной небыло открывающейся скобки, другой переменой или оператора НЕ,
# ещё нужно чтобы перед переменной небыло закрывающейся скобки или другой переменной
# НУ И 3 это чтоб если до переменной стоит оператор, то после неё опрератора быть уже не может
# ну и наоборот, если после переменной стоит опрератор то до переменной оператора быть не может
for simv in n:
for chya in ch:
for operator in operators: # таким способом будут состыковыватся все виды символов
for operatorNO in operatorsNO:
if simv == chya: # я нашел переменную в строке
t=0
while t<len(n):
if n[t]==simv:
q=t
break # я определил номер переменной в строке
t=t+1
if n[q+1]== "(" or n[q+1]=="&": # после переменной небыло открывающейся скобки или оператора НЕ,
tf = False
if n[q-1]==")": # перед переменной небыло закрывающейся скобки
tf = False
if n[q+1]==operator: # если после переменной стоит опрератор то до переменной оператора быть не может
if n[q-1]==operatorNO:
tf = False
if n[q-1]==operator: # если до переменной стоит оператор, то после неё опрератора быть уже не может
if n[q+1]==operatorNO:
tf = False
к стати я совсем забыл выпонить в коде условие что 2 переменные не могут ити подряд, но неужели для этого прийдётся делать 4 вложеный цикл?



Офлайн

#4 Март 27, 2010 19:05:14

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

Сочетание символов, как задать операторы.

Ой да я введь забыл написать его выполнение

>>>n = "(((!x)>x_)_((!y)=(!x)))" # тут ошибка в этом месте >x_ , если до переменой стоит оператор, то после неё уже не может,и наоборот.
tf = True
>>> for simv in n:
for chya in ch:
for operator in operators:
for operatorNO in operatorsNO:
if simv == chya:
t=0
while t<len(n):
if n[t]==simv:
q=t
break
t=t+1
if n[q+1]== "(" or n[q+1]=="&":
tf = False
if n[q-1]==")":
tf = False
if n[q+1]==operator:
if n[q-1]==operatorNO:
tf = False
if n[q-1]==operator:
if n[q+1]==operatorNO:
tf = False


>>> tf
True
как видно я вставил в свою функцию ошибочные данные , а программа эти данные пропустила, и сказала что они правдивые



Офлайн

#5 Март 27, 2010 20:07:18

rerednaW
От:
Зарегистрирован: 2010-03-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Сочетание символов, как задать операторы.

Все равно, от грамматического разбора в том или ином виде не уйти. Даже если вы студент. Представьте что то что у вас есть - это некий входной язык с определенным синтаксисом. Остается разобрать на отдельные операторы и применить их. Если не хочется идти таким путем, можно попробовать заточить язык перегрузив операторы. Такое можно проделать, например, на C++.



Офлайн

#6 Март 27, 2010 20:22:41

Alex_Kutsan
От:
Зарегистрирован: 2010-03-25
Сообщения: 150
Репутация: +  0  -
Профиль   Отправить e-mail  

Сочетание символов, как задать операторы.

Эммм….
Ок не не пытаюсь уйти от каких либо трудностей,
только я не знаю C++ , я знаю только немного Азы Питона, а за неделю c++ мнене выучить,
к тому же есть ещё много работы помимо этой.
Так как ведь вроде этим я и занимаюсь, я делаю граматический разбор.
только как я понимаю индусским методом.
Скажте как сделать по другому?



Офлайн

#7 Март 27, 2010 23:16:54

tombird
От:
Зарегистрирован: 2007-05-16
Сообщения: 21
Репутация: +  0  -
Профиль   Отправить e-mail  

Сочетание символов, как задать операторы.

http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C

Ctrl-F “Преобразование из инфиксной нотации”



Отредактировано (Март 27, 2010 23:19:25)

Офлайн

#8 Март 28, 2010 07:47:24

rerednaW
От:
Зарегистрирован: 2010-03-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Сочетание символов, как задать операторы.

Alex_Kutsan
Эммм….
Ок не не пытаюсь уйти от каких либо трудностей,
только я не знаю C++ , я знаю только немного Азы Питона, а за неделю c++ мнене выучить,
к тому же есть ещё много работы помимо этой.
Так как ведь вроде этим я и занимаюсь, я делаю граматический разбор.
только как я понимаю индусским методом.
Скажте как сделать по другому?
В другой теме я уже давал ссылку на пример с PLY. Если это не нравится, можно попробовать описать это самому. В начале описать требуемую грамматику в виде то го же БНФ. Потом выделить лексические конструкции. На их базе написать собственно разборщик. На Питоне это пищется легче, так как можно смело использовать рекурсию и готовые элементы типа списка или словаря для хранения промежуточных результатов.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version