1. 程式人生 > >python之路-Day1 自記筆記

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']

另外變數名字要有意義,別整一個字母就當變數 、別整拼音當變數、別整中文當變數 01405150


三、字元編碼

計算機只認識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.多級選單

  • 三級選單
  • 可依次選擇進入各子選單
  • 所需新知識點:列表、字典