#45489: py找不出來問題...


yuyuitw62@gmail.com (余月染)

學校 : 不指定學校
編號 : 301342
來源 : [220.143.150.122]
最後登入時間 :
2025-03-21 12:20:50
f698. 後序運算式求值 -- 板橋高中教學題 | From: [114.39.22.229] | 發表日期 : 2025-03-09 10:11

postfix = list(map(str, input().split())) # 後序運算式
stack = [] # 數字堆疊

 

for i in postfix:
    if i.isdigit():
        stack.append(int(i))
    else:
        b = stack.pop(-1) # 先彈出第二個操作數
        a = stack.pop(-1) # 再彈出第一個操作數
        if i == '+':
            stack.append(a + b)
        elif i == '-':
            stack.append(a - b)
        elif i == '*':
            stack.append(a * b)
        elif i == '/':
            stack.append(int(a / b)) # 確保整數除法

 

ans = stack.pop()
print(ans)

 
空列表報錯
line 9, in a = stack.pop(-1) # 再彈出第一個操作數 IndexError: pop from empty list

但我太傻找不出來
求大大幫幫忙 ouo
 
#45491: Re: py找不出來問題...


leeguanhan0909@gmail.com (李冠翰)

學校 : 高雄市苓雅區復華高級中學國中部
編號 : 276558
來源 : [36.238.153.220]
最後登入時間 :
2025-04-05 17:05:47
f698. 後序運算式求值 -- 板橋高中教學題 | From: [218.166.11.174] | 發表日期 : 2025-03-09 11:38

postfix = list(map(str, input().split())) # 後序運算式
stack = [] # 數字堆疊

 

for i in postfix:
    if i.isdigit():
        stack.append(int(i))
    else:
        b = stack.pop(-1) # 先彈出第二個操作數
        a = stack.pop(-1) # 再彈出第一個操作數
        if i == '+':
            stack.append(a + b)
        elif i == '-':
            stack.append(a - b)
        elif i == '*':
            stack.append(a * b)
        elif i == '/':
            stack.append(int(a / b)) # 確保整數除法

 

ans = stack.pop()
print(ans)

 
空列表報錯
line 9, in a = stack.pop(-1) # 再彈出第一個操作數 IndexError: pop from empty list

但我太傻找不出來
求大大幫幫忙 ouo

運算元為 32 位元有號整數=>有可能有負數。

對於Python,"-1". isdigit()會是false

避免方法:把數字條件判斷加上len(i)>1

 
#45492: Re: py找不出來問題...


sam851015@gmail.com (多挖鼻孔有益身心健康)

學校 : 臺中市立惠文高級中學
編號 : 277705
來源 : [123.192.228.253]
最後登入時間 :
2025-03-11 12:39:29
f698. 後序運算式求值 -- 板橋高中教學題 | From: [123.192.228.253] | 發表日期 : 2025-03-09 11:39

postfix = list(map(str, input().split())) # 後序運算式
stack = [] # 數字堆疊

 

for i in postfix:
    if i.isdigit():
        stack.append(int(i))
    else:
        b = stack.pop(-1) # 先彈出第二個操作數
        a = stack.pop(-1) # 再彈出第一個操作數
        if i == '+':
            stack.append(a + b)
        elif i == '-':
            stack.append(a - b)
        elif i == '*':
            stack.append(a * b)
        elif i == '/':
            stack.append(int(a / b)) # 確保整數除法

 

ans = stack.pop()
print(ans)

 
空列表報錯
line 9, in a = stack.pop(-1) # 再彈出第一個操作數 IndexError: pop from empty list

但我太傻找不出來
求大大幫幫忙 ouo


題目的數字有可能是負數,例如 -1-2 這種

isdigit 不會將他們視為是數字,因為字串內的負號 - 不是數字

 

一個簡單的解決辦法是建一個表,裡面放運算子 operators = ["+", "-", "*", "/"]

判斷是否是數字時,只需要檢查 i in operators 就可以了,不在裡面的都當成數字看待

 

 
ZeroJudge Forum