30/09/2018, 22:11

Lỗi vòng lặp while trong python

mình đang tự học python và đang code thử thuật toán balan ngược và đang bị lỗi ở vòng lặp while. Lỗi mình gặp phải là vừa xong vòng lặp while trong 1 hàm đó thì thay vì chỉ kết thúc vòng lặp while tự nhiên nó thoát ra khỏi cái hàm luôn trong khi chưa đủ điều kiện để thoát. Xin mọi ng chỉ giáo, cảm ơn

  `def change(a): # chuyển chuỗi về từng cụm
        base=[]
        pos=0
        for i in range(0,len(a)):
            if a[i]<'0' or a[i]>'9':
                #print a[pos:i]
                base.insert(len(base),a[pos:i])
                base.insert(len(base), a[i])
                pos=i+1
        base.insert(len(base),a[pos:len(a)])
        return base

    def compare(a,b):# so sánh các toán tử
        if a=='+' or a=='-':
            if b=='+' or b=='-':
                return 0
            else:
                return -1
        else:
            if b=='+' or b=='-':
                return 1
            else:
                return 0

    def balan(a):# chuyển về dạng hậu tố
        result=[]
        temp=[]
        for i in range(0,len(a)):
            if a[i][0]<'9' and a[i][0]>'0':
                result.insert(len(result),a[i])
            else:

                if len(temp)==0:
                    temp.insert(len(temp),a[i])
                else:
                    while compare(a[i],temp[len(temp)-1])>=0 and len(temp)>0:# nơi xảy ra lỗi
                        result.insert(len(result),temp[len(temp)-1])
                        del temp[len(temp)-1]
                    temp.insert(len(temp),a[i])
        return result


    a=change("12+23-23-22*98")
    b=balan(a)`
hacked viết 00:21 ngày 01/10/2018

Lỗi là lỗi như thế nào?

Gió viết 00:12 ngày 01/10/2018

Điều kiện len(temp)>0 phải đặt lên trước để đảm bảo có thể truy cập temp[-1]

Lê Hồng Hiếu viết 00:17 ngày 01/10/2018

bạn có thể giải thích cho mình phần này ko? Tại sao phải đặt lên trước mới có thể truy cập temp[-1]. Mình biết C/C++ với C# mà chưa có gặp trường hợp này. Cảm ơn bạn

Bài liên quan
0