Python入門基礎語法101-Wayne1

0. 計算機硬件基礎

基於圖靈提出的概念,馮諾依曼體系:計算機包含運算器、控制器、輸入設備、輸出設備、存儲器。其中CPU包含了運算和控制功能,是編程主要針對的對象。CPU不直接在IO設備輸入輸出數據;IO設備輸入輸出是有內存操作的。

馮諾依曼體系,梯度下降

cpu>CPU1級>2級>3級緩存>內存>IO設備
詳細說:
CPU–>>內存的1級CPU獨享緩存–CPU獨享二級緩存–多核CPU共享三級緩存–>>內存–>>IO設備

動態語言和靜態語言

靜態語言一旦定義類型,就不能變化了
動態語言不用事先聲明類型,隨時可以複製爲其它類型,沒有做類型約束,上線後容易出問題。

隱式類型轉換

  • 隱式類型轉換舉例:
    在這裏插入圖片描述
  • 不能隱式類型轉換:
    在這裏插入圖片描述

強類型語言,必須做強制類型轉換:
在這裏插入圖片描述

弱類型語言,可以隱式轉換,以Javascript爲例:
在這裏插入圖片描述
在這裏插入圖片描述

Python基礎語法

數字運算

數值類型

  • 整數int:Python3不再區分int和long,long被重命名爲int所以,只有int類型了。
    • 進製表示方法:10 進制 10; 16進制0xa;八進制0o10;二進制0b10。
    • 進制函數:bin() oct() hex()
  • 浮點數float,對等於c的double類型
  • 複數complex
    • Bool屬於int的子類,只有True和False兩個實例。

加減乘除

加+、減-、乘*、整除/、//向下取整、%取模、**取冪
注:python2中/和//都是整除

在這裏插入圖片描述

字符串處理

  • ‘’’ 三引號可以換行’’’

r和f前綴

r前綴:字符前加r或者R,表示該字符串不做特殊處理:
在這裏插入圖片描述
f前綴:格式化字符串輸出

a =1
b =2
f"{a}的朋友是{b}"
>>> '1的朋友是2'

轉義序列

\ \t \r \n ’ "
前綴r,把裏面所有字符當做普通字符對待,轉義字符不再轉義。

續行

行尾使用, 注意\之後處理緊跟換行之外,不能有其它字符。
括號不支持跨行。

標識符

  • 即以前稱謂的變量名。
  • 以字母、數字和下劃線爲組成,字母開頭;不能數字開頭。
  • 沒有常量。(只有字面量常量,比如1,‘abc’)

進制

每8位(bit)爲一個字節byte。
一個字節能表示整數的範圍:

  • 無符號數即 216 -1=255
  • 有符號數,包含127個正數和127個負數,加上0,也是255種。
    轉爲10進制,按位乘以權,累加求和。

二進制種最低位爲1,一定是奇數,最低位爲0一定是偶數。

二進制轉16進制

每4位一斷:

二進制 十六進制
1000 0000 8 0
特殊二進制0b 十進制 十六進制0x
1 1 1
11 3 3
111 7 7
1111 15 F
1 1111 31 1F
11 1111 63 3F
111 1111 127 7F
1111 1111 255 FF
1 0000 0000 256 100

特殊十六進制記憶

特殊十六進制0x 十進制
9 9
A 10
D 13
10 16
20 32
30 48
31 49
41 65
61 97
7F 127
FF 255
FE 254

二進制轉8進制,每3位一斷:

二進制 八進制
10 000 000 2 0 0

十六、八進制轉二進制

  • 十六進制轉二進制,按位展開即可,
    例如0xF8, 得二進制0b 1111 1000
  • 八進制轉二進制,按位展開即可,
    例如0o664,得二進制0b 110 110 100

十進制轉2、8、16進制

  • 十進制轉二進制
    除以基數2,直到商爲0,反向提取餘數。
  • 十進制轉八進制
    除以基數8,直到商爲0,反向提取餘數。
  • 十進制轉十六進制
    除以基數16,直到商爲0,反向提取餘數。

碼制

原碼

原碼:把生活應該有的正負概念,原原本本的表示出來。把左邊第一位騰出位置,存放符號,正用0來表示,負用1來表示。

反碼

反碼:但使用“原碼”儲存的方式,方便了看的人類,卻苦了計算機。例如,我們希望 (+1)和(-1)相加是0,但計算機只能算出0001+1001=1010 (-2)。 爲了解決“正負相加等於0”的問題,在“原碼”的基礎上,人們發明了“反碼”。
“反碼”表示方式是用來處理負數的,符號位置不變,其餘位置相反
就算計無需算原碼:0001+1001=1010 (-2);只需算反碼:0001+1110=1111,剛好反碼錶示方式中,1111象徵-0。

補碼

(+1)和(-1)相加,變成了0001+1101=1111,剛好反碼錶示方式中,1111象徵-0人們總是進益求精,歷史遺留下來的問題—— 有兩個零存在,+0 和 -0我們希望只有一個0,所以發明了"補碼",同樣是針對"負數"做處理的"補碼"的意思是,從原來"反碼"的基礎上,補充一個新的代碼,(+1)
在這裏插入圖片描述
有得必有失,在補一位1的時候,要丟掉最高位我們要處理"反碼"中的"-0",當1111再補上一個1之後,變成了10000,丟掉最高位就是0000,剛好和左邊正數的0,完美融合掉了這樣就解決了+0和-0同時存在的問題另外"正負數相加等於0"的問題,同樣得到滿足舉例,3和(-3)相加,0011 + 1101 =10000,丟掉最高位,就是0000(0)。

簡述:

  1. 原碼呢,就是後面不動,第一位表示符號。5是0101,-5是1101.優點是,人能直接念出來1101是-5。缺點呢,你把0101和1101加起來,是啥?反正和0沒啥關係吧…對,缺點就是沒法直接加。
  2. 反碼的負數是把原碼“符號位不變,數值位取反”。如-5原碼是1101,所以它的反碼就是1010;老師只給了一行課件,我跟它真的不熟,我不知道他有什麼用,個人揣測它是原碼到補碼的一種過渡形態。也就是說,我們可以快速從反碼知道原碼和補碼。
  3. 補碼,用補碼錶示負數就是反碼+1。-5的反碼是1010,所以它的補碼就是1011。它的優點是,可以把負數直接拿來算加法。
規則 正數- 負數
原碼 左邊第一位騰出位置,存放符號,正用0來表示,負用1來表示。 0110 1100 1110 1100
反碼 計算機使用:反碼可由原碼得到。如果機器數是==正數,則該機器數的反碼與原碼一樣==;如果機器數是負數,則該機器數的反碼是對它的 原碼符號位不變,各位取反而得到的。 0110 1100 1001 0011
補碼 爲給人看的:補碼可由原碼得到。如果機器數是==正數,則該機器數的補碼與原碼一樣==;如果機器數是負數,則該機器數的補碼是對它的原碼符號位不變,各位取反,並在未位加1,即反碼+1而得到補碼的補碼就是原碼 0110 11000 1001 0100

補碼求原碼

已知一個數的補碼,求原碼的操作分兩種情況:
如果補碼的符號位爲“0”,表示是一個正數,所以補碼就是該數的原碼。
如果補碼的符號位爲“1”,表示是一個負數,求原碼的操作可以是:符號位爲1;其餘各位取反,然後再整個數加1。 

補碼加、減運算公式

在做補碼加減法時,只需將符號位和數值部分一起參與運算,並且將符號位產生的進位丟掉即可。

補碼加法公式
  [X+Y]補 = [X]補 + [Y]補
補碼減法公式
  [X-Y]補 = [X]補-[Y]補 = [X]補 + [-Y]補
其中:[-Y]補稱爲負補,求負補的辦法是:對補碼的每一位(包括符合位)求反,且未位加1.
假設字長爲8的計算機sbyte類型所能表示的最大數是11111111,若再加1稱爲100000000(9位),但因只有8位,最高位1自然丟失。又回了00000000,所以字長爲8的二進制系統的模爲2^8。

詳解閱讀推薦:
張子秋博客
知乎趣味討論

思考題1:內存中如果看0xFF,這個數一定是255嗎?

不一定,如果是無符號數,纔是255. 在計算機中,負整數就是由補碼存儲的

例如 5-1,即5+(-1)
0000 0101 -->5的原碼
1111  1111 -->-1的補碼
---------------------------
0000 0101 --結果是4 (溢出位刪除)

運算符

比較運算符

支持鏈式比較: 4>3>2

成員運算符

in, not in

身份運算符

is , is not

位運算

&: 位與;
|:位或
^:異或
<<:左移
>>: 右移
~:按位取反,包括符號位
內存操作會用到,舉例5&3=1:
0000 0101
0000 0011 &與
----------------
0000 0001

5|3=7:
0000 0101
0000 0011 |或
----------------
0000 0111

5^3=6:
0000 0101
0000 0011 |異或,相異出一
----------------
0000 0110
~12 =-13

0000 1100 12
1111 0011 取反(計算機存儲的是這個)
---------------------
1000 1101 爲給人看,出補碼的補碼,即原碼 -13

邏輯運算真值表

快速計算法 :與做乘法,或做加法(其中1+1=2->1 作爲特例)。
在這裏插入圖片描述

Python運算符優先級:算數運算>比較>邏輯;not>and>or

按照這個規則,可以很容易識別如下執行順序:

1 + 2 > 3 and 4 + 5 < 10

更詳細一點: 算術運算符>位運算符>比較運算符>邏輯
單目運算符>雙目運算符 -2 優先於 -2 < -1。
冪>乘除 2*2**3 =16
四則運算>移位>比較。

多用括號,避免閱讀歧義

(1 + 2 > 3) and (4 + 5 < 10) #簡單易懂,可以不用括號
((1 + 2 == 3) and "a" and (4 + 5 < 10) and 0)  or (1 and 0) #複雜的,要用括號註釋

and 要將可以短路的0值放到前面;
or要將可以短路的1值放到最前面。

2. 表達式

內置函數

e.g.
在這裏插入圖片描述

Type

  • Type是元類,即構造其它類的類
  • 在這裏插入圖片描述
  • True 是Bool類; True in int類,但不是int類。

在這裏插入圖片描述

isinstance 的用法

在這裏插入圖片描述

False等價

False 等價布爾值,相當於 bool(value)

空容器
  • 空集合set
  • 空字典dict
  • 空列表list
  • 空元組tuple

空字符串
None
0

Print 的sep和end

在這裏插入圖片描述

取整運算

  • ceil向上;floor向下;

在這裏插入圖片描述

  • // 除, 向下取整

正數負數都是
在這裏插入圖片描述

  • int只截取整數部分,正數向下取整;負數向上取整

  • round 四捨六入五取偶

在這裏插入圖片描述

惰性對象range

前包後不包。

for i in range(1,10,2):
    print(i)
    

range倒序輸出的實現:

for i in range(10,-1,-2):
    print(i)

在這裏插入圖片描述

3. 分支和循環

分支語句

單分支 if
多分支 if …elif(elif隱含上一個if不成立的條件)

循環語句

for 循環的else子語句,在循環沒有被break的是才執行
即,被break後,不會else

for i in range(1,10,2):
    print(i)
    if i > 6:
        break
else:
    print("這句不會被執行")
>>> 
1
3
5
7

3. 線性表

線性表的類別

  • 順序表:使用一大塊連續內存順序存儲的元素,這樣的成爲順序表。
  • 鏈表:是線性結構的線性表,內存分佈上看着不連續,但是內部有指向,所以它是有明確的順序的。

3.1 Python列表的操作

列表操作原理
詳見: https://blog.csdn.net/pagean/article/details/104999730

3.2 Python元組的操作: 待撰

3.3 Python字典的操作 :待撰

3.4 Python集合的操作:待撰

Python入門測試

詳見: https://blog.csdn.net/pagean/article/details/105043990

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章