天天看點

python end用法_【Python】文法基礎:開始使用Python

Python的熱度不言而喻,機器學習、資料分析的首選語言都是Python,想要學習Python的小夥伴也很多,我之前也沒有認真用過Python,是以也想體驗一下它的魅力,索性花了兩天集中看了一下它的基本文法,組織了這篇筆記,一是加強一下自己的記憶和了解,二是可以分享給共同學習的小夥伴。這篇筆記主要是Python的基本文法,算是入個門,後面可以邊用邊加強。

輸入與輸出

在python中,輸入用 input( ),輸出用 print( )。簡單的例子:

兩點注意:Input()接收的輸入資料都認為是字元串,如做其它類型使用,需轉換。

Print()可以做格式化輸出,同C類似,%d(整型)%s(字元串)%f(浮點型),如搞不清,直接都用%s也可以,它會把任何資料類型轉換為字元串。

#用python計算圓的面積;

#定義一個變量接收輸入的圓半徑

r=input("請輸入圓半徑:")

#定義一個變量存放計算出的圓面積

#特别注意:python3針對輸入統一都認為是字元串型

#是以在計算時要将其轉換為整形數,格式:int(x)

s=3.14*int(r)*int(r)

#輸出計算出的圓面積s

print("圓面積s=",s)

#也可以直接在輸出print裡計算圓面積

print("直接在print裡計算面積:",3.14*int(r)*int(r))

#利用占位符實作格式化輸入,這裡和C語言是類似的

print("輸入的圓半徑是%s,圓面積是%f" %(r,3.14*int(r)*int(r)))

運作結果:

請輸入圓半徑:4

圓面積s= 50.24

直接在print裡計算面積:50.24

輸入的圓半徑是4,圓面積是50.240000

變量與資料類型

在c++中,我們要使用變量,就需要先聲明一個資料類型,不同的資料類型長度不同,能夠存儲的值範圍也不同,也就意味着不同的資料類型不能混淆使用。

在Python中,whatever,一切都是那麼的随意,充滿着自由的氣息。

#定義一個變量a,給它一個整形值27

a=27

print(a)

#再将a的值變為一個浮點數,3.1415927

a=3.1415927

print(a)

#再将a的值變為一個字元串,J_ZHANG

a="J_ZHANG"

print(a)

運作結果:

27

3.1415927

J_ZHANG

可以看出,變量a是什麼資料類型,who cares,給它賦的值是什麼類型,它就是什麼類型。

一個栗子,有助了解:

a = 123

#執行這句話,python幹了兩件事

#一是在記憶體中建了個123的整數

#二是在記憶體中建了個變量a,然後将a指向剛建的整數123

b = a

#執行這句話,python建了個變量b,并指向a所指向的123

a = 'ZNN'

#這句話python建了個字元串ZNN,并将a指向了建立的ZMM

#注意:b沒有改變喲,它還是指向a原來指向的那個123

print("執行輸出:a=",a,";b=",b)

#print(b)

運作結果:

執行輸出:a= ZNN ;b= 123

兩個小概念:

動态語言:像Python這樣,變量使用之前不需要類型聲明,變量的類型就是被指派的那個值的類型,動态語言是在運作時确定資料類型的語言。

靜态語言:在定義變量時必須指定變量類型,且在指派時類型要相比對,否則會出現運作時類型錯誤。如C/C++/JAVA等語言。

List(清單)

值可變,是一種有序清單,可通過索引通路清單元素,索引從0開始,也可從-1開始進行反向通路。可随意添加、修改、删除其中的元素,元素資料類型可以不同,可嵌套使用形成多元清單。簡直不要太強大了!

#定義一個list變量stuName,list元素可為不同類型

stuName=['FF','NN','ZZ',1999,'HH','XY']

#擷取list的長度,len()

print('stuName的元素個數:',len(stuName))

print(stuName)

#通路list元素,索引是從0開始,反向通路從-1開始,-1是最後一個元素索引

print('第一個元素是:%s,倒數第二個元素是:%s' %(stuName[0],stuName[-2]))

#增、删、改

stuName.append('J_ZHANG')#在末尾追加一個元素

print(stuName)

stuName.insert(0,2009)#在指定位置插入元素

print(stuName)

stuName.pop()#删除最後一個元素

print(stuName)

stuName.pop(4)#删除第五個元素

print(stuName)

stuName[3]='J_ZHANG'#修改索引為3的元素

print(stuName)

stuInfo=[stuName,[10,20,30]]#嵌套使用

print(stuInfo)

print(stuInfo[0][3])#二維List的通路方式

運作結果:

stuName的元素個數:6

['FF', 'NN', 'ZZ', 1999, 'HH', 'XY']

第一個元素是:FF,倒數第二個元素是:HH

['FF', 'NN', 'ZZ', 1999, 'HH', 'XY', 'J_ZHANG']

[2009, 'FF', 'NN', 'ZZ', 1999, 'HH', 'XY', 'J_ZHANG']

[2009, 'FF', 'NN', 'ZZ', 1999, 'HH', 'XY']

[2009, 'FF', 'NN', 'ZZ', 'HH', 'XY']

[2009, 'FF', 'NN', 'J_ZHANG', 'HH', 'XY']

[[2009, 'FF', 'NN', 'J_ZHANG', 'HH', 'XY'], [10, 20, 30]]

J_ZHANG

Tuple(元組)

值不可變,與List類似,元素可為任意類型,但其一旦定義了,裡面的值是不可改變的,沒有append()、 insert()這些方法,但如果Tuple裡面有個元素為List類型,則這個List裡的值是可以改變的。

#定義一個Tuple變量stuName,元素可為不同類型,但值不可改變

stuName=('FF','NN','ZZ',1999,'HH','XY')

print(stuName)

print(stuName[0],stuName[-1])#Tuple元素通路與List類似

#stuName[2]='J_ZHANG' #會報錯,值不可變

stuInfo=('aa','bb',[10,20,'string'])#Tuple裡面包含List類型元素

print(stuInfo)

stuInfo[2][2]=30#包含的List裡的元素是可以修改的

print(stuInfo)

運作結果:

('FF', 'NN', 'ZZ', 1999, 'HH', 'XY')

FF XY

('aa', 'bb', [10, 20, 'string'])

('aa', 'bb', [10, 20, 30])

Dictionary(字典)

字典是以鍵值對(key-value)的方式存儲,該方式鍵與值一一對應,可以快速的根據key找到value,查詢速度快。注意,鍵(key)不可變,值(value)可變。簡單了解,學生的姓名(key)和成績(value)用字典存放,是一一對應的,找到學生的姓名,即可馬上知道他的成績了,查找速度快。

#定義一個Dict變量stuScore,姓名(key)與成績(value)一一對應

stuScore={'FF':80,'NN':90,'ZZ':100}

stuScore['HH']=70#在後面添加一個鍵值對

print(stuScore)

print(stuScore['HH'])#擷取鍵所對應的值

stuScore.pop('HH')#删除指定的鍵值對

stuScore['ZZ']=89#修改鍵ZZ的值

print(stuScore)

print(stuScore.keys())#擷取所有鍵

print(stuScore.values())#擷取所有值

print(stuScore.items())#按組列印

運作結果:

{'FF': 80, 'NN': 90, 'ZZ': 100, 'HH': 70}

70

{'FF': 80, 'NN': 90, 'ZZ': 89}

dict_keys(['FF', 'NN', 'ZZ'])

dict_values([80, 90, 89])

dict_items([('FF', 80), ('NN', 90), ('ZZ', 89)])

一個簡單的應用,統計一組資料中不同性别的數量,有助了解字典。

#定義一個Dict變量stuInfo,姓名(key)與性别(value)

stuInfo={'FF':'女','NN':'女','ZZ':'男'}

#下面統計 stuInfo 裡面'男'、'女'的數量

stuXBTJ={}#定義一個空字典用于存放統計結果

for xb in stuInfo.values():#周遊

if xb in stuXBTJ:#如果該性别已存在,則加1

stuXBTJ[xb]= stuXBTJ[xb] + 1

else:#否則,該性别數量初始化為1

stuXBTJ[xb]=1

print(stuXBTJ)#列印結果

運作結果:

{'女': 2, '男': 1}

Set(集合)

集合是無序的,也無法通過數字進行索引。此外,集合中的元素不能重複。集合可以進行數學意義上的交集、并集等計算。建立set,需要一個list作為輸入集合。

#利用一個List建立一個Set集合

stu=['FF','ZZ','NN','JJ','ZZ','FF']

s=set(stu)#建立集合s

print(s)#列印s發現重複項已被自動過濾

s.add(27)#添加一項

s.remove('JJ')#删除一項

print(s)

s1=set([1,2,3,4,5])

s2=set([4,5,6,7,8])

print('交集',s1 & s2)#計算兩個集合的交集

print('并集',s1 | s2)#計算兩個集合的并集

print('差集',s1 - s2)#計算兩個集合的差集

運作結果:

{'NN', 'ZZ', 'JJ', 'FF'}

{'NN', 'ZZ', 27, 'FF'}

交集 {4, 5}

并集 {1, 2, 3, 4, 5, 6, 7, 8}

差集 {1, 2, 3}

選擇與循環

選擇與循環是程式設計的兩種主要結構,Python的選擇與循環與其它語言的寫法大相徑庭,習慣C/C++/C#的寫法開始會有些不适應的。(注意:Python裡沒有大括号,它是靠縮進來區分代碼段的。)

選擇:if else & if elif else

score=78

if score>=60:

print('及格!')#執行

print('OK !')#執行,沒有大括号,用縮進

else:

print('不及格!')

if score>=80:

print('優秀!')

elif score>=70:

print('良好!')#執行

elif score>=60:

print('及格!')

else:

print('差!')

#if...elif是從上到下判斷,遇到true即執行,其餘忽略。

運作結果:

及格!

OK !

良好!

循環:for & whele

#for循環實作list周遊

stuName=('FF','NN','ZZ')

for name in stuName:

print(name)

stuInfo=[['FF','NN'],[22,27]]

for i in stuInfo:#Ffor循環嵌套使用

for j in i:

print(j)

sum=0

n=0

while n<=10:#while循環的使用

sum=sum+n

n=n+1

print(sum)

運作結果:

FF

NN

ZZ

FF

NN

22

27

55

break和continue的用法與C++一緻。

break:提前結束循環。

continue:結束本輪循環,直接開始下一輪循環。

檔案讀寫

讀檔案:同C類似,Python内置了讀檔案的函數open(),使用注意事項:檔案打開用完要關閉,open()和close()配對使用。

避免檔案打開失敗或忘記關閉等造成的錯誤,使用with…as…操作檔案。

#使用open()函數讀檔案,檔案位置:D:\test.txt

f=open("D:\\test.txt","r")#打開檔案,第二個參數“r”表示讀

fn=f.read()

print(fn)

f.close()#完成操作後必須要關閉檔案

#檔案打開用完就要關閉,但不排除一通操作後忘了關閉檔案,

#同時還存在檔案打開失敗的情況,使用with…as…操作檔案更可靠,更簡潔。

with open("D:\\test.txt","r") as f:

fn=f.read()

print(fn)

運作結果:

python file_IO

FF 22

NN 09

ZZ 26

python file_IO

FF 22

NN 09

ZZ 26

寫檔案:寫檔案和讀檔案是一樣的,先open,然後write,最後close,open時第二個參數是“w”。寫檔案時,如果目标位置沒有檔案,python會建立檔案。

如果目标位置有檔案,參數“w”就會覆寫寫入,追加寫入可用參數“a”。

可以反複調用write()寫資料,但如果最後忘記close()檔案,後果可能是資料丢失,保險起見,還是使用with…as…更靠譜。

#在D盤建立一個新檔案test_new.txt,然後寫入内容,

f=open("D:\\test_new.txt","w")

f.write("J_ZHANG")

f.close()

#再次寫入就會覆寫原内容

with open("D:\\test_new.txt","w") as f:

f.write("覆寫了嗎?")

f.write("\n")#換一下行

#使用參數“a”實作追加寫入

with open("D:\\test_new.txt","a") as f:

f.write("J_ZHANG追加寫入的。")

#列印出來看一下

with open("D:\\test_new.txt","r") as f:

print(f.read())

運作結果:

覆寫了嗎?

J_ZHANG追加寫入的。

定義與使用函數

Python用def關鍵字定義一個函數,定義時需确定函數名與參數,函數可以有多個傳回值,但如函數沒有return,則預設還回none。因python變量為動态類型,如函數對參數有類型要求,需在函數體内進行類型檢查。

#使用def定義一個函數:求圓面積

def cir_area(r):

if not isinstance(r,(int,float)):#參數類型檢查,r為整型或浮點型

raise TypeError("參數r類型錯誤!")

if r<=0:

return 0#判斷如果半徑小于等于0則傳回0

else:

return 3.14*r*r

#調用函數

s=cir_area(4)#半徑為4的圓面積

print(s)

運作結果:

50.24

OK,就醬紫!暫時先到這兒。

--- END ---