D


私信TA

用户名:ALS1111

访问量:22116

签 名:

等  级
排  名 55
经  验 11377
参赛次数 0
文章发表 132
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

python-乘积最大
浏览:223
python-回文数
浏览:206
python-摆花摆花
浏览:143

解题思路:
递归调用。

①首先对表格中所有值转化为浮点型,当转化不成功是,我们知道这处表格是一个字符串。然后调用字符串处理函数

②调用字符串处理函数的过程和①类似,先将数字转化成浮点型,然后进行计算,转化不成功时,我们知道此处又是一个字符串,那么再次调用字符串处理函数,这样我们就能够按照顺序计算出字符串的值,最后进行输出。


这个问题的难点在于,表格中有字符串时,我们并不知道字符串的调用顺序,拿题目中的例子来说,设二维数组的名字为E

1 SUM(2,1:3,1)
2 AVG(1,1:1,2)
SUM(1,1:2,1) STD(1,1:2,2)

这里按照从上到下,从左到右将每一个表格转化为浮点数。

当我们将E[1][1]转化为浮点数时,成功。

当将E[1][2]转化为浮点数时,可知,转化不成功,然后我们对其进行处理计算。

处理E[2][1]时,成功。

当处理到E[3][1]时,我们发现又是一个字符串,此时我们递归调用对这个字符串进行处理。

E[1][1]和E[2][1]都能顺利的转化成浮点数。那么我们就计算出了E[3][1]。

从而我们也计算出了E[1][2]。

整体思路大概就是这样。


注意事项:

注意计算字符串时的第一行第一列在数组中是E[0][0]......

参考代码:

from math import sqrt  
  
def Sum(x1,y1,x2,y2):  
    global E  
    sum = 0  
    for i in range(x1-1,x2):  
        for j in range(y1-1,y2):  
            try:  
                E[i][j] = float(E[i][j])  #转化为浮点数
            except:  
                x1 = int(E[i][j][4])  
                y1 = int(E[i][j][6])  
                x2 = int(E[i][j][8])  
                y2 = int(E[i][j][10])  
  
                if E[i][j][:3] == 'SUM':  #对不同的公式进行处理
                    E[i][j] = Sum(x1,y1,x2,y2)  
                elif E[i][j][:3] == 'AVG':  
                    E[i][j] = Sum(x1,y1,x2,y2)/((x2-x1+1)*(y2-y1+1))  
                elif E[i][j][:3] == 'STD':  
                    ave = Sum(x1,y1,x2,y2)/((x2-x1+1)*(y2-y1+1))  
                    sum = 0  
                    for i in (x1,x2+1):  
                        for j in range(y1,y2+1):  
                            sum = sum + (E[i][j]-ave)*(E[i][j]-ave)  
                    E[i][j] = sqrt(sum/((x2-x1+1)*(y2-y1+1)))               
            sum = sum + float(E[i][j])    #进行计算
      
    return sum  
  
def f(n,m):  
    global E  
    for i in range(n):  
        for j in range(m):  
            try:  
                E[i][j] = float(E[i][j])  #转化为浮点数
            except:  
                x1 = int(E[i][j][4])  
                y1 = int(E[i][j][6])  
                x2 = int(E[i][j][8])  
                y2 = int(E[i][j][10])  
  
                if E[i][j][:3] == 'SUM':  #对不同的公式进行处理
                    E[i][j] = Sum(x1,y1,x2,y2)  
                elif E[i][j][:3] == 'AVG':  
                    E[i][j] = Sum(x1,y1,x2,y2)/((x2-x1+1)*(y2-y1+1))  
                elif E[i][j][:3] == 'STD':  
                    ave = Sum(x1,y1,x2,y2)/((x2-x1+1)*(y2-y1+1))  
                    sum = 0  
                    for k in range(x1-1,x2):  
                        for l in range(y1-1,y2):  
                            sum = sum + (E[k][l]-ave)*(E[k][l]-ave)  
                    E[i][j] = sqrt(sum/((x2-x1+1)*(y2-y1+1)))   
  
    for i in range(n):  
        for j in range(m):  
            print('%.2f' % E[i][j],end=' ')  
        print()  
  
if __name__ == '__main__':  
   n,m = map(int,input().strip().split())  
   E = [[str(j) for j in input().strip().split()] for i in range(n)]  
   f(n,m)


 

0.0分

2 人评分

  评论区

  • «
  • »