一沮脖、輸入與輸出
1金矛、print打印
(1)打印字符串:%s
>>> name = "yisan"
>>> print ("hello %s,Nice to meet you!!" %name)
hello yisan,Nice to meet you!!
(2)打印數(shù)字:%d
>>> age = 26
>>> print ("You are %d" %age)
You are 26
(3)若不知道打印內(nèi)容的類型:%r
>>> n = 100
>>> print ("You print is %r" %n)
You print is 100
>>> name = "yisan"
>>> age = 26
>>> print ("student info : %s %d" %(name,age))
student info : yisan 26
2、input輸入
n = input("Enter any content:")
print ("your input is %r" %n)
按F5快捷鍵運行程序勺届,當運行到input()時驶俊,需要用戶輸入一些信息,用print打印出來(python2中使用:raw_input()代替input()):
Enter any content:tom
your input is 'tom'
3免姿、引號與注釋
(1)引號:
python中饼酿,不區(qū)分單引號(' ')與雙引號(" "),都用來表示一個字符串:
>>> print("hello")
hello
>>> print('world')
world
單引號與雙引號可以互相嵌套使用胚膊,但不能交叉使用:
>>> print("你說:'早上好'")
你說:'早上好'
>>>
>>> print("你向我微笑'向我問好"故俐。')
SyntaxError: invalid character in identifier
(2)注釋:
>>> #單行注釋
>>> print("hello world")#打印hello world
hello world
多行注釋:用""" """
"""
你好,
早上好
中午好
下午好
晚上好
"""
二紊婉、分支與循環(huán)
1药版、if 語句:
>>> a = 2
>>> b = 3
>>> if a > b:
print("a max")
else:
print("b max")
b max
python中的if語句通過“==”運算符判斷相等,通過“!=”判斷不相等:
>>> student = "yisan"
>>> if student == "yisan":
print("yisan,You are on duty today.")
else:
print("Please call yisan to duty.")
yisan,You are on duty today.
python中喻犁,用“in”和“not in”表示包含關(guān)系:
>>> hi = "Hello,World!!!"
>>> if "Hello" in hi:
print("Contain")
else:
print("Not Contain")
Contain
if語句可以進行布爾類型的判斷:
>>> a = True
>>> if a:
print("a is True")
else:
print("a is not True")
a is True
demo:
results = 75
if results >=90:
print("優(yōu)秀")
elif results>=70:
print("良好")
elif results>=60:
print('及格')
else:
ptiny('不及格')
2刚陡、for語句
>>> for i in "Hello,World!!!":
print(i)
H
e
l
l
o
,
W
o
r
l
d
!
!
!
>>> fruits = ['banana','apple','mango']
>>> for fruit in fruits:
print(fruit)
banana
apple
mango
range()函數(shù)默認從0開始循環(huán):
>>> for i in range(5):
print(i)
0
1
2
3
4
range()函數(shù)也可以設(shè)置起始位置和步長,如打印1到10之間的奇數(shù):
>>> for i in range(1,10,2):
print(i)
1
3
5
7
9
三株汉、數(shù)組與字典
1筐乳、數(shù)組
數(shù)組用方括號([ ])表示,里面的每一項用逗號(乔妈,)隔開
>>> lists = [1,2,3,'a',4]
>>> lists
[1, 2, 3, 'a', 4]
>>> lists[0]
1
>>> lists[3]
'a'
>>> lists[4]
4
>>> lists[4]='b'
>>> lists[4]
'b'
>>> lists.append('c')
>>> lists
[1, 2, 3, 'a', 'b', 'c']
2蝙云、字典
字典用花括號({ })表示,里面的項成對出現(xiàn)路召,一個key對應(yīng)一個value勃刨;key與value之間用(:)分隔;不同的項之間用逗號(,)分隔
>>> dicts = {"username":"yisan",'password':123456}
>>> dicts.keys()
dict_keys(['username', 'password'])
>>> dicts.values()
dict_values(['yisan', 123456])
>>> dicts.items()
dict_items([('username', 'yisan'), ('password', 123456)])
>>> for k,v in dicts.items():
print("dicts keys is %r" %k)
print("dicts values is %r" %v)
dicts keys is 'username'
dicts values is 'yisan'
dicts keys is 'password'
dicts values is 123456
注意:python字典中股淡,key必須獨一無二身隐,value可以相同
keys()函數(shù)返回字典key的列表
values()函數(shù)返回字典中value的列表
items()函數(shù)將所有的字典項以列表的方式返回,這些列表中的每一項都包含key和value唯灵,但是項在返回時并不會按照他們在字典中的存放順序贾铝。如果想按照存放的順序輸出,可通過下面的方式:
#通過zip方法合并兩個List為Dictionary
#遍歷會按原先的順序
keys = ["b","a","c","e","d"]
values = ["2","1","3","5","4"]
for key,value in zip(keys,values):
print(key,value)
輸出結(jié)果:
=======RESTART: C:/Users/川/Desktop/test.py ========
b 2
a 1
c 3
e 5
d 4
四、函數(shù)垢揩、類和方法
1玖绿、函數(shù)
在python中,通過def關(guān)鍵字來定義函數(shù):
>>> def add(a,b):
print(a+b)
>>> add(3,5)
8
>>> def add(a,b):
return a+b
>>> add(2,5)
7
>>> def add(a=1,b=2):
return a+b
>>> add()
3
>>> add(3,5)
8
2叁巨、類和方法
python中斑匪,用class關(guān)鍵字來創(chuàng)建類
class A(object): #python3中object可以不用聲明
def add(self,a,b):
return a+b
count = A()
print(count.add(3,5))
輸出結(jié)果:
============ RESTART: C:/Users/川/Desktop/test.py ============
8
上面創(chuàng)建了一個A類,在類下面創(chuàng)建了一個add()方法锋勺,方法的創(chuàng)建使用def關(guān)鍵字蚀瘸,方法的第一個參數(shù)必須是存在的,一般習慣命名為“self”庶橱,但是調(diào)用這個方法時贮勃,不需要為這個參數(shù)傳值。
一般在創(chuàng)建類時會首先聲明初始化方法init():
class A(object):
def __init__(self,a,b):
self.a = int(a)
self.b = int(b)
def add(self):
return self.a+self.b
count = A('4',5)
print(count.add())
輸出結(jié)果:
============ RESTART: C:/Users/川/Desktop/test.py =============
9
當調(diào)用A類時悬包,首先執(zhí)行init()方法進行初始化,將輸入的參數(shù)類型轉(zhuǎn)化為int類型馍乙,用來保證程序的容錯性布近。add()方法可以直接拿初始化方法init()的self.a和self.b兩個數(shù)進行計算
2、繼承
class A():
def add(self,a,b):
return a+b
class B(A):
def sub(self,a,b):
return a-b
print(B().add(4,5))
print(B().sub(5,4))
輸出結(jié)果:
============RESTART: C:/Users/川/Desktop/test.py =============
9
1
B類繼承了A類丝格,所以B類 擁有了add()方法撑瞧,從而B類可以直接調(diào)用add()方法
五、模塊
1显蝌、引用模塊
在python中预伺,通過import...或from...import...的方式引用模塊,例如:
import time
print(time.ctime())
輸出結(jié)果:
===========RESTART: C:\Users\川\Desktop\test.py =============
Sat Jun 24 21:48:34 2017
或:
from time import ctime
print(ctime())
輸出結(jié)果:
============RESTART: C:\Users\川\Desktop\test.py =============
Sat Jun 24 21:50:45 2017
又如:
from time import *
print(ctime())
print("休眠兩秒")
sleep(2)
print(ctime())
輸出結(jié)果:
============RESTART: C:\Users\川\Desktop\test.py ===========
Sat Jun 24 21:53:43 2017
休眠兩秒
Sat Jun 24 21:53:45 2017
星號“*”表示模塊下的所有方法
2曼尊、模塊調(diào)用
python中酬诀,既可以調(diào)用系統(tǒng)模塊,也可以調(diào)用自己創(chuàng)建的模塊:
創(chuàng)建一個目錄project骆撇,并在目錄下創(chuàng)建兩個文件:
project/
|----pub.py
|__count.py
在pub.py文件中創(chuàng)建add函數(shù):
pub.py:
def add(a,b):
return a+b
在count.py中調(diào)用pub.py文件中的函數(shù)add():
count.py:
from pub import add
print(add(4,5))
輸出結(jié)果:
=============RESTART: D:\project\count.py =================
9
以上就實現(xiàn)了跨文件的函數(shù)調(diào)用瞒御。
3、跨目錄模塊調(diào)用(1)
如果調(diào)用文件與被調(diào)用文件在一個目錄下面神郊,則可以非常方便的調(diào)用。如果被調(diào)用的文件與調(diào)用文件不在同一個目錄下呢?假設(shè)文件目錄結(jié)構(gòu)如下:
project/
|-----model/----pub.py
|
|_____count.py
count.py
from model.pub import add
print(add(4,5))
輸出結(jié)果:
==============RESTART: D:\project\count.py =================
9
4兜辞、跨目錄調(diào)用(2)
當項目變得復(fù)雜之后姨夹,需要涉及多個文件目錄之間的調(diào)用,結(jié)構(gòu)如下:
count.py
class A():
def add(self,a,b):
return a+b
new_count.py
from count import A
class B(A):
def sub(self,a,b):
return a-b
result = B().add(2,5)
print(result)
輸出結(jié)果:
============ RESTART: D:\project\model\new_count.py ============
7
test.py
from model import new_count
test = new_count.B()
test.add(2,5)
輸出結(jié)果:
Traceback (most recent call last):
File "D:\project\test.py", line 1, in <module>
from model import new_count
File "D:\project\model\new_count.py", line 1, in <module>
from count import A
ImportError: No module named 'count'
執(zhí)行test.py時夕晓,會報錯宛乃,提示在new_count.py中找不到“count”模塊,是因為:
站在new_count.py的位置,執(zhí)行“from count import A”時烤惊,可以找到“count”文件乔煞,但是站在test.py的位置執(zhí)行“from count import A”時,就找不到“count”文件了柒室。
修改test.py文件如下:
import sys
sys.path.append("./model") #將model目錄添加到系統(tǒng)變量path下
from model import new_count
test = new_count.B()
test.add(2,5)
輸出結(jié)果:
================RESTART: D:\project\test.py ==================
7
六渡贾、異常
1、認識異常
如下異常情況:
>>> open("abc.txt",'r')
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
open("abc.txt",'r')
FileNotFoundError: [Errno 2] No such file or directory: 'abc.txt'
提示:No such file or directory: 'abc.txt'(沒有abc.txt這樣的文件或目錄)雄右,可以用python提供的try...except...語句來 接受并處理這個異常:
>>> try:
open("abc.txt",'r')
except FileNotFoundError:
print("異常了空骚!")
輸出結(jié)果:
異常了!
又如:
try:
print(aa)
except NameError:
print("這是一個name異常擂仍!")
輸出結(jié)果:
=============RESTART: C:\Users\川\Desktop\test.py =============
這是一個name異常囤屹!
在python中,所有的異常類型都繼承Exception逢渔,所以可以使用它來接受所有類型的異常:
try:
open("abc.txt",'r')
except Exception:
print("異常了@呒帷!")
輸出結(jié)果:
===========RESTART: C:\Users\川\Desktop\test.py ==============
異常了K嗬智厌!
從python2.5版本之后,所有異常類型都有了新的基類BaseException盲赊。Exception同樣也繼承自BaseException铣鹏,所以我們也可以使用BaseException來接收所有類型的異常:
try:
open("abc.txt",'r')
print(123)
except BaseException:
print("異常了!哀蘑!!")
輸出結(jié)果:
============ RESTART: C:\Users\川\Desktop\test.py =============
異常了3闲丁!!
對于上面的例子绘迁,打印異常時合溺,我們并不知道到底哪一行代碼起了異常,可以通過下面的方法讓python直接告訴我們異常的原因:
try:
open("abc.txt",'r')
print(123)
except BaseException as msg:
print(msg)
輸出結(jié)果:
=========== RESTART: C:\Users\川\Desktop\test.py ==============
[Errno 2] No such file or directory: 'abc.txt'
我們在BaseException后面定義了msg變量來接收異常信息缀台,并通過print將其打印出來辫愉。此處寫法與python2有所不同,在python2中用逗號“将硝,”代替“as”
python中常見的異常如下表所示:
| 異常 | 描述 |
|----------------------|------------------------------------------------------------- :|
|BaseException |新的所有異常類型的基類 |
|Exception |所有異常類型的基類恭朗,但繼承BaseException類 |
|AssertionError |assert語句失敗 |
|FileNotFoundError|試圖打開一個不存在的文件或目錄 |
|AttributeError |試圖訪問的對象沒有屬性 |
|OSError |當系統(tǒng)函數(shù)返回一個系統(tǒng)相關(guān)的錯誤,包括I/O故障依疼,如找不到文件或磁盤已滿時痰腮,引發(fā)此異常 |
|NameError |使用一個還未賦值對象的變量 |
|IndexError |當一個序列超出了范圍 |
|SyntaxError |當解析器遇到一個語法錯誤時引發(fā) |
|KeyboardInterrupt|Ctrl+C被按下,程序被強行終止 |
|TypeError |傳入的對象類型與要求不符 |
2律罢、更多異常用法
下面來學習異常的更多用法:try....except與else配合使用:
try:
aa = "異常測試"
print(aa)
except BaseException as msg:
print(msg)
else:
print("沒有異常膀值!")
輸出結(jié)果:
============RESTART: C:\Users\川\Desktop\test.py ==============
異常測試
沒有異常棍丐!
else語句只有在沒有異常的情況下才會被執(zhí)行,但是有些情況下沧踏,無論是否出現(xiàn)異常歌逢,操作都希望被執(zhí)行,如文件的關(guān)閉翘狱、鎖的釋放秘案、把數(shù)據(jù)庫連接返還給連接池等操作 ,可以通過使用try...except...finally...語句來實現(xiàn)這樣的需求:
try:
print(aa)
except Exception as e:
print(e)
finally:
print("不管是否異常潦匈,我都會被執(zhí)行阱高。")
輸出結(jié)果:
============ RESTART: C:\Users\川\Desktop\test.py =============
name 'aa' is not defined
不管是否異常,我都會被執(zhí)行茬缩。
又如:
try:
aa = "異常測試"
print(aa)
except Exception as e:
print(e)
finally:
print("不管是否異常赤惊,我都會被執(zhí)行。")
輸出結(jié)果:
=============RESTART: C:\Users\川\Desktop\test.py ==============
異常測試
不管是否異常凰锡,我都會被執(zhí)行未舟。
3、拋出異常
print()方法只能打印錯誤信息掂为,python中提供了raise方法來拋出一個異常信息:
from random import randint
#生成一個1到9之間的隨機整數(shù)
number = randint(1,9)
if number %2 ==0:
raise NameError("%d is even" %number)
else:
raise NameError("%d is odd" %number)
輸出結(jié)果:
============= RESTART: C:\Users\川\Desktop\test.py ============
Traceback (most recent call last):
File "C:\Users\川\Desktop\test.py", line 5, in <module>
raise NameError("%d is even" %number)
NameError: 6 is even
通過randinnt()方法隨機生成1到9之間的整數(shù)裕膀,然后判斷這個數(shù)字時奇數(shù)還是偶數(shù),最后通過raise拋出NameError異常菩掏。(注:判斷奇偶數(shù)與NameError之間沒有任何關(guān)系魂角,這里只是演示如何通過raise拋出各種類型的異常)
續(xù):
1昵济、全局變量global的用法
python 中使用 global 來設(shè)置全局變量智绸,如下:
global a
a=1
def change():
print(a)
也就是說,聲明一個全局變量访忿,首先要在方法外的地方聲明一個變量瞧栗,然后在方法內(nèi)使用它的時候,先要對這個變量聲明下 global , 然后再進行修改海铆,否則會人會你聲明的是一個方法內(nèi)的局部變量迹恐。