Python基礎-week01 Python安裝/變量/輸入/及循環語句使用

 

一.Python介紹

  (1).目前Python主要應用領域:html

  • 雲計算: 雲計算最火的語言, 典型應用OpenStack
  • WEB開發: 衆多優秀的WEB框架,衆多大型網站均爲Python開發,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
  • 科學運算、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas
  • 系統運維: 運維人員必備語言
  • 金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,並且重要性逐年提升。緣由:做爲動態語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生產效率遠遠高於c,c++,java,尤爲擅長策略回測
  • 圖形GUI: PyQT, WxPython,TkInter

  (2).Python在一些公司的應用: java

  • 谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬蟲、Google廣告等項目都在大量使用Python開發
  • CIA: 美國中情局網站就是用Python開發的
  • NASA: 美國航天局(NASA)大量使用Python進行數據分析和運算
  • YouTube:世界上最大的視頻網站YouTube就是用Python開發的
  • Dropbox:美國最大的在線雲存儲網站,所有用Python實現,天天網站處理10億個文件的上傳和下載
  • Instagram:美國最大的圖片分享社交網站,天天超過3千萬張照片被分享,所有用python開發
  • Facebook:大量的基礎庫均經過Python實現的
  • Redhat: 世界上最流行的Linux發行版本中的yum包管理工具就是用python開發的
  • 豆瓣: 公司幾乎全部的業務均是經過Python開發的
  • 知乎: 國內最大的問答社區,經過Python開發(國外Quora)
  • 春雨醫生:國內知名的在線醫療網站是用Python開發的
  • 除上面以外,還有搜狐、金山、騰訊、盛大、網易、百度、阿里、淘寶 、土豆、新浪、果殼等公司都在使用Python完成各類各樣的任務。

 二.Python是怎樣的一種語言?

  (1).編譯和解釋的區別是什麼?python

  編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機能夠直接以機器語言來運行此程序,速度很快; c++

  而解釋器則是隻在執行程序時,才一條一條的解釋成機器語言給計算機來執行,因此運行速度是不如編譯後的程序運行的快的. 算法

  這是由於計算機不能直接認識並執行咱們寫的語句,它只能認識機器語言(是二進制的形式)windows

   

  (2).編譯型vs解釋型python3.x

  編譯型:

  優勢:編譯器通常會有預編譯的過程對代碼進行優化。由於編譯只作一次,運行時不須要編譯,因此編譯型語言的程序執行效率高。能夠脫離語言環境獨立運行。

  缺點:編譯以後若是須要修改就須要整個模塊從新編譯。編譯的時候根據對應的運行環境生成機器碼,不一樣的操做系統之間移植就會有問題,須要根據運行的操做系統環境編譯不一樣的可執行文件。

  解釋型:瀏覽器

  優勢:有良好的平臺兼容性,在任何環境中均可以運行,前提是安裝瞭解釋器(虛擬機)。靈活,修改代碼的時候直接修改就能夠,能夠快速部署,不用停機維護。tomcat

  缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。多線程

 

  (3).Python優缺點

  先看優勢:

  1. Python的定位是「優雅」、「明確」、「簡單」,因此Python程序看上去老是簡單易懂,初學者學Python,不但入門容易,並且未來深刻下去,能夠編寫那些很是很是複雜的程序。
  2. 開發效率很是高,Python有很是強大的第三方庫,基本上你想經過計算機實現任何功能,Python官方庫裏都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大下降開發週期,避免重複造輪子。
  3. 高級語言————當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節
  4. 可移植性————因爲它的開源本質,Python已經被移植在許多平臺上(通過改動使它可以工 做在不一樣平臺上)。若是你當心地避免使用依賴於系統的特性,那麼你的全部Python程序無需修改就幾乎能夠在市場上全部的系統平臺上運行
  5. 可擴展性————若是你須要你的一段關鍵代碼運行得更快或者但願某些算法不公開,你能夠把你的部分程序用C或C++編寫,而後在你的Python程序中使用它們。
  6. 可嵌入性————你能夠把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。

再看缺點:

  1. 速度慢,Python 的運行速度相比C語言確實慢不少,跟JAVA相比也要慢一些,所以這也是不少所謂的大牛不屑於使用Python的主要緣由,但其實這裏所指的運行速度慢在大多數狀況下用戶是沒法直接感知到的,必須藉助測試工具才能體現出來,好比你用C運一個程序花了0.01s,用Python是0.1s,這樣C語言直接比Python快了10倍,算是很是誇張了,可是你是沒法直接經過肉眼感知的,由於一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數狀況下Python已經徹底能夠知足你對程序速度的要求,除非你要寫對速度要求極高的搜索引擎等,這種狀況下,固然仍是建議你用C去實現的。
  2. 代碼不能加密,由於PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認爲這算是一個缺點,若是你的項目要求源代碼必須是加密的,那你一開始就不該該用Python來去實現。
  3. 線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是計算機程序設計語言解釋器用於同步線程的工具,使得任什麼時候刻僅有一個線程在執行,Python的線程是操做系統的原生線程。在Linux上爲pthread,在Windows上爲Win thread,徹底由操做系統調度線程的執行。一個python解釋器進程內有一條主線程,以及多條用戶程序的執行線程。即便在多核CPU平臺上,因爲GIL的存在,因此禁止多線程的並行執行。關於這個問題的折衷解決方法,咱們在之後線程和進程章節裏再進行詳細探討。

 

  (4).Python解釋器介紹 

  當咱們編寫Python代碼時,咱們獲得的是一個包含Python代碼的以.py爲擴展名的文本文件。要運行代碼,就須要Python解釋器去執行.py文件。

  因爲整個Python語言從規範到解釋器都是開源的,因此理論上,只要水平夠高,任何人均可以編寫Python解釋器來執行Python代碼(固然難度很大)。事實上,確實存在多種Python解釋器。

  CPython

  當咱們從Python官方網站下載並安裝好Python 2.7後,咱們就直接得到了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,因此叫CPython。在命令行下運行python就是啓動CPython解釋器。

  CPython是使用最廣的Python解釋器。教程的全部代碼也都在CPython下執行。

  IPython

  IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所加強,可是執行Python代碼的功能和CPython是徹底同樣的。比如不少國產瀏覽器雖然外觀不一樣,但內核其實都是調用了IE。

  CPython用>>>做爲提示符,而IPython用In [序號]:做爲提示符。

  PyPy

  PyPy是另外一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),因此能夠顯著提升Python代碼的執行速度。

  絕大部分Python代碼均可以在PyPy下運行,可是PyPy和CPython有一些是不一樣的,這就致使相同的Python代碼在兩種解釋器下執行可能會有不一樣的結果。若是你的代碼要放到PyPy下執行,就須要瞭解PyPy和CPython的不一樣點

  Jython

  Jython是運行在Java平臺上的Python解釋器,能夠直接把Python代碼編譯成Java字節碼執行。

  IronPython

  IronPython和Jython相似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,能夠直接把Python代碼編譯成.Net的字節碼。

 

 三.選擇Py2.x仍是Py3.x?

  目前大部分的python的程序都基於py2.7+以上寫的,可是要學python的話建議從py3.x開始,而且瞭解py2.x與py.3.x的區別。並推進py2.x向py3.x的使用!

四.Python安裝

  1):windows安裝

    1、下載安裝包

       https: / / www.python.org / downloads /
    2 、安裝
       默認安裝路徑:C:\python27
    3 、配置環境變量
       【右鍵計算機】 - - 》【屬性】 - - 》【高級系統設置】 - - 》【高級】 - - 》【環境變量】 - - 》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】  - - >     【Python安裝目錄追加到變值值中,用 ; 分割】
     如:原來的值;C:\python27,切記前面有分號

  2):Linux/Mac安裝

    無需安裝,原裝Python環境

    ps:若是自帶2.7,請更新至3.x

 

 五.Hello World程序

   print ('Hello world!')
  其餘語言版本的hello world,請百度自行查詢。
  

六.變量 字符編碼

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

    (2).變量的賦值

       name1='jame'
       name2='tom'
       print (name1,name2)
       name2=name1
       name1='Jack' #修改name1的值,輸入的name1/name2,其中name2的值不會變。   

    (3).編碼

      python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill)

     顯然ASCII碼沒法將世界上的各類文字和符號所有表示,因此,就須要新出一種能夠表明全部字符和符號的編碼,即:Unicode

    Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,
    注:此處說的的是最少2個字節,可能更多

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

    因此,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),若是是以下代碼的話:

    報錯:ascii碼沒法表示中文

1
2
3
#!/usr/bin/env python
  
print  "你好,世界"

    改正:應該顯示的告訴python解釋器,用什麼編碼來執行源代碼,即:

1
2
3
4
#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
print  "你好,世界"

    注意:python3.x默認爲utf-8格式,不須要單獨爲每一個.py文件手動添加。

 

  (4).註釋/及其註釋的格式

    1):註釋類型

      " 註釋"

      '''註釋'''/""" 註釋 """

    2):print ("註釋、用戶輸入、格式化輸出

      name=input('name:')

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

       job = input("Job:")

       saraly = input("Saraly:")

     info='''

    -----------------info of %s ------------------
    Name:%s
    Age:%d
    Job:%s
    Saraly:%s
    ''' % (name,name,age,job,saraly)


    print (info)

    



    print ('之後採用這種模式打印格式!!!!:')
    info1='''
    ---------------info1 of {_name}----------------
    Name:{_name}
    Age:{_age}
    Job:{_job}
    Saraly:{_saraly}
    '''.format(_name=name,_age=age,_job=job,_saraly=saraly)
    print (info1)


    
info2='''
  
    -------------info2 of {0}-----------------
    Name:{0}
    Age:{1}
    Job:{2}
    Saraly:{3}
    '''.format(name,age,job,saraly)

    print (info2)
 

 

七.用戶輸入

   

5
6
7
#!/usr/bin/env python
#_*_coding:utf-8_*_
 
 
#name = raw_input("What is your name?") #only on python 2.x
name  =  input ( "What is your name?" )
print ( "Hello "  +  name )

    輸入密碼時,若是想要不可見,須要利用getpass 模塊中的 getpass方法,即:

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
import  getpass
  
# 將用戶輸入的內容賦值給 name 變量
pwd = getpass.getpass("請輸入密碼:")
  
# 打印輸入的內容
print (pwd)

 

 八表達式if else語句

  (1).if-else

    例如:if name == "alex" and pwd == "cmd":

         print ( "歡迎,alex!" )
       else :
         print ( "用戶名和密碼錯誤" )

  (2).if-elif-elif-else

    例如:

      if user_input == my_age:

         print ( "Congratulations, you got it !" )
      elif  user_input < my_age:
         print ( "Oops,think bigger!" )
      else :  #也能夠不用else,所有用elif保證條件的準確性,防止不可肯定的因素。
         print ( "think smaller!" )

 

  *外層變量,能夠被內層代碼使用

  *內層變量,不該被外層代碼使用

 

九.表達式for 循環

  最簡單的循環10次:

  for in range(10):

     print ( "loop:" , i )
 
  

十.break and continue 

   需求一:仍是上面的程序,可是遇到小於5的循環次數就不走了,直接跳入下一次循環

1
2
3
4
for  in  range ( 10 ):
     if  i< 5 :
         continue  #不往下走了,直接進入下一次loop
     print ( "loop:" , i )

  需求二:仍是上面的程序,可是遇到大於5的循環次數就不走了,直接退出

1
2
3
4
for  in  range ( 10 ):
     if  i> 5 :
         break  #不往下走了,直接跳出整個loop
     print ( "loop:" , i )

 

 

 十一.表達式while 循環

  有一種循環叫死循環,一經觸發,就運行個天荒地老、海枯石爛。

  海枯石爛代碼

1
2
3
4
5
count  =  0
flag=True
while  True :
     print ( "你是風兒我是沙,纏纏綿綿到天涯..." ,count)
     count  + = 1
      if conut>3:
      flag=False
else:  #while也能夠用else,來表示條件不符合走這個分支!!
  print('輸入次數過大,請稍後再試!')
  break
 
 
 

 

 

十二.做業

  

 

   1.編寫登錄接口

    

 1 #Author:Jame Mei
 2 '''第一週的做業:輸入用戶名密碼,認證成功後提示登錄成功,輸入三次錯誤後鎖定用戶。'''
 3 
 4 count = 0   #記錄用戶輸入密碼的次數
 5 flag = 1    #標誌位
 6 lock = []
 7 user_pass = []
 8 username = input('please input your name:')
 9 
10 #讀取黑名單的內容
11 f = open('black_mingdan','r')
12 lock_file = f.readlines()
13 f.close()
14 #將黑名單文件內容做爲列表元素追加到列表中
15 for i in lock_file:
16     line = i.strip('\n')
17     lock.append(line)
18 
19 
20 #若輸入的用戶名在黑名單中,若是在則給出提示信息:用戶已經被鎖定,請聯繫管理員。
21 if username in lock:
22     print('User %s Have Been Locked.It is not allow to login,please contact Administrator.' %username)
23 
24 else:
25     while True:
26         count += 1
27         passwd = input("please input your password:")
28         f = open('user_information', 'r')
29         user_file = f.readlines()
30         f.close()
31 
32         for i in user_file:
33             user_pass = i.strip().split(',')
34             # 判斷輸入的用戶名==user_pass[0] and 密碼==user_pass[1],若是相等,則提示歡迎信息並退出循環,若是不相等則
35             # 結束本次循環
36             if username == user_pass[0] and passwd == user_pass[1]:
37                 print('welcome user %s login !' % username)
38                 flag = True
39                 break
40             else:
41                 continue
42 
43         # 若flag爲真,則用戶名和密碼輸入正確跳出整個循環體,反之,若用戶輸入密碼錯誤的次數爲3,則給出提示信息:用戶已經被鎖定
44         # 並將username追加到黑名單中
45         if flag is True:
46             break
47         else:
48             if count == 3:
49                 print('User Have Been try 3 times,Have Been Locked')
50                 lock_file = open('black_mingdan', 'a')
51                 # lock_file.write('Have Been Locked User:%s\n' %username)
52                 lock_file.write('%s\n' % username)
53                 lock_file.close()
54                 break
View Code

 

  #優化版:

 1 Author Meijinmeng
 2 '''
 3 2.升級需求:login2.py
 4 能夠支持多個用戶登陸 (提示,經過列表存多個帳戶信息)
 5 用戶3次認證失敗後,退出程序,再次啓動程序嘗試登陸時,仍是鎖定狀態(提示:需把用戶鎖定的狀態存到文件裏)
 6 '''
 7 account_pwd={
 8     'jame':{'pwd':'123456','count':0},
 9     'alice':{'pwd':'123456','count':0},
10     'tomcat':{'pwd':'123456','count':0}
11 }
12 while True:
13     account=input("Please your account:").strip()
14     with open('blackdb.txt', 'r') as f:
15         for line in f:     #lock_users = f.read().split('|') 用文件查找替換的思路,若是有大量黑名單下面效率可能會高
16             if account == line.strip():
17                 print('%s already locked,Please contact the administrator!' % account)
18                 exit(0)
19 
20     if account in account_pwd:
21         if account_pwd[account]['count'] > 2:
22             print('Too many input times,locking!')
23             with open('blackdb.txt', 'a+') as f:
24                 f.write('%s\n' %account)    #f.write('%s|' %account) 用換行的方式每行只寫1個有點浪費呀
25             break
26 
27         password = input("Please your passord>>>:")
28         if password == account_pwd[account]['pwd']:
29             print("Welcome {_username},login success!".format(_username=account))
30             break
31         else:
32             print ('Your password error,Please try agin!')
33             account_pwd[account]['count']+=1
34             continue
35     else:
36         print ("Your input account never existed ,please try agin!")
37         continue
View Code

 

 

   2.多級菜單並檢測輸入次數過多

  1 #Author:Jame Mei
  2 university_list = {
  3     "安徽省": {
  4         "合肥": ["中國科技大學", "合肥工業大學"],
  5         "蚌埠":["安徽財經大學","蚌埠醫學院"],
  6         "安慶": ["安慶學院"],
  7         "阜陽": ["阜陽學院"]
  8     },
  9     "江蘇省": {
 10         "南京": ["南京大學", "南京工業大學"],
 11         "南通": ["南通大學"],
 12         "蘇州": ["蘇州大學"],
 13     },
 14     "浙江省": {
 15         "杭州": ["浙江大學", "杭州電子科技大學"],
 16         "寧波": ["寧波大學"],
 17         "嘉興": ["嘉興學院"],
 18     }
 19 }
 20 
 21 
 22 flag = True  # 標記
 23 try_province = 0  # 次數設置
 24 try_city = 0
 25 try_school = 0
 26 
 27 while flag:  # while循環語句,即在某種條件下執行某段程序
 28     if try_province <3:
 29         province_str1 = "歡迎進入沿海省份"
 30         print(province_str1.center(20, '-'))  # 打印好看一點,處於中心位置
 31 
 32         for province in university_list.keys():  # for in循環遍歷,key函數用於判斷province是否存在於字典中,如在字典裏返回true,不然返回false。
 33             print(province)
 34         print("----------------------------")
 35         province_input = input("請輸入省份:")
 36         city_flag = True
 37 
 38         while city_flag:
 39             if try_city<3:
 40                 if province_input.strip() in university_list:
 41                     print("歡迎進入: %s!" % (province_input,))  # 賦值,記得必定要有個逗號
 42                     province_str2 = "歡迎進入沿海地區"
 43                     print(province_str2.center(20, '-'))
 44                     for city in university_list[province_input].keys():
 45                         print(city)
 46                     print("----------------------------")
 47                     city_input = input("請輸入城市名稱:")
 48 
 49                     school_flag = True
 50                     while school_flag:
 51                         if try_school < 3:
 52 
 53                             if city_input.strip() in university_list[province_input]:
 54                                 print("歡迎進入:%s!" % (city_input,))
 55                                 province_str3 = "歡迎進入沿海大學"
 56                                 print(province_str3.center(20, '-'))
 57                                 for school in university_list[province_input][city_input]:
 58                                     print(school)
 59                                 print("----------------------------")
 60                                 school_input = input("請輸入大學名稱:")
 61 
 62                                 if school_input.strip() in university_list[province_input][city_input]:
 63                                     print("歡迎進入:%s!" % (school_input,))
 64                                     print("當前位置:%s--%s--%s " % (province_input, city_input, school_input))
 65                                     print("哈哈哈,已經結束啦啦啦")
 66                                     flag = False
 67                                     city_flag = False
 68                                     school_flag = False
 69                                     break
 70                                 else:
 71                                     print("您輸入的信息有誤,請從新輸入!")
 72                                     try_school += 1
 73 
 74 
 75 
 76 
 77                             else:
 78                                 print("你輸入的城市信息有誤,請從新輸入!")
 79                                 try_city += 1
 80                                 school_flag = False
 81 
 82 
 83 
 84                         else:
 85                             print("您輸入的次數超過三次了喲,退出!")
 86                             flag = False
 87                             city_flag = False  # 這邊注意遺漏
 88                             school_flag = False  # 這邊注意遺漏
 89 
 90                 else:
 91                     print("你輸入的信息有誤,請從新輸入")
 92                     try_province += 1
 93                     city_flag = False
 94 
 95             else:
 96                 print("輸入超過又三次了喲!,退出!")
 97                 flag = False
 98                 city_flag = False
 99 
100     else:
101         print("輸入超過三次,退出!")
102         flag = False
View Code
相關文章
相關標籤/搜索