一個代表二維表格的類(面向物件)
要求
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列,你想看第幾列的資訊?
3
第3列和: 18
第3列平均值: 6.0
第3列最大值: 9
第3列最小值: 3
第3列標準差: 2.449489742783178
現在有3行,你想看第幾行的資訊?
3
第3行和: 24
第3行平均值: 6.0
第3行最大值: 9
第3行最小值: 0
第3行標準差: 3.5355339059327378
結束
對于這樣的結果我覺得還可以,希望能幫助大家加深對于二維串列的理解
一家之言,如有疏漏請指出,感謝各位觀看
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/272249.html
標籤:python
