今天大概是對python的數據類型等基礎部分進行了簡單的瞭解,同時鞏固了C和C++中忽略的一些問題。 首先是對轉義字元的認識。之前沒有太在意過這些問題,一般只用到"\n"表示換行,因為在C和C++中,貌似換行必須用到"\n"。在python中當然也可以,不過python還有一個好處就是如果你將pri ...
今天大概是對python的數據類型等基礎部分進行了簡單的瞭解,同時鞏固了C和C++中忽略的一些問題。
首先是對轉義字元的認識。之前沒有太在意過這些問題,一般只用到"\n"表示換行,因為在C和C++中,貌似換行必須用到"\n"。在python中當然也可以,不過python還有一個好處就是如果你將print()函數分成兩行寫,編譯器會自動幫你換行;之後就是關於“\t”,即水平製表符的理解。水平製表符會先判斷“\t”之前的字元個數除以4的餘數,設為n,而該操作就可以將從該位置向後空出(4-n)個位置;接著是關於“\r”,該轉義字元可以用“\r”後面的內容覆蓋前面的,也就是說,遇到“\r”,游標會回顯到該行的開頭(此處也聯想到換行符和回車符的區別);接著是關於“\b”,這個就比較簡單了,可以刪掉“\b”前面的一個字元。
接著是有關二進位與字元編碼的問題。中國的漢字也是由二進位存儲的。在python中,利用chr()函數,例如:chr(0b100111001011000)就表示漢字“乘”(0b表示二進位,0o表示八進位,0x表示十六進位)。與之相對的,ord()函數可以將漢字轉換成其對應的十進位的數。同時,我們瞭解到,python2中的漢字採用的是gbk編碼,而python3採用的是utf-8編碼,如果需要轉換,可以在一行中寫入“#coding:gbk”。
接著是關於python中如何查找地址和數據類型的。地址在C語言中想要列印出來,需要用%p,而在python中只需要用id(變數名);同時,在C和C++中,定義變數的時候就必須指明數據類型,而在python中不需要,並且可以通過type(變數名)來查看數據類型。當然,提到數據類型,就必須要提到數據類型的種類。在python中,目前知道的主要類型就是整數類型,浮點類型,布爾類型和字元串類型,這跟C和C++幾乎一樣。重點強調浮點類型,由於電腦採用二進位存儲,在計算浮點數的時候常常會出現誤差。因此,最好加上下麵這行代碼:from decimal import Decimal 。這樣,例如在運算1.1+2.2的時候,就可以使用Decimal('1.1')+Decimal('2.2')算出3.3了。在python中,布爾類型也是非常“自由的”。例如True可以直接與整數1相加得到2,False與整數1相加得到1等等。關於字元串類型,有一個小的點,就是使用’ ‘(單引號)和” “(雙引號)字元串不能分兩行,而使用” “ ”(三引號)就可以分兩行書寫字元串。
當然,提到了數據類型,肯定還得提數據類型之間的轉換。在C和C++中,由於定義變數的時候就需要寫出類型名稱,所以一般叫做“強制類型轉換”。而在python中,不需要你寫出類型名稱,類型都是編譯器幫你定好的。也正是因為如此,編譯器定的類型往往不是我們所需要的,所以說我們需要用到類型轉換,即int(變數名),str(變數名),float(變數名)。在數據類型轉換中也要註意一些問題。例如當字元串型和整型混在一起時:name='張三' age=20 print('我叫'+name+',今年'+age+'歲') ,這裡面,用print輸出時,+表示在前一個輸出的後面接著輸出下一個。當然,這行代碼是錯誤的,因為age和name的數據類型不一樣,因此需要將age改為str(age)。除此之外,當字元串想要轉換成整數類型時,必須要保證字元串內是一個整數,否則無法轉換成功。
還有就是對input()函數的瞭解,這個函數類似於C語言中的scanf+gets()以及C++中的cin+gets()。書寫的格式也很簡單:如a=input()。但是有一點需要註意,就是由於一開始沒有設定數據類型,所以你在控制臺上輸入的數據都會預設為字元串型(python3中),這就需要你進行類型轉換。如增添一行a=int(a)。
下麵是關於賦值的問題。在,python,C和C++中都存在鏈式賦值,如a=b=c=20(強調一下,該情況下三個數的地址相同);但是在Python中,還存在系列解包賦值,如a,b,c=10,20,30,但是必須保證左右兩邊的數的個數相同。需要交換兩個數時,直接使用:a,b=b,a。這樣不僅方便,而且相較於C和C++,該賦值方法不僅實現了值傳遞,而且實現了址傳遞,避免了C和C++中指針或引用帶來的麻煩。
下麵的內容就很雜啦。如採用比較運算符時,返回的值是布爾類型;還有就是is和==的區別:is比較的是兩者的地址,==比較的是兩者的值,如兩個列表list1=[11,22,33,44], list2=[11,22,33,44],這兩者的值相同,但是地址不同,所以print(list1==list2)返回值是True,而print(list1 is list 2)返回值就是False,而在中間加入not,即print(list is not list2)返回值就是True了。這個“not”也可以對布爾類型取反,即可以print(not False)。還有就是關鍵詞"in"和“not in”,字面意思,就是是否在其中。如a='helloworld',那麼print('e' in a)返回值就是True,而print('e' not in a)返回值就是False。還有關於位運算的一些符號。這個在C和C++中略有接觸,但由於上課老師不講,考試也不考,所以也沒有進行過多的研究。這塊的內容也不多,有四個主要的運算符:&,|,<<和>>。先把數寫成二進位的模式,然後按位進行計算即可。<<(左移運算符):高位溢出,低位補0;>>(右移運算符):低位溢出,高位補0。位運算在往年藍橋杯的一道題中有所運用,大概是用二進位0和1來判斷迴圈的次數以及是否選中該數的問題(0表示未選中,1表示選中)。還有就是關於python註釋的問題。一行中註釋可以用#,整個一起註釋既可以選中想要註釋的,並按ctrl+/;也可以將想註釋的內容前後加上三引號。
本人第一次寫博客,難免有很多寫的不准確的地方,望指正,謝謝。