Уведомления

Группа в Telegram: @pythonsu

#1 Март 26, 2010 22:01:27

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

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

Alex_Kutsan
Если чесно я ещё немного не понял эту фразу
Это грустно.

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

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

P.S. у меня закончилось пиво.



Офлайн

#2 Март 26, 2010 22:21:07

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

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

?

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()



Офлайн

#3 Март 26, 2010 22:40:40

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

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

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



Отредактировано (Март 26, 2010 22:41:44)

Офлайн

#4 Март 26, 2010 22:52:53

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

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

Внезапно осенило!
Можно так:

if func1() and func2() and func3():
print "YES"
else:
print "NO"
Питон сам прекратит считать, как только наткнётся на ф-цию, которая вернёт FALSE.



Офлайн

#5 Март 26, 2010 23:09:37

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

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

вы знаете, гениальная идея на щёт sys.exit() спасибо большое, осталось только очень много писанины, может до утра справлюсь без новых пролблем, вроде знаю уже как делать Спасибо ещё раз.



Офлайн

#6 Март 26, 2010 23:19:53

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

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

Ах да ещё 1 маленький нюанс, как составить функцию, которая поймёт что все открывшиеся скобки закрылись, и что все закрывшиеся скобки открывались,
Ну как в питоне когда выражеие со скобками пишеш, ведь при неправильной растановке скобок он ошибку выдаст,
даже если количество открывшихся количеству закрывшихся
хотяб такой пример (Y)))>X>(((Y)



Офлайн

#7 Март 26, 2010 23:58:54

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2742
Репутация: +  183  -
Профиль   Отправить e-mail  

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

>вы знаете, гениальная идея на щёт sys.exit() спасибо большое

sys.exit() не обязательно, можно просто exit()



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#8 Март 27, 2010 07:31:05

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

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

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



Офлайн

#9 Март 27, 2010 08:50:22

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

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

>>даже если количество
>>открывшихся количеству
>>закрывшихся
>>хотяб такой пример (Y)))>X>(((Y)

У вас ведь уже есть такой кусок в коде. Просто оформите его в виде функции. Вы ведь знаете как писать функции на питоне?



Офлайн

#10 Март 27, 2010 17:12:45

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

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

Я немного не правильно выразился,
Мой кусок подшитывает колво открывшихся и колво закр.
И в такой примерер (Y)))>X>(((Y) совершенно спокойно его пропустит.
А должен выдать ошибку. Моя программа по сути должна проверять правильность синтаксиса функции. Просто вмето привычных * и +, там есть >,<,_,=,&( обозначаются они конечно по другому, но на клавиатуре нет таких значков)
Так вот если мы посмотрим на эту функцию( только вместо < представьте * ) ТОувидим что она записана с неправильной растановкой скобок.
хотя кол-во открывающихся = кол=ву закрывающихся.
и такой цикл

for simv in n:
if simv == "(":
tf = True
if tf==False:
print "NO"
её пропустит и не вякнет.

может можно достать исходники стандартной проверки правильности растановки скобок в питоне?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version