<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                已經學習了函數的基本知識,現在練習練習。完成下面練習的原則: 1. 請讀者先根據自己的設想寫下代碼,然后運行調試,檢查得到的結果是否正確 2. 我也給出參考代碼,但是,參考代碼并不是最終結果 3. 讀者可以在上述基礎上對代碼進行完善 4. 如果讀者愿意,可以將代碼提交到github上,或者到我的QQ群(群號:26913719)中跟大家分享討論 ## [](https://github.com/qiwsir/StarterLearningPython/blob/master/205.md#解一元二次方程)解一元二次方程 解一元二次方程,是初中數學中的基本知識,一般來講解法有:公式法、因式分解法等。讀者可以根據自己的理解,寫一段求解一元二次方程的程序。 最簡單的思路就是用公式法求解,這是普適法則(普世法則?普適是否等同于普世?)。 > 古巴比倫留下的陶片顯示,在大約公元前2000年(2000 BC)古巴比倫的數學家就能解一元二次方程了。在大約公元前480年,中國人已經使用配方法求得了二次方程的正根,但是并沒有提出通用的求解方法。公元前300年左右,歐幾里得提出了一種更抽象的幾何方法求解二次方程。 > > 7世紀印度的婆羅摩笈多(Brahmagupta)是第一位懂得用使用代數方程,它同時容許有正負數的根。 > > 11世紀阿拉伯的花拉子密 獨立地發展了一套公式以求方程的正數解。亞伯拉罕·巴希亞(亦以拉丁文名字薩瓦索達著稱)在他的著作Liber embadorum中,首次將完整的一元二次方程解法傳入歐洲。(源自《維基百科》) 參考代碼: ~~~ #!/usr/bin/env python # coding=utf-8 """ solving a quadratic equation """ from __future__ import division import math def quadratic_equation(a,b,c): delta = b*b - 4*a*c if delta<0: return False elif delta==0: return -(b/(2*a)) else: sqrt_delta = math.sqrt(delta) x1 = (-b + sqrt_delta)/(2*a) x2 = (-b - sqrt_delta)/(2*a) return x1, x2 if __name__ == "__main__": print "a quadratic equation: x^2 + 2x + 1 = 0" coefficients = (1, 2, 1) roots = quadratic_equation(*coefficients) if roots: print "the result is:",roots else: print "this equation has no solution." ~~~ 保存為20501.py,并運行之: ~~~ $ python 20501.py a quadratic equation: x^2 + 2x + 1 = 0 the result is: -1.0 ~~~ 能夠正常運行,求解方程。 但是,如果再認真思考,發現上述代碼是有很大改進空間的。至少我發現: * 如果不小心將第一個系數(a)的值輸入了0,程序肯定會報錯。如何避免之?要記住,任何人的輸入都是不可靠的。 * 結果貌似只能是小數,這在某些情況下是近似值,能不能得到以分數形式表示的精確結果呢? * 復數,python是可以表示復數的,如果delta<0,是不是寫成復數更好,畢竟我是學過高中數學的。 讀者是否還有其它改進呢?你能不能進行改進,然后跟我和其他朋友一起來分享你的成就呢? 至少要完成上述改進,可能需要其它的有關python知識,甚至于前面沒有介紹。這都不要緊,掌握了基本知識之后,在編程的過程中,就要不斷發揮google的優勢,讓她幫助你找尋完成任務的工具。 > python是一個開發的語言,很多大牛人都寫了一些工具,讓別人使用,減輕了后人的勞動負擔。這就是所謂的第三方模塊。雖然python中已經有一些“自帶電池”,即默認安裝的,比如上面程序中用到的math,但是我們還嫌不夠。于是又很多第三方的模塊來專門解決某個問題。比如這個解方程問題,就可以使用SymPy([www.sympy.org)來解決,當然NumPy也是非常強悍的工具。](http://www.sympy.org%29%E6%9D%A5%E8%A7%A3%E5%86%B3%EF%BC%8C%E5%BD%93%E7%84%B6numpy%E4%B9%9F%E6%98%AF%E9%9D%9E%E5%B8%B8%E5%BC%BA%E6%82%8D%E7%9A%84%E5%B7%A5%E5%85%B7%E3%80%82/) ## [](https://github.com/qiwsir/StarterLearningPython/blob/master/205.md#統計考試成績)統計考試成績 每次考試之后,教師都要統計考試成績,一般包括:平均分,對所有人按成績從高到低排隊,誰成績最好,誰成績最差。還有其它的統計項,暫且不做了。只統計這幾項吧。下面的任務就是讀者轉動腦筋,思考如何用程序實現上面的統計。為了簡化,以字典形式表示考試成績記錄,例如:`{"zhangsan":90, "lisi":78, "wangermazi":39}`,當然,也許不止這三項,可能還有,每個老師所處理的內容稍有不同,因此字典里的鍵值對也不一樣。 怎么做? 有幾種可能要考慮到: * 最高分或者最低分,可能有人并列。 * 要實現不同長度的字典作為輸入值。 * 輸出結果中,除了平均分,其它的都要有姓名和分數兩項,否則都匿名了,怎么刺激學渣,表揚學霸呢? 不管你是學渣還是學霸,都能學好python。請思考后敲代碼調試你的程序,調試之后再閱讀下文。 參考代碼: ~~~ #!/usr/bin/env python # coding=utf-8 """ 統計考試成績 """ from __future__ import division def average_score(scores): """ 統計平均分. """ score_values = scores.values() sum_scores = sum(score_values) average = sum_scores/len(score_values) return average def sorted_score(scores): """ 對成績從高到低排隊. """ score_lst = [(scores[k],k) for k in scores] sort_lst = sorted(score_lst, reverse=True) return [(i[1], i[0]) for i in sort_lst] def max_score(scores): """ 成績最高的姓名和分數. """ lst = sorted_score(scores) #引用分數排序的函數sorted_score max_score = lst[0][1] return [(i[0],i[1]) for i in lst if i[1]==max_score] def min_score(scores): """ 成績最低的姓名和分數. """ lst = sorted_score(scores) min_score = lst[len(lst)-1][1] return [(i[0],i[1]) for i in lst if i[1]==min_score] if __name__ == "__main__": examine_scores = {"google":98, "facebook":99, "baidu":52, "alibaba":80, "yahoo":49, "IBM":70, "android":76, "apple":99, "amazon":99} ave = average_score(examine_scores) print "the average score is: ",ave #平均分 sor = sorted_score(examine_scores) print "list of the scores: ",sor #成績表 xueba = max_score(examine_scores) print "Xueba is: ",xueba #學霸們 xuezha = min_score(examine_scores) print "Xuzha is: ",xuezha #學渣們 ~~~ 保存為20502.py,然后運行: ~~~ $ python 20502.py the average score is: 80.2222222222 list of the scores: [('facebook', 99), ('apple', 99), ('amazon', 99), ('google', 98), ('alibaba', 80), ('android', 76), ('IBM', 70), ('baidu', 52), ('yahoo', 49)] Xueba is: [('facebook', 99), ('apple', 99), ('amazon', 99)] Xuzha is: [('yahoo', 49)] ~~~ 貌似結果還不錯。不過,還有改進余地,看看現實,就感覺不怎么友好了。看官能不能優化一下?當然,里面的函數也不一定是最好的方法,你也可以修改優化。期盼能夠在我上面公布的途徑中交流一二。 ## [](https://github.com/qiwsir/StarterLearningPython/blob/master/205.md#找素數)找素數 這是一個比較常見的題目。我們姑且將范圍縮小一下,找出100以內的素數吧。 還是按照前面的管理,讀者先做,然后我提供參考代碼,然后自行優化。 > 質數(Prime number),又稱素數,指在大於1的自然數中,除了1和此整數自身外,無法被其他自然數整除的數(也可定義為只有1和本身兩個因數的數)。 > > 哥德巴赫猜想是數論中存在最久的未解問題之一。這個猜想最早出現在1742年普魯士人克里斯蒂安·哥德巴赫與瑞士數學家萊昂哈德·歐拉的通信中。用現代的數學語言,哥德巴赫猜想可以陳述為:“任一大於2的偶數,都可表示成兩個質數之和。”。哥德巴赫猜想在提出后的很長一段時間內毫無進展,直到二十世紀二十年代,數學家從組合數學與解析數論兩方面分別提出了解決的思路,并在其后的半個世紀里取得了一系列突破。目前最好的結果是陳景潤在1973年發表的陳氏定理(也被稱為“1+2”)。(源自《維基百科》) 對這個練習,我的思路是先做一個函數,用它來判斷某個整數是否是素數。然后循環即可。參考代碼: ~~~ #!/usr/bin/env python # coding=utf-8 """ 尋找素數 """ import math def is_prime(n): """ 判斷一個數是否是素數 """ if n <= 1: return False for i in range(2, int(math.sqrt(n) + 1)): if n % i == 0: return False return True if __name__ == "__main__": primes = [i for i in range(2,100) if is_prime(i)] #從2開始,因為1顯然不是質數 print primes ~~~ 代碼保存后運行: ~~~ $ python 20503.py [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] ~~~ 打印出了100以內的質數。 還是前面的觀點,這個程序你或許也發現了需要進一步優化的地方,那就太好了。另外,關于判斷質數的方法,還有好多種,讀者可以自己創造或者網上搜索一些,拓展思路。 ## [](https://github.com/qiwsir/StarterLearningPython/blob/master/205.md#編寫函數的注意事項)編寫函數的注意事項 編寫函數,在開發實踐中是非常必要和常見的,一般情況,你寫的函數應該是: 1. 盡量不要使用全局變量。 2. 如果參數是可變類型數據,在函數內,不要修改它。 3. 每個函數的功能和目標要單純,不要試圖一個函數做很多事情。 4. 函數的代碼行數盡量少。 5. 函數的獨立性越強越好,不要跟其它的外部東西產生關聯。
                  <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>

                              哎呀哎呀视频在线观看