python基礎二

python基礎二

一. 格式化輸出

現有一練習需求,問用戶的姓名、年齡、工做、愛好 ,而後打印成如下格式javascript

[複製代碼](javascript:void(0)😉java

------------ info of 太白魔童  -----------
Name  : 太白魔童
Age   : 22
job   : IT
Hobbie: girl
------------- end -----------------

[複製代碼](javascript:void(0)😉python

你怎麼實現呢?你會發現,用字符拼接的方式還難實現這種格式的輸出,因此一塊兒來學一下新姿式網絡

只須要把要打印的格式先準備好, 因爲裏面的 一些信息是須要用戶輸入的,你沒辦法預設知道,所以能夠先放置個佔位符,再把字符串裏的佔位符與外部的變量作個映射關係就好啦oop

[複製代碼](javascript:void(0)😉學習

name = input("Name:")
age = input("Age:")
job = input("Job:")
hobbie = input("Hobbie:")

info = '''
------------ info of %s ----------- #這裏的每一個%s就是一個佔位符,本行的表明 後面拓號裏的 name 
Name  : %s  #表明 name 
Age   : %s  #表明 age  
job   : %s  #表明 job 
Hobbie: %s  #表明 hobbie 
------------- end -----------------
''' %(name,name,age,job,hobbie)  # 這行的 % 號就是 把前面的字符串 與拓號 後面的 變量 關聯起來 

print(info)

[複製代碼](javascript:void(0)😉測試

%s就是表明字符串佔位符,除此以外,還有%d,是數字佔位符, 若是把上面的age後面的換成%d,就表明你必須只能輸入數字啦優化

age     : %d

咱們運行一下,可是發現出錯了。。。!ui

說%d須要一個數字,而不是str, what? 咱們明明輸入的是數字呀,22,22呀。編碼

不用擔憂 ,不要相信你的眼睛咱們調試一下,看看輸入的究竟是不是數字呢?怎麼看呢?查看數據類型的方法是什麼來着?type()

name = input("Name:")
age = input("Age:")
print(type(age))

執行輸出是

Name:Alex
Age:22
<class 'str'> #怎麼會是str
Job:IT

讓我大聲告訴你,input接收的全部輸入默認都是字符串格式!

要想程序不出錯,那怎麼辦呢?簡單,你能夠把str轉成int

age = int(  input("Age:")  )
print(type(age))

確定沒問題了。相反,能不能把字符串轉成數字呢?必然能夠,str( yourStr )

問題:如今有這麼行代碼

msg = "我是%s,年齡%d,目前學習進度爲80%"%('金鑫',18)
print(msg)

這樣會報錯的,由於在格式化輸出裏,你出現%默認爲就是佔位符的%,可是我想在上面一條語句中最後的80%就是表示80%而不是佔位符,怎麼辦?

msg = "我是%s,年齡%d,目前學習進度爲80%%"%('金鑫',18)
print(msg)

這樣就能夠了,第一個%是對第二個%的轉譯,告訴Python解釋器這只是一個單純的%,而不是佔位符。

二. 流程控制之--while循環

  Why:在生活中,咱們遇到過循環的事情吧?好比吃飯睡覺工做,循環聽歌等等。在python程序中,循環也是存在的。

  What:那麼這個循環在Python中就是流程控制語句while。

2.1,基本循環

while` `條件:``  ` `  ``# 循環體` `  ``# 若是條件爲真,那麼循環體則執行``  ``# 若是條件爲假,那麼循環體不執行

2.2 演示生活中循環聽歌

while True:
    print('癢')
    print('社會搖')
    print('喜洋洋')
    print('我要這鐵棒有何用')

那麼你們都看到了,while循環他的執行結果就是這樣一直循環,只要電腦不死機,直至天荒地老....... 他的內部是怎麼執行的呢?

img

這樣你們就能清楚的明白while究竟是如何進行循環的了,那麼問題也來了:這個循環如何終止呢?

2.3 如何終止循環?

  1. 改變條件(根據上面的流程,只要改變條件,就會終止循環)。
  2. 關鍵字:break。
  3. 調用系統命令:quit(),exit() 後面會講到,不建議你們使用。
  4. 關鍵字:continue(終止本次循環)。

  2.3.1 終止循環的第一個方法:利用改變條件,終止循環。給你們引入標誌位的概念。

[複製代碼](javascript:void(0)😉

flag = True
while flag:
    print('癢')
    print('社會搖')
    print('喜洋洋')
    flag = False
    print('我要這鐵棒有何用')

[複製代碼](javascript:void(0)😉

img 練習1:輸出1~100全部的數字

img 練習2:使用while循環求出1-100全部數的和.

   2.3.2 終止循環的第二方法:break

 break:很簡單,就是Python給你們提供的關鍵字,什麼是關鍵字?就是python中具備必定特殊意義的單詞,好比if,str,int等,這些不能用做變量對吧?

​ 那麼break的用法是什麼? 即:循環中,只要遇到break立刻退出循環。舉例說明:

[複製代碼](javascript:void(0)😉

flag = True
print(111)
while flag:
    print('癢')
    print('社會搖')
    print('喜洋洋')
    break
    print('我要這鐵棒有何用')
print(222)

[複製代碼](javascript:void(0)😉

img 練習3:打印1~100全部的偶數

  2.3.3 終止循環的第三個方法:今天先不講了,後面會給你們補充。

2.3.4 continue

​ continue 用於終止本次循環,繼續下一次循環。舉例說明:

[複製代碼](javascript:void(0)😉

flag = True
print(111)
while flag:
    print('癢')
    print('社會搖')
    print('喜洋洋')
    continue
    print('我要這鐵棒有何用')
print(222)

[複製代碼](javascript:void(0)😉

img 練習4: 使用while循環打印 1 2 3 4 5 6 8 9 10

img 練習5:請輸出1,2,3,4,5,95,96,97,98,99,100

2.4,while ... else ..

與其它語言else 通常只與if 搭配不一樣,在Python 中還有個while ...else 語句

while 後面的else 做用是指,當while 循環正常執行完,中間沒有被break 停止的話,就會執行else後面的語句

[複製代碼](javascript:void(0)😉

count = 0
while count <= 5 :
    count += 1
    print("Loop",count)

else:
    print("循環正常執行完啦")
print("-----out of while loop ------")

[複製代碼](javascript:void(0)😉

輸出

[複製代碼](javascript:void(0)😉

Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循環正常執行完啦
-----out of while loop ------

[複製代碼](javascript:void(0)😉

若是執行過程當中被break啦,就不會執行else的語句啦

[複製代碼](javascript:void(0)😉

count = 0
while count <= 5 :
    count += 1
    if count == 3:break
    print("Loop",count)

else:
    print("循環正常執行完啦")
print("-----out of while loop ------")

[複製代碼](javascript:void(0)😉

輸出

Loop 1
Loop 2
-----out of while loop ------

三. 基本運算符

運算符

  計算機能夠進行的運算有不少種,可不僅加減乘除這麼簡單,運算按種類可分爲算數運算、比較運算、邏輯運算、賦值運算、成員運算、身份運算、位運算,今天咱們暫只學習算數運算、比較運算、邏輯運算、賦值運算、成員運算

算數運算

如下假設變量:a=10,b=20

img

比較運算

如下假設變量:a=10,b=20

img

賦值運算

如下假設變量:a=10,b=20

img

邏輯運算

img

針對邏輯運算的進一步研究:

  1,在沒有()的狀況下not 優先級高於 and,and優先級高於or,即優先級關係爲( )>not>and>or,同一優先級從左往右計算。

例題:

判斷下列邏輯語句的True,False。

[複製代碼](javascript:void(0)😉

1,3>4 or 4<3 and 1==1
2,1 < 2 and 3 < 4 or 1>2 
3,2 > 1 and 3 < 4 or 4 > 5 and 2 < 1
4,1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8
5,1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 66,not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6

[複製代碼](javascript:void(0)😉

  2 , x or y , x爲真,值就是x,x爲假,值是y;

​ x and y, x爲真,值是y,x爲假,值是x。**
**

例題:求出下列邏輯語句的值。

8 or 4
0 and 3
0 or 4 and 3 or 7 or 9 and 6

成員運算:

除了以上的一些運算符以外,Python還支持成員運算符,測試實例中包含了一系列的成員,包括字符串,列表或元組。

img

判斷子元素是否在原字符串(字典,列表,集合)中:

例如:

#print('喜歡' in 'dkfljadklf喜歡hfjdkas')
#print('a' in 'bcvd')
#print('y' not in 'ofkjdslaf')

Python運算符優先級

如下表格列出了從最高到最低優先級的全部運算符:

運算符 描述
** 指數 (最高優先級)
~ + - 按位翻轉, 一元加號和減號 (最後兩個的方法名爲 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法減法
>> << 右移,左移運算符
& 位 'AND'
^ | 位運算符
<= < > >= 比較運算符
<> == != 等於運算符
= %= /= //= -= += *= **= 賦值運算符
is is not 身份運算符
in not in 成員運算符
not and or 邏輯運算符

四. 編碼的初識

我們都看過諜戰片吧?是否是都看過發電報的場景?電報發的是什麼?滴滴滴,滴滴。是否是高低電平?

在回到我們的電腦上,我們的電腦,存儲和發送文件,發送的是什麼?電腦裏面是否是有成千上萬個二極管,亮的表明是1,不亮的表明是0,這樣實際上電腦的存儲和發送是否是都是010101?

來找個同窗,我們模擬一下諜戰時期的情景:

我發給你一句話:今晚嗨去呀?

前提是否是須要一個對照本?010101 表明什麼文字?

今 01
晚 101
嗨 00111
去 1001

這樣我給你發過去你能看懂麼?

011010001111001

是否是應該斷句?規定幾個01是一個文字?

因此我規定了八位爲一段,

今 0000 0001
晚 0000 0101
嗨 0000 0111
去 0000 1001
00000001 00000101 00000111 00001001

這樣,你就能明白了,因此asiic碼就至關於這個密碼本,這個密碼本記錄的就是0101010 與 文字之間的對應關係。

那麼我們從新捋順序一遍:

計算機是須要存儲數據和經過網絡傳輸數據的,計算機存儲在磁盤中的數據或者經過網絡發送的數據本質發送的都是bit流也就是所謂的01010101101,那麼這些010010是須要與我們熟知的文字有標準的對應關係,這樣我們才能夠識別這些數據。

計算機起初使用的密碼本是:ASCII碼(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統ASCII碼中只包含英文字母,數字以及特殊字符與二進制的對應關係,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256,因此,ASCII碼最多隻能表示 256 個符號。

ASCII碼:包含英文字母,數字,特殊字符與01010101對應關係。

img ASCII碼產生緣由以及時間

下面是具體的ASCII碼:

Bin(二進制) Oct(八進制) Dec(十進制) Hex(十六進制) 縮寫/字符 解釋
0000 0000 0 0 00 NUL(null) 空字符
0000 0001 1 1 01 SOH(start of headline) 標題開始
0000 0010 2 2 02 STX (start of text) 正文開始
0000 0011 3 3 03 ETX (end of text) 正文結束
0000 0100 4 4 04 EOT (end of transmission) 傳輸結束
0000 0101 5 5 05 ENQ (enquiry) 請求
0000 0110 6 6 06 ACK (acknowledge) 收到通知
0000 0111 7 7 07 BEL (bell) 響鈴
0000 1000 10 8 08 BS (backspace) 退格
0000 1001 11 9 09 HT (horizontal tab) 水平製表符
0000 1010 12 10 0A LF (NL line feed, new line) 換行鍵
0000 1011 13 11 0B VT (vertical tab) 垂直製表符
0000 1100 14 12 0C FF (NP form feed, new page) 換頁鍵
0000 1101 15 13 0D CR (carriage return) 回車鍵
0000 1110 16 14 0E SO (shift out) 不用切換
0000 1111 17 15 0F SI (shift in) 啓用切換
0001 0000 20 16 10 DLE (data link escape) 數據鏈路轉義
0001 0001 21 17 11 DC1 (device control 1) 設備控制1
0001 0010 22 18 12 DC2 (device control 2) 設備控制2
0001 0011 23 19 13 DC3 (device control 3) 設備控制3
0001 0100 24 20 14 DC4 (device control 4) 設備控制4
0001 0101 25 21 15 NAK (negative acknowledge) 拒絕接收
0001 0110 26 22 16 SYN (synchronous idle) 同步空閒
0001 0111 27 23 17 ETB (end of trans. block) 結束傳輸塊
0001 1000 30 24 18 CAN (cancel) 取消
0001 1001 31 25 19 EM (end of medium) 媒介結束
0001 1010 32 26 1A SUB (substitute) 代替
0001 1011 33 27 1B ESC (escape) 換碼(溢出)
0001 1100 34 28 1C FS (file separator) 文件分隔符
0001 1101 35 29 1D GS (group separator) 分組符
0001 1110 36 30 1E RS (record separator) 記錄分隔符
0001 1111 37 31 1F US (unit separator) 單元分隔符
0010 0000 40 32 20 (space) 空格
0010 0001 41 33 21 ! 歎號
0010 0010 42 34 22 " 雙引號
0010 0011 43 35 23 # 井號
0010 0100 44 36 24 $ 美圓符
0010 0101 45 37 25 % 百分號
0010 0110 46 38 26 & 和號
0010 0111 47 39 27 ' 閉單引號
0010 1000 50 40 28 ( 開括號
0010 1001 51 41 29 ) 閉括號
0010 1010 52 42 2A * 星號
0010 1011 53 43 2B + 加號
0010 1100 54 44 2C , 逗號
0010 1101 55 45 2D - 減號/破折號
0010 1110 56 46 2E . 句號
00101111 57 47 2F / 斜槓
00110000 60 48 30 0 數字0
00110001 61 49 31 1 數字1
00110010 62 50 32 2 數字2
00110011 63 51 33 3 數字3
00110100 64 52 34 4 數字4
00110101 65 53 35 5 數字5
00110110 66 54 36 6 數字6
00110111 67 55 37 7 數字7
00111000 70 56 38 8 數字8
00111001 71 57 39 9 數字9
00111010 72 58 3A : 冒號
00111011 73 59 3B ; 分號
00111100 74 60 3C < 小於
00111101 75 61 3D = 等號
00111110 76 62 3E > 大於
00111111 77 63 3F ? 問號
01000000 100 64 40 @ 電子郵件符號
01000001 101 65 41 A 大寫字母A
01000010 102 66 42 B 大寫字母B
01000011 103 67 43 C 大寫字母C
01000100 104 68 44 D 大寫字母D
01000101 105 69 45 E 大寫字母E
01000110 106 70 46 F 大寫字母F
01000111 107 71 47 G 大寫字母G
01001000 110 72 48 H 大寫字母H
01001001 111 73 49 I 大寫字母I
01001010 112 74 4A J 大寫字母J
01001011 113 75 4B K 大寫字母K
01001100 114 76 4C L 大寫字母L
01001101 115 77 4D M 大寫字母M
01001110 116 78 4E N 大寫字母N
01001111 117 79 4F O 大寫字母O
01010000 120 80 50 P 大寫字母P
01010001 121 81 51 Q 大寫字母Q
01010010 122 82 52 R 大寫字母R
01010011 123 83 53 S 大寫字母S
01010100 124 84 54 T 大寫字母T
01010101 125 85 55 U 大寫字母U
01010110 126 86 56 V 大寫字母V
01010111 127 87 57 W 大寫字母W
01011000 130 88 58 X 大寫字母X
01011001 131 89 59 Y 大寫字母Y
01011010 132 90 5A Z 大寫字母Z
01011011 133 91 5B [ 開方括號
01011100 134 92 5C \ 反斜槓
01011101 135 93 5D ] 閉方括號
01011110 136 94 5E ^ 脫字符
01011111 137 95 5F _ 下劃線
01100000 140 96 60 ` 開單引號
01100001 141 97 61 a 小寫字母a
01100010 142 98 62 b 小寫字母b
01100011 143 99 63 c 小寫字母c
01100100 144 100 64 d 小寫字母d
01100101 145 101 65 e 小寫字母e
01100110 146 102 66 f 小寫字母f
01100111 147 103 67 g 小寫字母g
01101000 150 104 68 h 小寫字母h
01101001 151 105 69 i 小寫字母i
01101010 152 106 6A j 小寫字母j
01101011 153 107 6B k 小寫字母k
01101100 154 108 6C l 小寫字母l
01101101 155 109 6D m 小寫字母m
01101110 156 110 6E n 小寫字母n
01101111 157 111 6F o 小寫字母o
01110000 160 112 70 p 小寫字母p
01110001 161 113 71 q 小寫字母q
01110010 162 114 72 r 小寫字母r
01110011 163 115 73 s 小寫字母s
01110100 164 116 74 t 小寫字母t
01110101 165 117 75 u 小寫字母u
01110110 166 118 76 v 小寫字母v
01110111 167 119 77 w 小寫字母w
01111000 170 120 78 x 小寫字母x
01111001 171 121 79 y 小寫字母y
01111010 172 122 7A z 小寫字母z
01111011 173 123 7B { 開花括號
01111100 174 124 7C | 垂線
01111101 175 125 7D } 閉花括號
01111110 176 126 7E ~ 波浪號
01111111 177 127 7F DEL (delete) 刪除
# 思考:python中一個字符串爲 'abc',那麼若是用ASCII碼編碼,這個字符串佔幾個字節?

# ASCII碼 一個字符用一個字節表示,因此字符串'abc'佔三個字節,'abc'若是存儲在磁盤中其實存儲的是:0110 0001 0110 0010 0110 0011

隨着計算機的發展. 以及普及率的提升. 流⾏到歐洲和亞洲. 這時ASCII碼就不合適了. 好比: 中⽂漢字有幾萬個. 而ASCII 多也就256個位置. 因此ASCII不行了. 怎麼辦呢? 這時, 不同的國家就提出了不同的編碼用來適用於各自的語言環境(每一個國家都有每一個國家的GBK,每一個國家的GBK都只包含ASCII碼中內容以及本國本身的文字). 好比, 中國的GBK, GB2312, BIG5, ISO-8859-1等等. 這時各個國家均可以使用計算機了.
GBK:只包含本國文字(以及英文字母,數字,特殊字符)與0101010對應關係。

img GBK的知識擴展

經實際測試和查閱文檔,GBK是採用單雙字節變長編碼,英文使用單字節編碼,徹底兼容ASCII字符編碼,中文部分採用雙字節編碼。

對於ASCII碼中的內容,GBK徹底沿用的ASCII碼,因此一個英文字母(數字,特殊字母)用一個字節表示,而對於中文來講,一箇中文用兩個字節表示。

# 思考:python中一個字符串爲 'a太白',那麼若是用GBK碼編碼,這個字符串佔幾個字節?

#一個英文用一個字節,一箇中文用兩個字節,因此:'a太白' 若是是GBK編碼佔5個字節。

可是GBK只包含中文,不能包含其餘文字,言外之意,GBK編碼是不能識別其餘國家的文字的,舉個例子:若是你購買了一個日本的遊戲盤,在用中國的計算機去玩,那麼此時中國的計算機只有gbk編碼和ascii碼,那麼你在玩遊戲的過程當中,只要出現日本字,那就會出錯或者出現亂碼.......

可是,隨着全球化的普及,因爲網絡的連通,以及互聯網產品的共用(不一樣國家的遊戲,軟件,創建聯繫等),各個國家都須要產生各類交集,此時急需一個密碼本:要包含全世界全部的文字與二進制0101010的對應關係,因此建立了萬國碼:

Unicode: 包含全世界全部的文字與二進制0101001的對應關係。

img Unicode的起源以及知識擴展

通用字符集(Universal Character Set, UCS)是由ISO制定的ISO 10646(或稱ISO/IEC 10646)標準所定義的標準字符集。UCS-2用兩個字節編碼,UCS-4用4個字節編碼。

起初:Unicode規定一個字符用兩個字節表示:

  英文: a b c 六個字節 一個英文2個字節

  中文 中國 四個字節 一箇中文用2個字節

可是這種也不行,這種最多有65535種可能,但是中國文字有9萬多,因此改爲一個字符用四個字節表示:.

  a 01000001 01000010 01000011 00000001

  b 01000001 01000010 01100011 00000001

  中 01001001 01000010 01100011 00000001

這樣雖然解決了問題,可是又引出一個新的問題就是本來a能夠用1個字節表示,卻必須用4個字節,這樣很是浪費資源,因此對Uniocde進行升級。

UTF-8:*包含全世界全部的文字與二進制0101001的對應關係(最少用8位一個字節表示一個字符)。*

img UTF-8的簡單介紹

[複製代碼](javascript:void(0)😉

UTF-8:是對Unicode編碼的壓縮和優化,他再也不使用最少使用2個字節,而是將全部的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...

UTF-16: 每一個字符最少佔16位.

GBK: 每一個字符佔2個字節, 16位. 

[複製代碼](javascript:void(0)😉

UTF-8 :最少用8位數,去表示一個字符.

      英文: 8位,1個字節表示.

    歐洲文字: 16位,兩個字節表示一個字符.

  中文,亞洲文字: 24位,三個字節表示.

# 思考:python中一個字符串爲 'a太白',那麼若是用UTF-8碼編碼,這個字符串佔幾個字節?

#一個英文用一個字節,一箇中文用三個個字節,因此:'a太白' 若是是UTF-8編碼佔7個字節。

以上就是編碼的大體發展歷程,相信你們對編碼有了必定的瞭解,接下來普及一下單位之間的轉換:

[複製代碼](javascript:void(0)😉

8bit = 1byte
1024byte = 1KB
1024KB = 1MB
1024MB = 1GB
1024GB = 1TB
1024TB = 1PB
1024TB = 1EB
1024EB = 1ZB
1024ZB = 1YB
1024YB = 1NB
1024NB = 1DB
常⽤到TB就夠了 
相關文章
相關標籤/搜索