自学python 编程基础知识_python学习-基础知识-1
1、計算機歷史
計算機使用高低電壓的兩種狀態來描述信息。計算機可以理解的只有二進制數據即010100011....,1個比特位可以表示的狀態只有2種,n個比特位可以表示的狀態有2的n次方種。
所以如果想要描述天氣狀態:天晴、下雨、刮風、下雪、霜凍,則需要使用3個比特位。
2、編程語言歷史
計算機只能理解二進制數據,二進制數據中蘊含了很多指令、操作、數據,計算機通過cpu直接運行二進制代碼執行不同的功能,二進制代碼被稱為機器語言。
但是機器語言(二進制代碼)對于人類而言可讀性太差、編寫太困難,所以人類需要使用適合自身的語言來編程以操作計算機。
一開始,人類將機器語言中的代碼進行分類、標記,把蘊含操作行為、蘊含數據的二進制代碼使用英語單詞標記,形成了匯編語言。匯編語言的模式是:操作行為+被操作數。
操作行為和被操作數都使用英語單詞代替了一串010101的二進制代碼,這樣人類只需要編寫匯編語言,再將匯編語言通過之前的映射關系轉換成二進制即可。
通過匯編語言,人類即可以方便的編寫代碼,又可以通過轉化得到對應的二進制代碼讓計算機運行。
但是,匯編語言依然可讀性較差、編寫也不是非常的方便,要實現一個簡單的功能需要非常多的匯編代碼,代碼冗余性依然很高。
于是,人類模仿匯編和二進制的對應關系,將高級語言和匯編又對應起來,這時候人類就只需要編寫高級語言,再通過編譯器將高級語言轉換成匯編語言或者直接轉換成二進制代碼。
高級語言的代碼非常接近人類的英語,所以使用起來很方便。
因語法規則、語義的不同,高級語言分為很多種,如:python,java、c、c++、JavaScript,ruby等等。
3、編譯型高級語言/解釋性高級語言
高級語言接近人類英語,編寫的代碼可讀性也很強,但是計算機是無法直接理解和執行源代碼的,因為計算機只認識二進制代碼,所以不論是哪一種高級語言,都需要將源代碼轉換成二進制代碼后才能被計算機執行。
在轉換過程中,有2種不同的情況:
1、編譯型
編譯型高級語言,在程序執行之前,需要提前將源代碼通過編譯器轉換成目標文件(二進制代碼),然后計算機直接執行目標文件。
優點:計算機執行效率高、速度快
缺點:
如果程序需要修改,必須修改源代碼并再次編譯,修改不方便
一旦編譯完成,目標文件就只能在當前操作系統和cpu架構上運行,無法在其他平臺使用,除非重新編譯
舉例:c、c++、c#
2、解釋型
解釋型高級語言,由解釋器實時讀取源代碼并編譯成二級制代碼交由計算機執行。
優點:
程序的修改直接操作源文件即可,修改方便
只要計算機安裝了對應平臺的解釋器,源代碼就可以被執行,即一份源代碼可以在不同平臺運行,平臺兼容性好
缺點:
因為需要實時編譯,所以運行效率低、速度較慢
需要一個匹配版本和平臺的解釋器與源代碼共同工作
舉例:python、java、ruby
4、python版本
python有2個相互不兼容的大版本,版本2最高是2.7,版本3截止20180603最高是3.6.5。版本2官方宣布將會維護到2020年,建議現在選擇版本3編碼。
5、python解釋器
解釋器也是一種程序,功能是將python源代碼翻譯成機器語言。解釋器可以使用多種語言編寫,有如下幾種:
cpython,官方發布的解釋器,使用c語言編寫
ipython,在cpython基礎上套了一個殼,提高用戶交互性
pypy,據說使用jit技術動態實時編譯使得代碼運行速度更快,但是目前暫不成熟
jpython和icronpython,使用java和.net編寫,一般不使用
6、python文件執行
兩種方式執行python文件,一種是啟動解釋器并將python源文件作為參數,解釋器讀取文件中代碼。一種是啟動解釋器,在交互環境編寫代碼執行。
7、變量
1、變量存在的原因
用于保存階段性計算的結果,同時變量用于描述程序中的一些數據,良好的變量命名和使用會增加代碼的可讀性。
2、變量命名規范
變量名可以是數字、字母、下劃線的任意組合,注意:不可使用除了下劃線之外的特殊字符
變量名開頭不能是數字
變量名不能和python預定義的關鍵字重名
注意:python竟然可以使用中文作為變量名!
3、變量定義語法
age = 26
定義一個變量,它的名字是age,此變量指向內存中的一個對象,此對象值是26
8、常量
常量的命名規范和變量一樣,不過常量的命名約定俗成的是全大寫。
常量用于保存基本不變的數據,python沒有提供類似c語言的const關鍵字來強制規定常量的不可變性,所以python中的常量是約定俗成的不可變。
9、python安裝
www.python.org官網下載最新版本3.6.5,根據電腦配置選擇32或者64位,安裝的時候選擇add to path并自定義安裝位置和其他高級選項,安裝完成可以直接shell進入python解釋器。
10、輸入/輸出
python中通過input函數提供shell輸入,通過print函數提供shell打印。
input函數會阻塞程序執行直到獲取shell輸入值
11、注釋
不論哪一種高級語言,我們在編碼的時候都是將腦海中的思路、信息、步驟簡化成實際的代碼。將大腦中的信息轉換成實際代碼的時候,會有很大的信息量丟失,即代碼所表達的信息量是很少的。
所以單獨的代碼無法還原編碼時的全部信息量,此時我們就需要使用注釋來彌補代碼缺失的信息量。優秀的注釋+代碼可以提供很高的可讀性,也方便后續代碼使用和維護。
注釋有幾個需要遵守的規范:
1、注釋的內容應該保持與代碼的強一致性,注釋應該精簡、準確的表達代碼的含義、編碼背景等
2、可以使用中文或者英文
3、注意注釋的使用量,在適當且必要的地方使用注釋,如:重要流程節點、復雜代碼塊解釋等
12、數據類型
計算機只認識二進制,對于計算機而言,數據沒有類別,全部都是010101010...
但是對于人類而言,人類世界中的數據、信息是五花八門的,我們編碼的過程其實就是在計算機世界中對現實世界進行建模的過程,所以我們需要對人類世界的數據劃分類別。
基礎的數據類型有:數字(整數+小數)、字符串、布爾值
我們使用int來表示整數類型、float表示小數類型
我們使用str表示字符串類型
我們使用bool表示布爾值類型
數字類型用于計算、字符串類型用于表示信息、布爾類型用于判斷
13、字符串格式化輸出
所謂格式化輸出,其實就是在編碼過程中定義展示模板,在模板中通過占位符代表后續有對應數據填充在此。
占位符:
%d 整數類型
%f 小數類型
%s 字符串類型(%s是萬能匹配,即任意數據類型都可以填充到%s占位符中)
%r 原格式(將數據的原始格式存放到%r占位符中,如字符串的原格式就包含引號)
14、運算符
算數運算符
+ - * / (注意,/ 除法運算符得到的商可以是小數,即5/2 = 2.5)
// % (地板除得到的結果是商的整數部分,如5//2 = 2。取模得到的結果是未整除的結果,如5%2 = 1,對2取模可以判斷奇偶。)
** (冪運算,5**2 = 25)
比較運算符
== > < >= <= != (==表示的是兩邊對象的值是否相等,python3中使用!=表示不等于,不再使用<>)
賦值運算符
= (賦值)
+= -= *= /=
//= %= **=
(在原有值的基礎上做運算,并賦值給原有變量,如a = 5, a %= 2,此時a = 1)
邏輯運算符
and or no (邏輯判斷會使用短路判斷,所以:使用and的時候,概率小的放前面。使用or的時候,概率大的放前面。)
15、流程控制-分支
程序默認是自上而下沒有分支的執行代碼。很多時候我們需要通過判斷程序運行中間的某一種狀態、情況、值,來決策程序下一步該執行哪些代碼。
通過分支提供多條執行路線,分支有雙分支、多分支。
之所以可以劃分多種分支是因為可能出現多種不同條件,而這些條件的概率和應該為1。
分支需要特別注意條件判斷的邏輯性,多種條件只會執行其中一個條件,條件之間是相互對立的。
通過if elif elif else來提供多分支,通過條件的布爾值結果判斷條件是否成立。
注意:條件判斷應該把概率大的放在前面,概率小的放后面,對于無法明確具體判斷條件的可以放在else統一匹配。另外,判斷input的返回值的時候注意,input返回值一定是字符串。
16、流程控制-循環-while
while關鍵字后面的語義是:判斷條件是否成立?成立的話執行一次循環體然后再次判斷條件是否成立。不成立的話跳過此循環體執行后續代碼。
因為循環代碼有導致死循環的風險,所以任何一個循環定義,都需要預先設計循環跳出條件。循環可以在循環體中通過break跳出,或者通過while條件判斷不成立跳過。(當然,也可以在循環體中exit)
通過continue可以提前結束當前循環,直接開始下一次的循環while判斷,注意:continue應用于跳過后續本應該執行的代碼。
因為continue可以跳過后續本應該執行的代碼,而后續執行代碼中可能包含循環跳出的設置如:i += 1。所以continue的使用會有死循環風險,需要單獨處理循環跳出問題。
17、while...else...
據說使用while后面的else,如果while正常執行完畢,則執行else。如果while沒有正常執行完畢如被break打斷,則不會執行else。可以使用else是否執行來判斷循環是否正常執行完畢,我覺得這并不合理,考慮下述代碼:
1 i = 11
2 while i < 10:3 print('i is:', i)4 i += 1
5 if i == 3:6 break
7 else:8 print('循環正常執行完畢')9
10 #循環沒有正常執行完畢,實際上循環根本就沒執行,else也被執行了。所以else被用于判斷
11 #while是否正常執行我覺得并不合理。
18、while的使用
思考如下練習:
#使用while,完成以下圖形的輸出
#
#*#* *#* * *#* * * *#* * * * *#* * * *#* * *#* *#*
1 star = 1
2 most_star = 5
3 while star <=most_star:4 print('*' *star)5 if star ==most_star:6 while most_star >0:7 most_star -= 1
8 print('*' *most_star)9 break
10 star += 1
11
12 row = 1
13 most_row = 5
14 while row <=most_row:15 print('*' *row)16 row += 1
17 row = most_row - 1
18 while row >0:19 print('*' *row)20 row -= 1
while循環只能打印一個方向,如果是兩個相反的方向,需要兩個while。兩個while可以寫成第二個while放在第一個while的末尾。
總結
以上是生活随笔為你收集整理的自学python 编程基础知识_python学习-基础知识-1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java文件路径及文件名乱码_javaw
- 下一篇: python构造referer_Pyth