第二章 學習python前必備的基礎知識
大家在上一章中已經可以自己敲出一個猜數字小遊戲了,先不要删掉它,以後我們慢慢來改進它。接下來呢,我們再繼續學習一些必須要學的基礎知識。
2.1 變量
說到變量,就是可以改變的量,它并不是一個值,而是記憶體中的一個位址。什麼意思?通俗點講,當你定義一個a = 3的時候,系統在記憶體中會給a一個位址,而這個a就是代表一個門牌号,然後小3住在裡面,當你要調用a的時候,就相當于你喊了一句:小3,出來玩兒了!當你改好了這個房子之後,門牌号a是不能改變的,但住在裡面的小3是可以換人的,是以稱之為變量,而不是恒量。
看下面的例子:
a = 4
b = 5
print(a)
print(b)
結果:
結果顯而易見,a和b分别叫出了小4和小5.那怎麼展現它是可以變得呢?看下面的例子:
a = 4
b = 5
print(a+b)
a = "Li"
b = 'Wang'
print(a)
print(b)
結果很明顯吧,第一次給a和b分别指派4和5,然後print了一個a+b,結果是9,也說明print内是可以寫一個運算式的;第二次我們給a和b分别指派了兩個字元串,然後列印出來的就是這兩個字元串,進而說明這是個變量而不是常量。你想問既然數字可以加,那字元串可以加嗎?當然可以,不信你可以自己運作一下下面的代碼:
a = "Li"
b = "Wang"
print(a + b)
運作一下,看一下是什麼結果,是不是已經把兩個字元串拼接起來了?再試試看下面的代碼:
a = 1
b = 2
c = "Li"
d = "Wang"
print(a + b)
print(a + c)
print(c + d)
print("Li" + "Wang")
并從中了解一下,是不是數字和字元串可以任意的拼接和列印?
又或者是報了些錯誤?嘗試了解一下錯誤資訊。
2.2 字元串
我們都知道像1,2,3這樣的類型叫做int類型(整型),那像a,b,c這樣的字母及一些特殊字元%,*,@呢,他們被統稱為字元串類型,也就是str類型,那怎麼才能在代碼中知道我輸入的或者指派的這個變量是什麼類型呢,python的BIF裡給了我們一個type()方法來獲得類型名,等等,BIF是什麼,好進階的樣子。
BIF 是Built-in Functions,也就是内置函數的意思,像Python裡的很多内置函數都是可以直接調用的,友善了程式員快速編寫腳本。比如print就是一個内置函數,用來列印。input()也是一個内置函數,用來提示使用者輸入。
好,繼續來說type()這個BIF的作用,請看下面的代碼:
a = 2
b = "Li"
print(type(a),type(b))
看到沒有,第一個a的類型顯示的為int,第二個b的類型顯示為str字元類型
繼續看下一個代碼:
a = "Li"
print("大家好,我叫%s" % a)
b = 18
print("我今年%d歲了" % b,"(真年輕,啊哈哈)")
這裡用了一個奇怪的字元,%s和%d是用來幹嘛的,說明一下,s就是字元串,d則是整型,其他的像什麼%f,%b什麼的大家可以自己查資料,最常用的就是%s和%d,%f好像也挺常用的,它代表的浮點數,浮點數也就是小數。另外記住,在("大家好,我叫%s" % a)中,第二個%前面和字元串之間是不能加逗号的,不然python會認為這是兩個單獨的字元串。
擴充一下,除了用%号來格式化還有其他的方法嗎?有的,python還給了我們一個叫format的方法,代碼如下:
a = "Li"
b = 18
print("大家好,我叫{name},今年{age}歲了".format(name=a, age=b))
結果如出一轍吧,另外其實還有一種更簡潔的方式,如下:
name = "Li"
age = 18
print(f"大家好,我叫{name},今年{age}歲了")
結果和上面的是一樣的,大家不妨試一下。
2.3 原始字元串
下面有一行代碼,大家看看輸出和想象中一樣嗎?
print("\time \home \name")
輸出的是不是很奇怪,是不是第一個t沒了,而變成了一個Tab,name的n也沒了,變成了換行。沒錯,在python中,\t 為制表符,\n為換行符。是不是有點傷腦筋了,那這樣我怎麼才能輸出我想要的結果呢。沒關系,python肯定已經想到了這樣的問題,是以我們可以在"\"前面再加一個"\"用來轉義字元。
print("\\time \home \\name")
這樣的輸出就會變成我們需要的輸出,那還有沒有更簡單的方式呢,每個"\"前面都要加一個"\",那豈不是很麻煩。答案是有的,這時就需要我們将要列印的字元轉換成原始字元串,怎麼轉換呢,看代碼:
print(r"\time \home \name")
有沒有看到一個細微的變化,沒錯,我們在引号外加了一個"r",代表我們要将後邊要列印的字元轉換成原始字元串,這樣就可以随心所欲的列印了。
2.4 長字元串
我說 你是人間的四月天;
笑響點亮了四面風;
輕靈在春的光豔中交舞着變。
你是四月早天裡的雲煙,
黃昏吹着風的軟,
星子在無意中閃,
細雨點灑在花前。
那輕,那娉婷,你是,
鮮妍百花的冠冕你戴着,
你是天真,莊嚴,
你是夜夜的月圓。
雪化後那片鵝黃,你像;
新鮮初放芽的綠,你是;
柔嫩喜悅,
水光浮動着你夢期待中白蓮。
你是一樹一樹的花開,
是燕在梁間呢喃,
——你是愛,是暖,是希望,
你是人間的四月天
哇,好有詩意,為啥要用這首當代詩開頭呢,因為這整首詩就是我們的長字元串,我們要想把這首詩按照這個排版列印出來,按照我們學過的知識,是不是要這樣列印:
print("我說 你是人間的四月天;\n 笑響點亮了四面風;\n 輕靈在春的光豔中交舞着變。\n 你是四月早天裡的雲煙,\n。。。")
是不是要在每個換行之前加一個換行符"\n",那這工程量可就大了去了,那有沒有什麼好方法呢,答案還是有的,我們可以這樣:
a = """
我說 你是人間的四月天;
笑響點亮了四面風;
輕靈在春的光豔中交舞着變。
你是四月早天裡的雲煙,
黃昏吹着風的軟,
星子在無意中閃,
細雨點灑在花前。
那輕,那娉婷,你是,
鮮妍百花的冠冕你戴着,
你是天真,莊嚴,
你是夜夜的月圓。
雪化後那片鵝黃,你像;
新鮮初放芽的綠,你是;
柔嫩喜悅,
水光浮動着你夢期待中白蓮。
你是一樹一樹的花開,
是燕在梁間呢喃,
——你是愛,是暖,是希望,
你是人間的四月天
"""
print(a)
前後各三個單引号來表明這是一個長字元串,這樣就會原封不動的列印出來了。
2.5 數字的運算
下面是常用的運算及關系字元:
+ :加法
- :減法
* :乘法
* * :幂運算
/ :除法
// :整除
% :餘除
< :小于
> :大于
<= :小于等于
>= :大于等于
== :判斷等于
!= :判斷不等于
加法,減法和乘法應該不需要再說了,畢竟都是上過學的人。
大家先将下面的幾行代碼敲下來,注意從中觀察"/", "//", "%"都是除法,但是有什麼不同。
print(3 ** 3)
print(9 / 2)
print(9 // 2)
print(9 % 2)
輸出是不是這樣的:
27
4.5
4
1
現在可以解釋一下了,我們接觸最多的就是這個"/"最普通的除法,這和我們平時的運算是最合乎常理的,9除以2本來就是4.5嘛,然而這個"//"呢,被稱為取整,也就是我們隻取除過後的整數部分,是以"%"這個取餘就是取餘數部分了,像是我們小時候學過的(9 除以 2 = 4 ······1)
然後大家再敲一下下面的代碼:
print(3 > 5)
print(5 >= 5)
print(6 < 8)
print(4 == 4)
print(4 != 5)
結果
False
True
True
True
True
怎麼我輸入的是數字,但列印的是一串字元呢,因為<,>号本來就是關系判斷符,既然是判斷,那就有對有錯,False和True正好是英文中的對與錯的意思,“==”就是判斷兩邊數值是否相等,“!=”則判斷兩邊數值是否不等,接下來就來了解一下python中的布爾類型。
2.6 布爾類型
其實在python中布爾類型中的False和True分别被當做0和1來對待的,即假和真。包括下面這樣的計算也是可以的。
print(True + True)
print(False + True)
2
1
有沒有發現,在Python中True和False确實是被當成了1 和 0.
但如果你真想把這兩個布爾類型放到數學計算中去用,那可真是不合邏輯了,為啥丢了西瓜撿芝麻。
2.7優先級問題
既然牽扯到了運算的問題,那肯定就會有優先級的問題,那麼在python中,數值運算的優先級是怎樣的呢?大家在上國小的時候都背過“先乘除,後加減”吧,沒錯,在Python中數值運算也是一樣的,如果要先進行加減運算呢,那就用一個小括号把要先進行計算的括起來。
還有其實像下面的兩個式子是一樣的,不用擔心
-5 * 7 + 7 * -9
(-5) * 7 + 7 * (-9)
2.8 邏輯操作符
python中的邏輯操作符有:
and
or
not
and也就是并且的意思,其要求兩邊的式子同時為真則為真。
or也就是或者的意思,要求兩邊一邊為真則為真。
not也就是取反的意思,not真則為假,not假則為真。
看下面的代碼
print( True and True)
print(True or False)
print(not True)
True
True
False
很好了解吧。
其實在python中還會有這樣的式子
2 < 3 <5
這其實是被解釋成
2 < 3 and 3 < 5
這個做法在python中是被認可的,其他語言幾乎都會報錯,要記住。
2.9 資料類型及轉換
在學習python之前,我們可能已經聽說過在python中的變量是沒有“類型”的,的确,變量在python中更像是一張“标簽”,想怎麼貼就怎麼貼,我們可以直接通過“标簽”來找到變量在記憶體中的位置;但也不能說python中絕對沒有“資料類型”這一說,很糾結對不對?其實沒必要糾結,有沒有“資料類型”是理論上的疑問,并不會妨礙我們對python運用的掌握,是以我們不妨相信“python是有資料類型的”。
我們已經學習了字元串類型和布爾類型,那我們知道數字的類型都有哪些嗎,我們今天先來了解一下數字中的整型和浮點型
整型,見字如面,也就是意味着整型就是整數的類型,也就是int型,沒什麼可說的了
那麼浮點型呢,其實也就是相當于小數類型,在這裡順便引進一個科學計數法,畢竟小數點後有很多數的例子見多了。
a = 0.000000009
b = 9e-9
print(type(a),type(b))
print(a == b)
<class 'float'> <class 'float'>
True
a = 4
b = 3.87
c = "Li"
d = "5"
print(type(a),str(a),type(str(a)))
print(type(b),int(b),type(int(b)))
print(type(d),int(d),type(int(d)))
<class 'int'> 4 <class 'str'>
<class 'float'> 3 <class 'int'>
<class 'str'> 5 <class 'int'>