一个代表二维表格的类(面向对象)

一个代表二维表格的类(面向对象)


要求

1.有标题属性

2.能求解每行每列的和、均值、最大值、最小值、标准差的行为


分析问题

注:类名满足大驼峰命名法,即每个单词首字母大写,单词与单词之间没有下划线,并且应该避免和系统命名类似的命名。

有标题属性

class Form:
        def __init__(self,title):
                self.title=title
                self.rows=[]

首先我们定义一个 ‘Form’ 的类

拥有 ‘title’ 标题的属性

作为一个表格,还需要表格属性,这里我们把表格属性单独拿出来,不与标题一同进行输入。


接下来我们要对二维表格中的每列数据进行运算

在以上类的基础上我们先进行简单的求和运算

        def sum_column(self,columns):
                x=0
                for r in self.rows:
                        x += r[columns]
                return x

在这里 columns 代表列索引,注意索引是从0开始的哦!

对于一个二维列表来说

                for r in self.rows:

这句话的含义实际上是r对于rows中的每个子列表的一个for循环

所以r代表rows中的每行,作为一个列表

所以在下一步中只需要进行一次索引

                        x += r[columns]

例如columns=1,那么第一次循环中,得到的 r[columns] 就代表第1行第2列的元素

那么求和我们就搞定了


解决问题

接下来的同理,我们在此基础上把后面的运算全部搞定,再加一点点细节 不是

就得到了这样的结果

class Form:
        def __init__(self,title):
                self.title=title
                self.rows=[]
        def sum_column(self,columns):
                x=0
                for r in self.rows:
                        x += r[columns]
                return x
        def avg_column(self,columns):
                return self.sum_column(columns)/len(self.rows)
        def max_column(self,columns):
                x = self.rows[0][columns]
                for r in self.rows:
                        if r[columns] > x:
                                x = r[columns]
                return x
        def min_column(self,columns):
                x = self.rows[0][columns]
                for r in self.rows:
                        if r[columns] < x:
                                x = r[columns]
                return x
        def std_column(self,columns):
                x=0
                for r in self.rows:
                        x += (r[columns]-self.avg_column(columns))**2
                return (x/len(self.rows))**(1/2)
        def sum_index(self,index):
                n = len(self.rows[0])
                x = 0
                for i in range(0,n):
                        x += self.rows[index][i]
                return x
        def avg_index(self,index):
                return self.sum_index(index)/len(self.rows[0])
        def max_index(self,index):
                x = self.rows[index][0]
                n = len(self.rows[0])
                for i in range(0,n):
                        if self.rows[index][i] > x:
                                x = self.rows[index][i]
                return x
        def min_index(self,index):
                x = self.rows[index][0]
                n = len(self.rows[0])
                for i in range(0,n):
                        if self.rows[index][i] < x:
                                x = self.rows[index][i]
                return x
        def std_index(self,index):
                x = 0
                n = len(self.rows[0])
                for i in range(0,n):
                        x += (self.rows[index][i]-self.avg_index(index))**2
                return (x/n)**(1/2)

z = Form('a')
z.rows = [[1,2,3,4],[4,5,6,7],[7,8,9,0]]
columns = int(input('现在有%d列,你想看第几列的信息?\n'%(len(z.rows[0]))))-1
print('第%d列和:'%(columns+1),z.sum_column(columns))
print('第%d列平均值:'%(columns+1),z.avg_column(columns))
print('第%d列最大值:'%(columns+1),z.max_column(columns))
print('第%d列最小值:'%(columns+1),z.min_column(columns))
print('第%d列标准差:'%(columns+1),z.std_column(columns))
index = int(input('现在有%d行,你想看第几行的信息?\n'%(len(z.rows))))-1
print('第%d行和:'%(index+1),z.sum_index(index))
print('第%d行平均值:'%(index+1),z.avg_index(index))
print('第%d行最大值:'%(index+1),z.max_index(index))
print('第%d行最小值:'%(index+1),z.min_index(index))
print('第%d行标准差:'%(index+1),z.std_index(index))              

在此进行一些说明

index 代表行索引

columns 代表列索引

得到的输出样式是这样的

现在有4列,你想看第几列的信息?
33列和: 183列平均值: 6.03列最大值: 93列最小值: 33列标准差: 2.449489742783178
现在有3行,你想看第几行的信息?
33行和: 243行平均值: 6.03行最大值: 93行最小值: 03行标准差: 3.5355339059327378

结束

对于这样的结果我觉得还可以,希望能帮助大家加深对于二维列表的理解
一家之言,如有疏漏请指出,感谢各位观看

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

现闻NowTech

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值