請問為什麼大部分都可以AC少部分卻不行,而且錯誤的值和正確答案差超多。(裡面那個c函數其實是我自製的eval函式,功能理論上完全一樣)
程式的內容有點像是一條式子1+2*3+4我先算2*3,再把原式中的2*3塗掉,用6代替,變成1+6+4。
請問為什麼大部分都可以AC少部分卻不行,而且錯誤的值和正確答案差超多。(裡面那個c函數其實是我自製的eval函式,功能理論上完全一樣)
程式的內容有點像是一條式子1+2*3+4我先算2*3,再把原式中的2*3塗掉,用6代替,變成1+6+4。
countlist = input()head,end = 0,0count = ''def c(expr):tokens = expr.replace(' ', '')num, stack, op = '', [], '+'for i, ch in enumerate(tokens + '+'): # 在結尾加個 '+' 觸發最後一次計算if ch.isdigit() or ch == '.':num += chelse:if num:n = float(num)if op == '+': stack.append(n)elif op == '-': stack.append(-n)elif op == '*': stack[-1] *= nelif op == '/': stack[-1] /= nnum = ''op = chreturn sum(stack)def counting(a):string = a.split("*")for i in range(len(string)):string[i] = str(c(string[i]))answer = c("*".join(string))return answerwhile '(' in countlist:for i in range(len(countlist)):if countlist[i] == '(':head = i-1if countlist[i] == ')':end = i+1breakcount = countlist[head:end]sliceCount = count[2:len(count)-1]sliceCountList = sliceCount.split(",")for i in range(len(sliceCountList)):if ("*" in sliceCountList[i]) or ("+" in sliceCountList[i]):sliceCountList[i] = counting(sliceCountList[i])else:sliceCountList[i] = float(sliceCountList[i])answer = max(sliceCountList) - min(sliceCountList)countlist = countlist.replace(count,str(answer))print(int(c(countlist)))
看一下題目標題:先加後乘與函數
很明顯是要先加法再乘法,並且只有這兩種基本運算
而且最後都要輸出整數,sliceCountList[i] = float(sliceCountList[i])
可以直接用int,過程也不用判斷小數
還有ZJ其實有方法繞過eval檢測