Форум сайта python.su
0
Писал свою четвертую программу на питоне и не смог. Она нормально считает выражения в скобках, но спотыкается, если ввести без них или, если в выражении присутствует знак деления \
В чем ошибка?
polsk=input("vvedi polskyy ") k=list(polsk) za="" zo="" h=ip=1 l=len(k) vyhod = stk = [] for i in range (len(k)-1): if i<len(k): print (k) p=k[i] ln=len(stk) print(stk) if p.isdigit() : vyhod=vyhod+list(p) print (vyhod,"vyhod") if ln != 0: if p == "*" or p == "/" and stk[ln-1] == "+" or stk[ln-1] == "-": v=p v=list(v) stk = v+stk stk.pop() LL=len(stk) by=list(stk[LL-1]) vyhod=vyhod+by stk.pop() k.remove(p) else: if p == "+" or p == "-": stk=stk+list(p) if p == "*" or p == "/": stk=stk+list(p) ln=len(stk) if ln != 0: if p == "+" or p == "-" and stk[ln-1] == "*" or stk[ln-1] == "/": v=p v=list(v) stk = v+stk stk.pop() LL=len(stk) by=list(stk[LL-1]) vyhod=vyhod+by stk.pop() k.remove(p) else: if p == "+" or p == "-": stk=stk+list(p) if p == "*" or p == "/": stk=stk+list(p) else: if p == "+" or p == "-": stk=stk+list(p) if p == "*" or p == "/": stk=stk+list(p) if p == "(": dop=[] dop=stk ip=i k.remove(p) while p!= ")": ip=ip+1 p=k[ip] ln=len(stk) print(stk) if p.isdigit() : vyhod=vyhod+list(p) k.remove(p) print (vyhod, "isdigi") print (k) else: if p == "+" or p == "-": stk=stk+list(p) k.remove(p) else: if ln != 0: if p == "*" or p == "/" and stk[ln-1] == "+" or stk[ln-1] == "-" : v=p v=list(v) stk = v+stk print (p) print (k) k.remove(p) print(vyhod,"1..") print(stk,"1.") vyhod=vyhod+stk stk.clear() for i in range (len(vyhod)): d=str(vyhod[i]) za=za+d for i in range (len(stk)): da=str(stk[i]) zo=zo+da print (za+zo)
Офлайн
3
Не знаю как вам, но мне кажется, что переменные можно было бы немного понятнее называть. Не хочется даже вникать.
v=p v=list(v)
v = list(p)
ln=len(stk) if ln != 0:
if stk:

Отредактировано TroSer (Окт. 4, 2014 11:59:50)
Офлайн
6
TroSer+1
LL=len(stk) by=list(stk[LL-1]) vyhod=vyhod+by
vyhod.append(stk[-1])
polsk=raw_input("vvedi polskyy ") #infix or postfix in input??? not clear expr=list(polsk) za="" zo="" vyhod = [] stk = [] for i in range (len(expr)-1): if i<len(expr): # what is it for??? symbol=expr[i] ln=len(stk) if symbol.isdigit() : vyhod.append(symbol) if ln != 0: if symbol == "*" or symbol == "/" and stk[-1] == "+" or stk[-1] == "-": stk.insert(0,symbol) stk.pop() vyhod.append(stk[-1]) stk.pop() expr.remove(symbol) else: if symbol == "+" or symbol == "-" or symbol == "*" or symbol == "/": stk.append(symbol) ln=len(stk) if ln != 0: if symbol == "+" or symbol == "-" and stk[-1] == "*" or stk[-1] == "/": stk.insert(0,symbol) stk.pop() vyhod.append(stk[-1]) stk.pop() expr.remove(symbol) else: if symbol == "+" or symbol == "-" or symbol == "*" or symbol == "/": stk.append(symbol) else: if symbol == "+" or symbol == "-" or symbol == "*" or symbol == "/": stk.append(symbol) if symbol == "(": ip=i expr.remove(symbol) while symbol!= ")": ip=ip+1 symbol=expr[ip] ln=len(stk) if symbol.isdigit() : vyhod.append(symbol) expr.remove(symbol) else: if symbol == "+" or symbol == "-": stk.append(symbol) expr.remove(symbol) else: if ln != 0: if symbol == "*" or symbol == "/" and stk[-1] == "+" or stk[-1] == "-" : stk.insert(0,symbol) expr.remove(symbol) print(vyhod,"1..") #??? print(stk,"1.") #??? vyhod=vyhod+stk stk.clear() for i in range (len(vyhod)): d=str(vyhod[i]) za=za+d for i in range (len(stk)): da=str(stk[i]) zo=zo+da print (za+zo)
Отредактировано Nata (Окт. 4, 2014 12:45:48)
Офлайн
1
Nata


Офлайн