<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 5.3.1 統計圖表 圖形的一個重要用途是為數據提供可視的表示,這在統計、匯總性質的應用程序中尤其 重要,因為匯總數據幾乎都可以利用圖形來改善表示。下面我們編寫一個簡單的統計匯總程 序,以演示圖形編程在數據可視化方面的應用。 假設某高校的老師在考試后需要根據學生的考試成績來分析試卷,以判斷試卷是偏難、 偏容易還是適中。難度適中的試卷應該導致正態分布的成績。為幫助老師完成試卷分析,我 們編寫一個統計匯總程序,其功能是:老師輸入考試分數(百分制),然后程序將分數換算 成等級制(分為 A、B、C、D、F 五等)并統計各等級分數的人數,最后畫一個餅圖來直觀 地給出各等級人數的比例。 程序規格 輸入:考試分數。 輸出:以餅圖表示的各分數段所占比例。 算法設計 本程序在算法上很簡單,屬于典型的 IPO(輸入-處理-輸出)模式。不過雖然算法很 簡單,但是在繪制圖形方面需要花費大量精力,因為繪圖涉及精確的坐標、形狀、顏色等細 節,還需要整個圖形畫面看上去整齊、勻稱、美觀。可以說,圖形編程中大量時間都花在了 這類“美工”任務之上。 首先,由用戶輸入每個學生的分數(百分制)。然后根據該分數所對應的等級去累加各 等級人數變量。輸入結束后,總人數和各等級人數就確定了。 其次,計算各分數等級人數占總人數的比例。 然后,根據比例繪制餅圖。在 Tkinter 編程中,這需要先創建窗口和畫布,然后利用畫 布的 create_arc()方法繪制代表五個等級的五個扇形。扇形的角度反映了各分數等級的 比例,扇形具有不同填充色以相互區分。為了顯示各扇形對應的等級,還需要繪制圖例。 最后,用戶通過餅圖各扇形的大小只能看出各分數等級所占的大致比例。精確的比例值 當然可以固定顯示在畫面中,不過我們采用另一種更有趣的設計:當用戶將鼠標指針移入某 個扇形中時,畫布上就顯示該扇形所代表的比例值。 以上步驟還需要進一步明確細節,最主要的就是窗口、畫布的大小和各圖形項的精確位 置等。通過用草圖等手段做一些計算和試驗,最終確定如圖 5.18 所示的設計: ![](https://box.kancloud.cn/2016-02-22_56cafce18aa6f.png) 圖 5.18 畫布圖形項設計 至此,可以寫出本程序的算法偽代碼。 ``` 算法: 用戶輸入考試分數 mark,并根據 mark 對應的等級累加各等級的人數 a、b、c、d、f; 創建窗口和大小為 300x200 的畫布; 計算各分數等級的比例(a/n 等),并據此確定每個扇形的起止角度(sA、eA 等); 繪制各個扇形; 繪制圖例; 為各扇形綁定“鼠標進入”事件,并定義事件處理函數(inPieA()等); 進入主事件循環。 ``` 代碼實現 從上面的算法很容易翻譯成 Python 代碼。程序 5.2 中所用到的知識都在前面介紹過, 只有“鼠標進入”事件的處理需要說明一下。 當鼠標指針移到某個圖形項上面時即發生事件"&lt;Enter&gt;",這時系統觸發所綁定的事 件處理函數(如 inPieA),這些函數的功能是計算該圖形項對應的比例值,然后顯示在畫 布上的指定位置。另外由于事件處理函數中需要引用畫布對象和各圖形項,所以我們將這些 函數的定義放在了 main()函數內部,以便它們能引用 main()中定義的變量,即 cv、 piepct、a、b、c、d、f 和 n。 【程序 5.2】piechart.py ``` from Tkinter import * def getMarks(): a,b,c,d,f = 0,0,0,0,0 mark = input("Enter a mark: ") while mark >= 0: if mark >= 90: a = a + 1 elif mark &gt;= 80: b = b + 1 elif mark &gt;= 70: c = c + 1 elif mark &gt;= 60: d = d + 1 else: f = f + 1 mark = input("Enter a mark: ") return a,b,c,d,f def main(): a,b,c,d,f = getMarks() win = Tk() cv = Canvas(win,width=300,height=200,bg="white") cv.pack() n = a+b+c+d+f eA,sA = 360.0*a/n,0 eB,sB = 360.0*b/n,eA eC,sC = 360.0*c/n,eA+eB eD,sD = 360.0*d/n,eA+eB+eC eF,sF = 360.0*f/n,eA+eB+eC+eD bb = (90,40,210,160) pieA = cv.create_arc(bb,start=sA,extent=eA,fill="yellow") pieB = cv.create_arc(bb,start=sB,extent=eB,fill="green") pieC = cv.create_arc(bb,start=sC,extent=eC,fill="black") pieD = cv.create_arc(bb,start=sD,extent=eD,fill="gray") pieF = cv.create_arc(bb,start=sF,extent=eF,fill="red") cv.create_rectangle(240,40,260,50,fill="yellow") cv.create_rectangle(240,40+24,260,50+24,fill="green") cv.create_rectangle(240,40+48,260,50+48,fill="black") cv.create_rectangle(240,40+72,260,50+72,fill="gray") cv.create_rectangle(240,40+96,260,50+96,fill="red") cv.create_text(270,40,text="A",anchor=N) cv.create_text(270,40+24,text="B",anchor=N) cv.create_text(270,40+48,text="C",anchor=N) cv.create_text(270,40+72,text="D",anchor=N) cv.create_text(270,40+96,text="F",anchor=N) piepct = cv.create_text(40,100,text="") def inPieA(event): pct = "%5.1f%%" % (100.0*a/n) cv.itemconfig(piepct,text=pct) def inPieB(event): pct = "%5.1f%%" % (100.0*b/n) cv.itemconfig(piepct,text=pct) def inPieC(event): pct = "%5.1f%%" % (100.0*c/n) cv.itemconfig(piepct,text=pct) def inPieD(event): pct = "%5.1f%%" % (100.0*d/n) cv.itemconfig(piepct,text=pct) def inPieF(event): pct = "%5.1f%%" % (100.0*f/n) cv.itemconfig(piepct,text=pct) cv.tag_bind(pieA,"&lt;Enter&gt;",inPieA) cv.tag_bind(pieB,"&lt;Enter&gt;",inPieB) cv.tag_bind(pieC,"&lt;Enter&gt;",inPieC) cv.tag_bind(pieD,"&lt;Enter&gt;",inPieD) cv.tag_bind(pieF,"&lt;Enter&gt;",inPieF) win.mainloop() main() ``` 程序 5.2 的一次運行結果如圖 5.19 所示。 ![](https://box.kancloud.cn/2016-02-22_56cafce19a1c1.png) 圖 5.19 程序 5.2 的一次執行結果
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看