Найти - Пользователи
Полная версия: Сочетание символов, как задать операторы.
Начало » Python для новичков » Сочетание символов, как задать операторы.
1 2 3
UsCr
Alex_Kutsan
Если чесно я ещё немного не понял эту фразу
Это грустно.

Alex_Kutsan
да и вобще я уже 3 раза менял архитектуру и всё заново переписывал
Это очень мало, поверьте.

Ваши print “NO” делят программу на несколько логических блоков. Вот разделите эти блоки и разнесите их по функциям. Функция должна возвращать “NO” или “YES” (ну или 0 и 1, это не имеет значения).
Если функция вернула “YES”, то переходите к следующей, если “NO”, то print “БИДА!!!!11” sys.exit(), например…
Вот вам самый быстрый способ переписать вашу программу.

P.S. у меня закончилось пиво.
sp3
?
n= "(((!x)>x)_((!y)=(!x)))"
ch=["x","y"]
tf = False

def func(n,ch,tf):
for simv in n:
for oprt in opr:
if simv==oprt:
tf=True
if tf==False:
return "NO"
tf = False
for simv in n:
if simv == "(":
tf = True
if tf==False:
return "NO"
brackets = 0
for letter in n:
if letter == '(':
brackets += 1
elif letter == ')':
brackets -= 1
if brackets != 0:
return "NO"

for simv in n:
for chya in ch:
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 tf = False:
return "NO"


print func(n,ch,tf)
raw_input()
UsCr
http://ru.wikibooks.org/wiki/Учебник_Python_2.6 - должно помочь.

Я предлагаю привести код к виду, при котором вы сможете делать так:
if func1():
if func2():
if func3():
print "YES"
else:
print "NO"
else:
print "NO"
else:
print "NO"
Т.Е. Проверил условие, если всё ОК, то идём дальше. Если функция вернула 0, значит пишем NO и никуда больше не идём.

P.S. Одна функция - один return
UsCr
Внезапно осенило!
Можно так:
if func1() and func2() and func3():
print "YES"
else:
print "NO"
Питон сам прекратит считать, как только наткнётся на ф-цию, которая вернёт FALSE.
Alex_Kutsan
вы знаете, гениальная идея на щёт sys.exit() спасибо большое, осталось только очень много писанины, может до утра справлюсь без новых пролблем, вроде знаю уже как делать Спасибо ещё раз.
Alex_Kutsan
Ах да ещё 1 маленький нюанс, как составить функцию, которая поймёт что все открывшиеся скобки закрылись, и что все закрывшиеся скобки открывались,
Ну как в питоне когда выражеие со скобками пишеш, ведь при неправильной растановке скобок он ошибку выдаст,
даже если количество открывшихся количеству закрывшихся
хотяб такой пример (Y)))>X>(((Y)
Rodegast
>вы знаете, гениальная идея на щёт sys.exit() спасибо большое

sys.exit() не обязательно, можно просто exit()
sp3
Alex_Kutsan
даже если количество открывшихся  количеству закрывшихся
хотяб такой пример (Y)))>X>(((Y)
если ( : х +=1
если ) : х -=1
если х<0 : return ‘no’
UsCr
>>даже если количество
>>открывшихся количеству
>>закрывшихся
>>хотяб такой пример (Y)))>X>(((Y)

У вас ведь уже есть такой кусок в коде. Просто оформите его в виде функции. Вы ведь знаете как писать функции на питоне?
Alex_Kutsan
Я немного не правильно выразился,
Мой кусок подшитывает колво открывшихся и колво закр.
И в такой примерер (Y)))>X>(((Y) совершенно спокойно его пропустит.
А должен выдать ошибку. Моя программа по сути должна проверять правильность синтаксиса функции. Просто вмето привычных * и +, там есть >,<,_,=,&( обозначаются они конечно по другому, но на клавиатуре нет таких значков)
Так вот если мы посмотрим на эту функцию( только вместо < представьте * ) ТОувидим что она записана с неправильной растановкой скобок.
хотя кол-во открывающихся = кол=ву закрывающихся.
и такой цикл
for simv in n:
if simv == "(":
tf = True
if tf==False:
print "NO"
её пропустит и не вякнет.

может можно достать исходники стандартной проверки правильности растановки скобок в питоне?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB