亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

按照老師的程序敲出來,運行結果不一樣

import itertools

import re

operator = ['+','-','*','/']


format = ['((%d%s%d)%s%d)%s%d',

? ? ? ? ? '(%d%s%d)%s(%d%s%d)',

? ? ? ? ? '(%d%s(%d%s%d))%s%d',

? ? ? ? ? '%d%s((%d%s%d)%s%d)',

? ? ? ? ? '%d%s(%d%s(%d%s%d))']


def combine (numlist,oplist=operator):

? ? expre=[]??

? ? for ii in list(itertools.permutations(numlist,len(numlist))):

? ? ? ? for jj in list(itertools.product(oplist,repeat=3)):

? ? ? ? ? ? expre.append(Turn(list(ii),list(jj)))

? ? return expre? ?


def Turn(num,letter):

? ? result=[]

? ? for i in range(len(num)):

? ? ? ? result.append(num[i])??

? ? ? ? try:? ? ? ? ? ? ? ? ??

? ? ? ? ? ? result.append(letter[i])?

? ? ? ? except IndexError:

? ? ? ? ? ? pass? ?

? ? return result


def GetExpression(numlist,target,form=format):

? ? expre=set()

? ? exall=combine(numlist)

? ? for ex in exall:

? ? ? ? for fm in form:

? ? ? ? ? ? try:

? ? ? ? ? ? ? ? exp=str(fm)%tuple(ex)

? ? ? ? ? ? ? ? if eval(exp)==target:

? ? ? ? ? ? ? ? ? ? expre.add(exp)

? ? ? ? ? ? except ZeroDivisionError:

? ? ? ? ? ? ? ? pass

? ? return expre


def NumOperator(str):

? ? save=[]

? ? start=''

? ? for sr in str:

? ? ? ? try:

? ? ? ? ? ? int(sr)

? ? ? ? ? ? start+=sr

? ? ? ? except ValueError:

? ? ? ? ? ? if start=='':

? ? ? ? ? ? ? ? save.append(sr)

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? save.append(start)

? ? ? ? ? ? ? ? save.append(sr)

? ? ? ? ? ? start=''

? ? if start!='':

? ? ? ? save.append(start)

? ? return save? ??


def Simple(exprelist):

? ? simple=[]? ??

? ? Last=[]??

? ? for ex in exprelist:

? ? ? ? sr=ex

? ? ? ? p=re.findall("\([^()+]\)",ex)

? ? ? ? for ii in p:

? ? ? ? ? ? ex=ex.replace(ii,str(eval(ii)))

? ? ? ? simp=NumOperator(ex)

? ? ? ? if sorted(simp) not in simple:

? ? ? ? ? ? simple.append(sorted(simp))

? ? ? ? ? ? Last.append(sr)

? ? return Last

? ??

for j in list(Simple(GetExpression([11,3,5,1],24))):

? ? print ('%s = %s'% (j,eval(j)))

>>> (11-5)*(1+3) = 24

為什么和老師一樣的代碼,但運行結果卻只有一個???求老師解答!??!

正在回答

2 回答

def NumOperator(str):

? ? save=[]

? ? start=''

? ? for sr in str:

? ? ? ? try:

? ? ? ? ? ? int(sr)

? ? ? ? ? ? start+=sr

? ? ? ? except ValueError:

? ? ? ? ? ? if start=='':

? ? ? ? ? ? ? ? save.append(sr)

? ? ? ? ? ? else:

? ? ? ? ? ? ? ? save.append(start)

? ? ? ? ? ? ? ? save.append(sr)

? ? ? ? ? ? start=''

? ? if start!='':

? ? ? ? save.append(start)

? ? return save? ?

請問這個NumOperator方法將表達式4*6轉化為字符集的['4','6','*']的原理是什么?。砍鯇W者求大神解答!

0 回復 有任何疑惑可以回復我~
#1

風落幾番

實際上是對每一個字符將它強轉成int,遇到可以轉的,就變成數字,不能轉的ValueError的就是符號,把符號前當作數字存好,把符號單獨放好。仔細想一下嘿嘿
2020-03-05 回復 有任何疑惑可以回復我~

?p=re.findall("\([^()+]\)",ex)應改為?p=re.findall("\([^()]+\)",ex),太粗心了?

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

按照老師的程序敲出來,運行結果不一樣

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號