現有一練習需求,問用戶的姓名、年齡、工做、愛好 ,而後打印成如下格式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解釋器這只是一個單純的%,而不是佔位符。
Why:在生活中,咱們遇到過循環的事情吧?好比吃飯睡覺工做,循環聽歌等等。在python程序中,循環也是存在的。
What:那麼這個循環在Python中就是流程控制語句while。
while` `條件:`` ` ` ``# 循環體` ` ``# 若是條件爲真,那麼循環體則執行`` ``# 若是條件爲假,那麼循環體不執行
while True: print('癢') print('社會搖') print('喜洋洋') print('我要這鐵棒有何用')
那麼你們都看到了,while循環他的執行結果就是這樣一直循環,只要電腦不死機,直至天荒地老....... 他的內部是怎麼執行的呢?
這樣你們就能清楚的明白while究竟是如何進行循環的了,那麼問題也來了:這個循環如何終止呢?
2.3.1 終止循環的第一個方法:利用改變條件,終止循環。給你們引入標誌位的概念。
[](javascript:void(0)😉
flag = True while flag: print('癢') print('社會搖') print('喜洋洋') flag = False print('我要這鐵棒有何用')
[](javascript:void(0)😉
練習1:輸出1~100全部的數字
練習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)😉
練習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)😉
練習4: 使用while循環打印 1 2 3 4 5 6 8 9 10
練習5:請輸出1,2,3,4,5,95,96,97,98,99,100
與其它語言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
比較運算
如下假設變量:a=10,b=20
賦值運算
如下假設變量:a=10,b=20
邏輯運算
針對邏輯運算的進一步研究:
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還支持成員運算符,測試實例中包含了一系列的成員,包括字符串,列表或元組。
判斷子元素是否在原字符串(字典,列表,集合)中:
例如:
#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對應關係。
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對應關係。
GBK的知識擴展
經實際測試和查閱文檔,GBK是採用單雙字節變長編碼,英文使用單字節編碼,徹底兼容ASCII字符編碼,中文部分採用雙字節編碼。
對於ASCII碼中的內容,GBK徹底沿用的ASCII碼,因此一個英文字母(數字,特殊字母)用一個字節表示,而對於中文來講,一箇中文用兩個字節表示。
# 思考:python中一個字符串爲 'a太白',那麼若是用GBK碼編碼,這個字符串佔幾個字節? #一個英文用一個字節,一箇中文用兩個字節,因此:'a太白' 若是是GBK編碼佔5個字節。
可是GBK只包含中文,不能包含其餘文字,言外之意,GBK編碼是不能識別其餘國家的文字的,舉個例子:若是你購買了一個日本的遊戲盤,在用中國的計算機去玩,那麼此時中國的計算機只有gbk編碼和ascii碼,那麼你在玩遊戲的過程當中,只要出現日本字,那就會出錯或者出現亂碼.......
可是,隨着全球化的普及,因爲網絡的連通,以及互聯網產品的共用(不一樣國家的遊戲,軟件,創建聯繫等),各個國家都須要產生各類交集,此時急需一個密碼本:要包含全世界全部的文字與二進制0101010的對應關係,因此建立了萬國碼:
Unicode: 包含全世界全部的文字與二進制0101001的對應關係。
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位一個字節表示一個字符)。*
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就夠了