python求两数之和的命令_数学建模:科学计算Python2小时-Python基础
這一部分主要面向數模活動中的python基礎知識進行討論
作者
系列文章(科學計算Python2小時)目錄:李似:科學計算Python2小時-前言與目錄?zhuanlan.zhihu.com
首先要說明的是,目前常用的Python版本包括Python2和Python3,二者有一些語法和一些包是互不兼容的。部分Python的拓展庫已經放棄了對Python2的支持所以本分文檔推薦使用Python3作為解釋器。當然對于數學建模而言,Python2也是一個可選的方案,但是可能會在使用過程中遇到一些問題,如果你是Python2的忠實擁護者,那么使用Python2來完成數學建模工作,也未嘗不可。
接下來我們可能需要理清幾個概念解釋器,文本編輯器,IDE和包管理工具
解釋器
一般我們編寫Python源程序時,會得到一個后綴名為py的文件,當你想要運行這份代碼的時候,操作系統是不能夠認識py這份文件怎怎么樣工作的,這時就需要一個解釋器,將這份文件翻譯成機器可以識別的機器碼。
通常我們在網絡上看到一些教程說,我們可以直接去Python的官方網站上下載某一個版本的Python,并將它們安裝在我們自己的電腦上,那么這里我們所安裝的Python其實就是解釋器。
如果說的更明確一些,他應該被稱為CPython解釋器,一個用C語言寫的Python解釋器,當我們在命令行中運行下面這行代碼的時候,其實就是它在執行作用
python demo.py
IPython是另外一種Python解釋器,與其說它跟CPython上有什么不同,還不如說它只是在CPython的交互方式上進行了一些改進,IPython使用代碼塊的方式展現和運行代碼。
CPython使用>>>做命令提示符,而IPython使用IN[num]作為命令提示符,從這里可以就可以很容易的把二者分辨開.
比如在命令行中進行Python或者在pycharm這類軟件中運行Python使用的都是CPython解釋器
而在jupyter notebook或者spyder這樣的軟件中運行,用的都是IPython解釋器
二者并沒有什么明顯的區別,當我們已經完成了功能的測試時,我們可以使用CPython來進行大規模的計算,到我們測試功能時,我們可以使用IPython來進行交互式的代碼書寫。如果要進行一些展示性的或者教程性的代碼書寫的時候,使用IPython一般是比較友好的一種展示方式。
文本編輯器
就像電腦中最常用的記事本軟件一樣,文本編輯器其實就就是用來敲代碼的一個界面而已但是有一些文本編輯器,集成了代碼補全、代碼高亮、縮管理之類的插件,所以在代碼的編寫中會用的比較順手。
比如記事本,Vim,VSCode都是常用的文本編輯器
通常使用純文本編輯器編輯好的程序,需要在命令行中調用對應的文件來運行它
IDE
集成開發環境(IDE,Integrated Development Environment )是用于提供程序開發環境的應用程序,使用集成開發環境的好處在于你可以在一處完成代碼測試編寫到運行的所有步驟,通常在側邊欄它會有文件夾的管理,在占程序空間的大塊的區域,會有代碼編寫的位置,一些菜單欄會提供給你運行程序和顯示程序運行結果的按鍵和區域。
甚至相當一部分IDE還會貼心的給你安裝好Python的運行環境。(我說的就是Anaconda)
諸如 Anaconda,pycharm,spyder,VS 都屬于集成開發環境
包管理工具
原生的Python其實并沒有什么特別強大的功能,許多常用的科學計算軟件包或者繪圖軟件包比如我們熟知的numpy或者matplotlib,都是獨立出來的程序庫,那怎么樣把他們導入到我們的程序中,并且為我們所用呢?這時候就需要包管理工具,常用的包管理工具有pip和conda
一般情況下再安裝好Python的解釋器之后,pip就是默認的包管理工具,你可以在命令行中使用pip install來安裝某些你想要的包。這時候 Pip會從網絡上把對應的軟件包下載下來,并且安裝到你的電腦上,但是Python默認的下載源在國外,所以下載速度會比較慢,這里推薦使用清華大學的鏡像源,來下載你所需要的軟件包。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple [軟件包名字]
許多情況下,當你iimport某個包時它會報錯,那么問題就在于這個包你根本沒有安裝和下載過,那么使用上面這一條代碼在命令行中運行,基本就可以解決問題。
Hello world
等你完成安裝Python環境以及相關軟件的一些工作之后,就可以開始正式的踏入Python的世界了,那么其實任何編程語言的第1步都是一樣的,打印出hello world。嘗試運行以下這行代碼
print("Hello wold")
Hello wold
那么接下來將這個部分,我們將開始進行Python科學計算的一些基本常識的了解
在Python中行注釋的用法是在當前行最前面加一個井號 #,而多行數式是用三個單引號或者三個雙引號將代碼塊框起來
而在大部分的文本編輯器或者IDE中如果你想在很多行前面都加一個井號來做單行注釋,那么對應的快捷鍵是Ctrl+/,(這個超級好用)
# 這是一行注釋
# 這也是一行注釋
# 這還是一行注釋
這是一行忘加的注釋符號的注釋
那么就可以清晰的看出來,我們引入了一個錯誤,他表示這一個變量沒有被定義.
在代碼的編寫過程中,你可能會遇到很多這樣類似的問題,善用搜索引擎之前需要先讀一下他到底是說了些什么,就我們這點英語水平,還是能讀懂他的報錯的很多報錯都已經將問題出現原因講得很清晰了。
運算與數據類型
在Python中一個變量,如果你想要使用它,其實你并不用像C一樣首先去定義,直接用它來計算就好了。
數據類型
a = 2
b = 3
c = 4
str_ = "a,b,c"
strWithFormat = "{},{},{}".format(a,b,c)
list_ = [a,b,c]
tuple_ = (a,b,c)
map_ = {"a":a,"b":b,"c":c}
print("字符串:\t",str_)
print("帶占位符的字符串:\t",strWithFormat)
print("列表:\t",list_)
print("元組:\t",tuple_)
print("字典:\t",map_)
#更多關于數據類型:Python 變量類型 | 菜鳥教程
字符串: a,b,c
帶占位符的字符串: 2,3,4
列表: [2, 3, 4]
元組: (2, 3, 4)
字典: {'a': 2, 'b': 3, 'c': 4}
運算
# 加減乘除
print(a+b)
print(a-b)
print(a*b)
print(a/b)
# 對結果四舍五入
print(round(a/b))
# 取余
print(a%b)
#更多關于運算:Python3 運算符 | 菜鳥教程
5
-1
6
0.6666666666666666
1
2
部分數學函數
判斷與循環
balls = ['white','white','white','otherColor','white','white','otherColor','otherColor','otherColor','white','white','otherColor']
numOfWhiteColorBalls = 0
numOfOtherColorBalls = 0
for ball in balls:
if ball == 'white':
numOfWhiteColorBalls += 1
else :
numOfOtherColorBalls += 1
if numOfWhiteColorBalls == 0:
print("There has no white ball in all {} balls".format(numOfWhiteColorBalls+numOfOtherColorBalls))
elif numOfWhiteColorBalls == 1:
print("There is 1 white ball in all {} balls".format(numOfWhiteColorBalls+numOfOtherColorBalls))
else :
print("There are {} white balls in all {} balls".format(numOfWhiteColorBalls,numOfWhiteColorBalls+numOfOtherColorBalls))
#更多關于判斷和循環語句:
# Python 條件語句 | 菜鳥教程
# Python 循環語句 | 菜鳥教程
There are 7 white balls in all 12 balls
這段代碼運用到了相當多的知識點和需要討論的部分。
首先你所有的變量都應該有意義,可以使用下劃線命名法或者駝峰命名法來對你的變量進行命名。
其次for循環可以對相當多的數據類型進行迭代,其中列表就是一個有迭代能力的數據類型,代碼中ball在循環中指的是每一個球的顏色
在Python中沒有像C語言中i++這樣的變量自增方法,你可以使用+= 1代替它
Python中沒有像C語言中那樣使用分號來作為每一行代碼的結尾,但是Python對于縮進的要求相當嚴格,像很多初學者常犯的問題都是出現在縮進上面
下面這一幅動圖是在循環和判斷中的一個流程
函數
函數指的是一段可以執行特定功能的代碼段,一般又稱為子程序。函數存在的意義是可以將大量的重復性工作打包成一個固定的流程,當你給這個流程一些符合條件的輸入時,在這個程序里面進行計算之后返回給你計算的結果。
函數之間可以相互調用,這個特性也促成了一些算法的實現,比如遞歸。
那在數學建模這種使用程序代碼來幫助我們運算的應用背景下,一般都是我們有一系列的數據,需要經過相同或者類似的處理,那這個時候我們就把他們一個一個送進寫好的函數中,再去接收他返回回來的輸出,這樣就可以起到批次計算的效果。
接下來我們把上一個例子用函數來重新寫一遍。
def countSelectColorBalls(balls,selectColor):
numOfSelectColorBalls = 0
numOfOtherColorBalls = 0
for ball in balls:
if ball == selectColor:
numOfSelectColorBalls += 1
else :
numOfOtherColorBalls += 1
if numOfSelectColorBalls == 0:
print("There has no {} ball in all {} balls".format(selectColor,numOfSelectColorBalls+numOfOtherColorBalls))
elif numOfSelectColorBalls == 1:
print("There is 1 {} ball in all {} balls".format(selectColor,numOfSelectColorBalls+numOfOtherColorBalls))
else :
print("There are {} {} balls in all {} balls".format(numOfSelectColorBalls,selectColor,numOfSelectColorBalls+numOfOtherColorBalls))
return {selectColor:numOfSelectColorBalls}
balls = ['white','white','white','yellow','white','white','yellow','red','yellow','white','red','red','blue']
ballColorList = []
ballColorList.append(countSelectColorBalls(balls,"white"))
ballColorList.append(countSelectColorBalls(balls,"black"))
ballColorList.append(countSelectColorBalls(balls,"yellow"))
ballColorList.append(countSelectColorBalls(balls,"red"))
ballColorList.append(countSelectColorBalls(balls,"blue"))
print(ballColorList)
#更多關于函數:
# https://www.runoob.com/python3/python3-function.html
There are 6 white balls in all 13 balls There has no black ball in all 13 balls There are 3 yellow balls in all 13 balls There are 3 red balls in all 13 balls There is 1 blue ball in all 13 balls [{'white': 6}, {'black': 0}, {'yellow': 3}, {'red': 3}, {'blue': 1}]
在這個例子中,我們把主要的運算部分包裝成了一個叫做countSelectColorBalls的函數,這個函數有兩個輸入參數,返回值是顏色和對應該顏色的球的個數,其外還打印了一些輸出在屏幕上.兩個輸入參數分別是balls和selectColor,代表了球的列表和被選擇的顏色。返回值是一個以所選顏色為key,以所選顏色球的個數為value的字典,在主程序之外使用一個列表接收返回值,append指的是將參數接到列表末端。
之后我們將上一個例子中對白球的計數器換成了對所選顏色的球的計數器,使它對其他的顏色也同樣具有適配性。
這里我們看到仍然有幾行代碼是高度重復的,那么我們可以用下面的例子來替代它。
ballColorList = []
for color in set(balls):
ballColorList.append(countSelectColorBalls(balls,color))
print(ballColorList)
There are 3 yellow balls in all 13 balls There are 6 white balls in all 13 balls There are 3 red balls in all 13 balls There is 1 blue ball in all 13 balls [{'yellow': 3}, {'white': 6}, {'red': 3}, {'blue': 1}]
set是一種叫做集合的數據類型,它的特點就是集合內的元素是不重復的.那么對一個列表取集合,就能夠得到里面不重復的所有元素。在將每一個顏色作為函數的輸入值進行查詢和運算。就能夠得到相同的效果。
日期和時間 這里有一個計算機中非常常見的關于時間的概念叫做時間戳,它指的是從1970年1月1日零時開始的時間秒數或者毫秒數.
import time # 引入time模塊
ticks = time.time()
print("當前時間戳為:", ticks)
#更多關于日期和時間:
# https://www.runoob.com/python3/python3-date-time.html
當前時間戳為: 1611793367.7136235
時間戳基本上就是所有關于時間的運算的基礎,包括計算時間差值轉換成日期,或者轉換成其他什么別的格式。
當然在Python中還包括了一些其他關于時間的操作,不用我們自己從時間戳開始轉換。
這里我們只做一些比較基本的示例,更多的更具體的使用方法,可以去參考其他的教程。
為了方便后面的運算,我們先上兩個函數。
# 輸出指定范圍內的所有質數算法1
def primeList_1(numMax):
primes = []
for num in range(2,numMax):
for m in range(2,num):
if num % m == 0:
break
else:
primes.append(num)
return primes
# 輸出指定范圍內的所有質數算法2
def primeList_2(numMax):
primes = []
numsList = []
for i in range(numMax):
numsList.append(True)
for num in range(2,numMax):
addSum = num + num
while addSum < numMax :
numsList[addSum] = False
addSum += num
for i in range(2,numMax):
if numsList[i]:
primes.append(i)
return primes
# 計算程序運行時間
import time
ticks1 = time.time()
primeList_1(50000)
ticks2 = time.time()
print("時間差為:", ticks2-ticks1)
ticks1 = time.time()
primeList_2(50000)
ticks2 = time.time()
print("時間差為:", ticks2-ticks1)
時間差為: 6.9387428760528564 時間差為: 0.04651689529418945
其實這個時間差計算還挺簡單的,主要就是在代碼塊前面打一個時間戳,在代碼塊后面打一個時間戳把兩個時間戳做一下減法就可以了。
那么這里額外還要再說幾個比較有價值的點。
首先看函數primeList_1定義的第6行和第9行,這是一個for else結構 else在前面的for中break生效時會生效。
再有就是當我們寫程序時需要考慮城市的時間復雜度的問題,我們能看到上面的一端程序,第1種算法執行6-7秒,而第2種方法只需要執行0.04-0.06秒,效率差了100多倍,這就是一個很普通的計算質數的兩種方法,在其他的問題中也有類似的優化途徑,如果當你的循環達到了兩層或者三級以后,你就可能需要用一些方法來進行優化。
總結
以上是生活随笔為你收集整理的python求两数之和的命令_数学建模:科学计算Python2小时-Python基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: h5与小程序服务器如何辨别,小程序丨教你
- 下一篇: python处理时间和日期_python