python之路-Day1 自記筆記
一、為什麼選擇python3?
python2是遺產,python3是現在和未來的語言 目前2.7會支援到2020年,2.x版本不會再有大變動和更新
所有的最新的標準庫更新只會在3.x版本出現 3.x不相容老版本,是最激進的改變, python3可以直接預設寫中文了,詳見字元編碼知識點
某些庫改名了 下劃線取消,大寫變小寫
twisted目前還不支援3.x,他是一個非常強大又複雜的非同步網路框架,非同步的牛逼之處在於單執行緒的能力還優於多執行緒,預計2018-2019會支援
我的第一個python程式:hello world
print ("Hello World!")
二、變數
變數就是把內容存起來,後面留著呼叫使用,變數存在記憶體中
變數的使用:直接賦值就可以
1 # Auther: Tank Jarvis 2 name1 = "Tank" 3 print(name1)玩個有意思的:
1 # Auther: Tank Jarvis 2 3 print("Hello world") 4 5 name1 = "Tank" 6 name2 = name1 7 print(name1) 8 print(name2) 9 10 name1 = "Jarvis" 11 12 print(name1) 13 print(name2)
name2會跟隨name1而改變嗎?
答案是不會,為什麼?因為變數的指向是記憶體,一開始name1與name2都指向了記憶體的Tank,後來name1變為Jarvis,name2還是指向Tank而不是name1,所以要明白我們變數的內容都在記憶體裡,每個變數也都在指向記憶體中的賦值。
1.變數的規則:
- 變數名只能是 字母、數字或下劃線的任意組合
- 變數名的第一個字元不能是數字
- 以下關鍵字不能宣告為變數名
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
另外變數名字要有意義,別整一個字母就當變數 、別整拼音當變數、別整中文當變數
三、字元編碼
計算機只認識0與1
怎麼用0與1表示所有的數字? 就用二進位制
0 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 。。。
依次是從2的0次方開始向後計算
2**0 2**1 2**2 2**3 2**4 2**5 。。。
如果要表示79,就可以這麼去想 79-64=15 15-8=7 7-4=3 3-2=1 1-1=0,用到了64、8、4、2、1,用到就是1,沒用到就是0
那麼79的二進位制就是 :
0 1 2 4 8 16 32 64
0 1 1 1 1 0 0 1
79=1001111
那麼計算機只認識0 1 那怎麼把字元和0 1 關聯起來??
就用到了字元編碼,規定某些數字固定對應某些字元,就產生了ASCII(沒過標準資訊交換程式碼)
一共佔用2**8 不大於128位數字
但是中文幾千個字裝不下,怎麼辦?
既然127個裝不下就擴充套件
128-一個數 就當做目錄,GB2312(1980年),這個目錄裡存了7445個漢字字元,
後來1995年GBK1.0收錄21003個漢字字元
最後2000年GB18030收錄了27484個漢字,同時還有少數民族文字
一些MP3 手機一般只支援GB2312
我們最常用的是GBK
為了避免各個國家都搞自己的編碼太亂,後來出來了統一標準:Unicode,統一萬國碼但是不相容GBK等,Unicode存的多了,佔用的空間就大,ASCII碼一個字元佔8個位元位,Unicode一個字元,不論中文漢字還是英文字母,都佔16個位元位,也就是2個位元組,就會出現空間有被佔滿的風險
然後在unicode基礎上出現了UTF-8,字元的大小可變長,所有的英文字元按照ascii碼存,所有的漢字按照unicode存,所以不會佔用多餘的空間
ASCII碼 2**8個 佔1個位元組
1980年 GB2312 支援7000多個漢字
1995年 GBK1.0 支援20000+漢字
2000年 GB18030 支援27000+漢字
90年代初出現了 Unicode 統一佔2個位元組
UTF-8 英文 1個位元組 中文 3個位元組
python3與python2的區別就是python3是UTF-8編碼,預設支援中文,python2預設是ASCII編碼,要想在python2裡寫中文,就要先宣告字符集為UTF-8
1 _*_ coding:utf-8 _*_ 2 或者 3 -*- coding:utf-8 –*-
四、使用者互動
1.註釋
單行註釋: #
多行註釋: ‘’’ 多行內容 ‘’’ 或者 “”“ 多行內容 ”“”
多行註釋的內容也可以被賦予給變數
2.使用者輸入 (互動)
1 username = input("Please input your username:") 2 password = input("Please input your password:") 3 4 print(username, password) 5
使用者互動+格式化輸出 %s的使用方法:
1 name = input("Name:") 2 age = input("Age:") 3 job = input("Job:") 4 salary = input("Salary:") 5 6 info = ''' -----------Info of %s----------- 7 Name: %s 8 Age:%s 9 Job:%s 10 Salary: %s 11 ''' % (name,name,age,job,salary) 12 13 print(info)
%s 代表的是string,字串,在Age處也可以寫 %d,代表數字整數(但是要注意str與int之間的轉換,因為數字也是str,要是想用%d,需要轉化為int)
%f 代表浮點,一般是小數
使用者互動+格式化輸出 format的使用方法:
1 name = input("Name:") 2 age = input("Age:") 3 job = input("Job:") 4 salary = input("Salary:") 5 6 info = ''' -----------Info of {Name}----------- 7 Name: {Name} 8 Age:{Age} 9 Job:{Job} 10 Salary: {Salary} 11 ''' .format(Name = name, Age = age, Job = job, Salary = salary) 12 13 print(info)
使用者互動+格式化輸出 format{引數}的使用方法:
1 name = input("Name:") 2 age = input("Age:") 3 job = input("Job:") 4 salary = input("Salary:") 5 6 info = ''' -----------Info of {0}----------- 7 Name: {0} 8 Age:{1} 9 Job:{2} 10 Salary: {3} 11 ''' .format(name, age, job, salary) 12 13 print(info)
五、初識模組
什麼是模組? python有標準庫,直接import匯入進來,再呼叫這個模組的語句就可以使用了。
比如之前說的輸入使用者名稱密碼是明文的,怎麼搞成密文的?
1 # Auther: Tank Jarvis 2 import getpass 3 4 username = input("Username: ") 5 password = getpass.getpass("Password: ") 6 7 print(username,password) 8 # pycharm不能使用這個模組哦!
六、邏輯判斷
1. if-else while-else
1 # Auther: Tank Jarvis 2 3 _username = "tank" 4 _password = "123" 5 count = 0 6 7 while count < 3: 8 username = input("Username: ") 9 password = input("Password: ") 10 11 if username == _username and password == _password: 12 print("Welcome {name}!".format(name = username)) 13 break 14 else: 15 print("You input a wrong num or passwd, please try again!") 16 count += 1 17 else: 18 print("You have tried 3 times wrong, get off")
2. 猜數字-while迴圈 注意數字是int ,input 預設把輸入的變成字串
1 # Auther: Tank Jarvis 2 age_of_tank = 28 3 print("Let's play a game , guess the age of tank.") 4 count = 0 5 while count < 6: 6 guessnum = input("Input your answer: ") 7 if int(guessnum) > int(age_of_tank): 8 print("Your answer is bigger, try again.") 9 count += 1 10 elif int(guessnum) == int(age_of_tank): 11 print("You got the right answer, good job!") 12 break 13 else: 14 print("Your answer is smaller, try again") 15 count += 1 16 else: 17 print("You have tried 6 times, Bad luck, bye")
3. 猜數字-for迴圈
1 # Auther: Tank Jarvis 2 age_of_tank = 28 3 print("Let's play a game , guess the age of tank.") 4 for i in range(6): 5 guessnum = input("Input your answer: ") 6 if int(guessnum) > int(age_of_tank): 7 print("Your answer is bigger, try again.") 8 elif int(guessnum) == int(age_of_tank): 9 print("You got the right answer, good job!") 10 break 11 else: 12 print("Your answer is smaller, try again") 13 else: 14 print("You have tried 6 times, Bad luck,bye")
4.猜數字-無限迴圈
1 # Auther: Tank Jarvis 2 age_of_tank = 28 3 print("Let's play a game , guess the age of tank.") 4 count = 0 5 while count < 6: 6 guessnum = input("Input your answer: ") 7 if int(guessnum) > int(age_of_tank): 8 print("Your answer is bigger, try again.") 9 count += 1 10 elif int(guessnum) == int(age_of_tank): 11 print("You got the right answer, good job!") 12 break 13 else: 14 print("Your answer is smaller, try again") 15 count += 1 16 if count == 6: 17 confirm = input("Do you want to continue guess?") 18 if confirm != 'n': 19 count = 0 20 else: 21 break
5.break-continue
continue 是直接跳到下一次迴圈
break 是結束整個迴圈
6.迴圈套迴圈
1 for i in range(10): 2 print('---------', i ) 3 for j in range(10): 4 print(j) 5 if j > 5: 6 break
七:練習
1.編寫登陸介面
- 輸入使用者名稱密碼
- 認證成功後顯示歡迎資訊
- 輸錯三次後鎖定
2.多級選單
- 三級選單
- 可依次選擇進入各子選單
- 所需新知識點:列表、字典