本篇為python基礎部分刺覆,包含練習題
基礎知識點:
1.python是解釋型語言,不需要編譯史煎,直接由解釋器解釋運行谦屑。
CPython
當我們從Python官方網(wǎng)站下載并安裝好Python 2.7后,我們就直接獲得了一個官方版本的解釋器:CPython篇梭。這個解釋器是用C語言開發(fā)的氢橙,所以叫CPython。在命令行下運行python
就是啟動CPython解釋器恬偷。
CPython是使用最廣的Python解釋器悍手。教程的所有代碼也都在CPython下執(zhí)行。
IPython
IPython是基于CPython之上的一個交互式解釋器,也就是說坦康,IPython只是在交互方式上有所增強竣付,但是執(zhí)行Python代碼的功能和CPython是完全一樣的。好比很多國產(chǎn)瀏覽器雖然外觀不同涝焙,但內(nèi)核其實都是調用了IE卑笨。
CPython用>>>
作為提示符,而IPython用In [序號]:
作為提示符仑撞。
PyPy
PyPy是另一個Python解釋器赤兴,它的目標是執(zhí)行速度。PyPy采用JIT技術隧哮,對Python代碼進行動態(tài)編譯(注意不是解釋)桶良,所以可以顯著提高Python代碼的執(zhí)行速度。
絕大部分Python代碼都可以在PyPy下運行沮翔,但是PyPy和CPython有一些是不同的陨帆,這就導致相同的Python代碼在兩種解釋器下執(zhí)行可能會有不同的結果。如果你的代碼要放到PyPy下執(zhí)行采蚀,就需要了解PyPy和CPython的不同點疲牵。
Jython
Jython是運行在Java平臺上的Python解釋器,可以直接把Python代碼編譯成Java字節(jié)碼執(zhí)行榆鼠。
IronPython
IronPython和Jython類似纲爸,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,可以直接把Python代碼編譯成.Net的字節(jié)碼妆够。
2.python基本數(shù)據(jù)類型
標準數(shù)據(jù)類型
Python3 中有六個標準的數(shù)據(jù)類型:
Number(數(shù)字)
String(字符串)
List(列表)
Tuple(元組)
Sets(集合)
Dictionary(字典)
Python3 的六個標準數(shù)據(jù)類型中:
不可變數(shù)據(jù)(四個):Number(數(shù)字)识啦、String(字符串)、Tuple(元組)神妹、Sets(集合)颓哮;
可變數(shù)據(jù)(兩個):List(列表)、Dictionary(字典)鸵荠。
特殊類型:
None Ture False
3.python的流程控制語句:
條件語句:
age = int(input("請輸入你家狗狗的年齡: "))
print("")
if age < 0:
print("你是在逗我吧!")
elif age == 1:
print("相當于 14 歲的人冕茅。")
elif age == 2:
print("相當于 22 歲的人。")
elif age > 2:
human = 22 + (age -2)*5
print("對應人類年齡: ", human)
else:
...
python中沒有switch語句蛹找。
while循環(huán):
Python中while語句的一般形式:
count = 0
while count < 5:
print (count, " 小于 5")
count = count + 1
else:
print (count, " 大于或等于 5")
for循環(huán):
sites = ["Baidu", "Google","Runoob","Taobao"]
for site in sites:
print("循環(huán)數(shù)據(jù) " + site)
else:
print("沒有循環(huán)數(shù)據(jù)!")
print("完成循環(huán)!")
除此之外還有python內(nèi)置的range函數(shù)姨伤。
4.字典、列表和元組
這三個是python中最常用到的數(shù)據(jù)結構熄赡,字典和列表也是大部分編程語言中最常用到的數(shù)據(jù)結構。
字典
字典是另一種可變?nèi)萜髂P统菟埃铱纱鎯θ我忸愋蛯ο蟆?/p>
字典的每個鍵值(key=>value)對用冒號(:)分割彼硫,每個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
鍵必須是唯一的,但值則不必拧篮。
值可以取任何數(shù)據(jù)類型词渤,但鍵必須是不可變的,如字符串串绩,數(shù)字或元組缺虐。
一個簡單的字典實例:
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
也可如此創(chuàng)建字典:
dict1 = { 'abc': 456 }
dict2 = { 'abc': 123, 98.6: 37 }
訪問字典中的元素:
dict1['abc']
字典的常用api:
列表:
序列是Python中最基本的數(shù)據(jù)結構。序列中的每個元素都分配一個數(shù)字 - 它的位置礁凡,或索引高氮,第一個索引是0,第二個索引是1顷牌,依此類推剪芍。
Python有6個序列的內(nèi)置類型,但最常見的是列表和元組窟蓝。
序列都可以進行的操作包括索引罪裹,切片,加运挫,乘状共,檢查成員。
此外谁帕,Python已經(jīng)內(nèi)置確定序列的長度以及確定最大和最小的元素的方法峡继。
列表是最常用的Python數(shù)據(jù)類型,它可以作為一個方括號內(nèi)的逗號分隔值出現(xiàn)雇卷。
列表的數(shù)據(jù)項不需要具有相同的類型
創(chuàng)建一個列表鬓椭,只要把逗號分隔的不同的數(shù)據(jù)項使用方括號括起來即可。如下所示:
list1 = ['Google', 'Runoob', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];
與字符串的索引一樣关划,列表索引從0開始小染。列表可以進行截取、組合等贮折。
常用api:
此外裤翩,列表中最強大的還有切片操作。
元組:
Python 的元組與列表類似调榄,不同之處在于元組的元素不能修改踊赠。
元組使用小括號,列表使用方括號每庆。
元組創(chuàng)建很簡單筐带,只需要在括號中添加元素,并使用逗號隔開即可缤灵。
如下實例:
tup1 = ('Google', 'Runoob', 1997, 2000);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d"; # 不需要括號也可以
type(tup3)
創(chuàng)建空元組
tup1 = ();
元組中只包含一個元素時伦籍,需要在元素后面添加逗號蓝晒,否則括號會被當作運算符使用:
tup1 = (50)
type(tup1) # 不加逗號,類型為整型
<class 'int'>
tup1 = (50,)
type(tup1) # 加上逗號帖鸦,類型為元組
元組與字符串類似芝薇,下標索引從0開始,可以進行截取作儿,組合等洛二。
訪問元組
元組可以使用下標索引來訪問元組中的值,如下實例:
tup1 = ('Google', 'Runoob', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print ("tup1[0]: ", tup1[0])
print ("tup2[1:5]: ", tup2[1:5])
練習:
登錄程序
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Created by master on 2018/5/15 14:10.
import os
import pickle
class Login(object):
login_success = False
MAX_LOGIN_TIMES = 3
file_path = "locked.list"
user_table = {"a": "1", "b": "2", "c": "3"}
list_locked = {"a": 0, "b": 0, "c": 0}
#寫文件
def write_file(self):
with open(self.file_path, "wb") as locked_users:
pickle.dump(self.list_locked, locked_users)
#讀文件
def read_file(self):
if os.path.exists(self.file_path):
with open(self.file_path, "rb") as locked_users:
return dict(pickle.load(locked_users))
else:
self.write_file()
#判斷用戶是否被鎖定
def is_locked(self, username):
self.list_locked = self.read_file()
return username in self.list_locked and self.list_locked[username] == self.MAX_LOGIN_TIMES
#登錄
def login(self, username, password):
if not username or not password:
print("用戶名或密碼不能為空攻锰!")
return
if username not in self.user_table:
print("用戶名或密碼錯誤晾嘶,請重試!")
return
if self.is_locked(username):
print("當前用戶已經(jīng)被鎖定口注!")
return
try_login_times = self.list_locked[username]
if username in self.user_table and password == self.user_table.get(username):
print("歡迎回來变擒,%s" % username)
try_login_times = 0
self.login_success = True
else:
print("用戶名或密碼錯誤,請重試寝志!還有%s次機會" % (self.MAX_LOGIN_TIMES - (try_login_times + 1)))
try_login_times = try_login_times + 1
self.list_locked[username] = try_login_times
self.write_file()
# 程序入口
if __name__ == '__main__':
login = Login()
while not login.login_success:
uname = input("請輸入用戶名:")
pword = input("請輸入密碼:")
login.login(uname, pword)