(1).目前Python主要應用領域:html
(2).Python在一些公司的應用: java
(1).編譯和解釋的區別是什麼?python
編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機能夠直接以機器語言來運行此程序,速度很快; c++
而解釋器則是隻在執行程序時,才一條一條的解釋成機器語言給計算機來執行,因此運行速度是不如編譯後的程序運行的快的. 算法
這是由於計算機不能直接認識並執行咱們寫的語句,它只能認識機器語言(是二進制的形式)windows
(2).編譯型vs解釋型python3.x
解釋型:瀏覽器
優勢:有良好的平臺兼容性,在任何環境中均可以運行,前提是安裝瞭解釋器(虛擬機)。靈活,修改代碼的時候直接修改就能夠,能夠快速部署,不用停機維護。tomcat
缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。多線程
(3).Python優缺點
先看優勢:
再看缺點:
(4).Python解釋器介紹
當咱們編寫Python代碼時,咱們獲得的是一個包含Python代碼的以.py
爲擴展名的文本文件。要運行代碼,就須要Python解釋器去執行.py
文件。
因爲整個Python語言從規範到解釋器都是開源的,因此理論上,只要水平夠高,任何人均可以編寫Python解釋器來執行Python代碼(固然難度很大)。事實上,確實存在多種Python解釋器。
當咱們從Python官方網站下載並安裝好Python 2.7後,咱們就直接得到了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,因此叫CPython。在命令行下運行python
就是啓動CPython解釋器。
CPython是使用最廣的Python解釋器。教程的全部代碼也都在CPython下執行。
IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所加強,可是執行Python代碼的功能和CPython是徹底同樣的。比如不少國產瀏覽器雖然外觀不一樣,但內核其實都是調用了IE。
CPython用>>>
做爲提示符,而IPython用In [
序號
]:
做爲提示符。
PyPy是另外一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),因此能夠顯著提升Python代碼的執行速度。
絕大部分Python代碼均可以在PyPy下運行,可是PyPy和CPython有一些是不一樣的,這就致使相同的Python代碼在兩種解釋器下執行可能會有不一樣的結果。若是你的代碼要放到PyPy下執行,就須要瞭解PyPy和CPython的不一樣點。
Jython是運行在Java平臺上的Python解釋器,能夠直接把Python代碼編譯成Java字節碼執行。
IronPython和Jython相似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,能夠直接把Python代碼編譯成.Net的字節碼。
目前大部分的python的程序都基於py2.7+以上寫的,可是要學python的話建議從py3.x開始,而且瞭解py2.x與py.3.x的區別。並推進py2.x向py3.x的使用!
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
(1).變量定義的規則:
(2).變量的賦值
(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
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!"
)
*外層變量,能夠被內層代碼使用
*內層變量,不該被外層代碼使用
最簡單的循環10次:
for
i
in
range
(
10
):
print
(
"loop:"
, i )
需求一:仍是上面的程序,可是遇到小於5的循環次數就不走了,直接跳入下一次循環
1
2
3
4
|
for
i
in
range
(
10
):
if
i<
5
:
continue
#不往下走了,直接進入下一次loop
print
(
"loop:"
, i )
|
需求二:仍是上面的程序,可是遇到大於5的循環次數就不走了,直接退出
1
2
3
4
|
for
i
in
range
(
10
):
if
i>
5
:
break
#不往下走了,直接跳出整個loop
print
(
"loop:"
, i )
|
有一種循環叫死循環,一經觸發,就運行個天荒地老、海枯石爛。
海枯石爛代碼
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
#優化版:
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
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