Python學習整理

2021-03-10 12:00:47

Python 學習整理

一,基本的引數型別

相較於C語言來說,Python的資料型別,準確的來說應該是絕大部分的資料型別應該都是這幾類,「int」整數型,「float」浮點型,「bool」布林型,「str」字串型,對於Python來說每個引數都對應著三個基本的屬性:id,type,value
例如,輸入如下程式碼

a=2
print(id(a))
print(type(a))
print(a)

在這裡插入圖片描述
這裡使用到了print 函數,作用就是列印你所需要的東西,函數格式為print()
然後這裡要補充的是,Python中的變數不用定義就可以直接使用

二,函數

print()函數

上面提到了print函數,其實像print函數這樣型別的輸出函數,應該是所有程式語言最開始都要使用的吧,畢竟大多數程式設計師的第一段程式碼應該都是「hello world」吧

# 輸出數位
print(56.5)
print(362)

# 輸出字串
print('hello world')
print("hello world")

# 輸出表示式(會自動輸出計算結果)
print(5+3)

# 將資料輸出到檔案當中
fp = open('D:/Python data/text.txt ', 'a+')
# "a+"的意思是如果不存在就建立一個,如果存在就繼續追加
print('hello world', file=fp)
fp.close()

# 不進行換行輸出(全部在一行顯示)
print('hello', 'world', 'Python')

input()函數和int(),float()

input顧名思義,這是一個輸入函數,類似於C語言中的scanf函數,這裡有一個需要注意的地方,input函數錄入的引數type型別是str字串型別,如果想要錄入數位參與計算使用的話就必須使用int(),和float()函數,來轉換引數型別,例如:

# 輸入兩個整數求和
a1=input('第一個整數')
a2=input('第二個整數')
print(type(a1),type(a2))
# input函數輸入的為str型別的引數,要使用其錄入的計算前要將引數轉化為int或者float型別
print('結果為:',int(a1)+int(a2))
print('結果為:',float(a1)+float(a2))

(對於初學者來說,這幾個函數暫時應該夠用)

三,運運算元

Python中的運運算元大致分為這幾類:賦值,加,減,乘,除,取餘,取整,n次方運算,大小比較,邏輯運算

print(5+6)
print(5-6)
print(11/6)
print(11//6)# 雙斜槓為整數除
print(5*6)
print(11%3)# 取餘運算
print(2**3)# 表示2的三次方
print(10//4)
print(-10//-4)

計算同正同負的情況自然不需要多考慮下面要注意的是一正一負的情況

# 在除數和被除數一正一負的情況下向下取整
print(9//-4)
print(-9//4)

在這裡插入圖片描述

這裡向下取整的意思可能有點難懂,你可以畫一個數軸以右邊為正方向,假設計算結果為-3.2,那麼取整結束的結果為-4,總之就是,當計算結果小於0的時候,只要不是整數,那麼就取離他最近的左邊的整數就作為計算結果
然後是正負數取餘計算

# 正負數取餘 取餘的計算公式為被除數-(商*除數 )
print(10%-3) #-2
print(-10%3) #2

另外這裡的商不是捨去小數點後面的數位而是取整,以上面的式子為例-10/3應該是-3.333333迴圈我們取整就是4,那麼上述式子就轉化成了餘數=-10-(-4*3)=2

Python裡面的賦值運算

# 賦值運算從右向左進行計算
a=9+3
print(a)
# 支援鏈式賦值
c=b=a
print(a,b,c,)
print(type(a),id(a))
print(type(b),id(b))
print(type(c),id(c))

上面的程式碼輸出的的a,b,c的值是一樣的,因為對於計算機來說,相同的int值都儲存在相同的記憶體單元裡面,我們將引數賦值給變數的時候其實是將引數的id給到了變數,在參照這些變數的時候,通過給到變數id來找到內個儲存單元,從而呼叫儲存單元中的value值參與變數計算,這一點有點類似C語言中的指標,也是通過地址來呼叫引數

i=50
i+=10
print(i,type(i))# 60
i-=10
print(i,type(i))# 50
i*=10
print(i,type(i))# 500
i//=10
print(i,type(i))# 50取整不改變資料型別
i/=10
print(i,type(i))# 5.0除法自帶將int型別的資料轉化為float型
i**=2
print(i,type(i))# 25.0
i%=3
print(i,type(i))

上面的有一部分東西在學C語言的時候都學過了,所以剩下的東西就很好理解

解包賦值

說實話,我也沒怎麼理解啥事解包賦值,但是運用上就是,一 一對應賦值,看程式碼會更好理解

m,n,l=5,6,7
print(m,n,l)
print('交換變數值')
a,b=1,2
print('交換前',a,b)
a,b=b,a
print('交換後',a,b)

這裡與C語言不一樣的是,交換兩個變數的引數值不需要藉助第三個變數來進行引數交換

比較運運算元

比較運運算元的計算結果為布林值

a=int(input('a='))
b=int(input('b='))
print('a>b嗎?',a>b)
print('a<b嗎?',a<b)
print('a=b嗎?',a==b)
print('a<=b嗎?',a<=b)
print('a>=b嗎?',a>=b)
print('a!=b嗎?',a!=b)

變數分為三部分 標識,型別和值也就是id,type,value
,而比較運運算元進行值(value)的比較
is是對id標識的比較

a=int(input('a='))
b=int(input('b='))
print(a==b)
print(a is b)

存在value值一樣但是id標識不同的情況,我個人的理解為==比較大小,is(not)比較地址,如果是單獨的數位變數它在記憶體空間的位置是不變的,但是如果是其他情況,比如說列表元素字典,每生成一個就要單獨分配一個記憶體空間,所以id自然不一樣

lst1=[11,22,33,44]
lst2=[11,22,33,44]
print(id(lst1))
print(id(lst2))
print(lst1 is not lst2)# 執行結果為Ture

布林運運算元

布林運運算元(個人理解為數學裡的或且非)and(且) or(或) not(非)

型別執行結果
and運運算元
Ture and TureTure
Ture and FalseFalse
False and FalseFalse
or運運算元
Ture and TureTure
Ture and FalseTure
False and FalseFalse
not運運算元
not TureFalse
not FalseTure

in和not in

運算結果還是bool值,看程式碼和執行結果更加直觀

h1='hello world'
print('h' in h1)# Ture
print('l' not in h1)# Ture
print('a' in h1)# False

按位元計算符

這裡是按位元計算& ,|將需要計算的的數位轉換為二進位制數再進行對位比較,&是全唯1就輸出1,|是隻要有1就輸出1,沒有就輸出0,先看程式碼

print(4&5)#4
print(4|5)#5

在這裡插入圖片描述

第D~J列是二進位制碼,第K列是對應的十進位制數,這張圖是演示的是print(4&5),第三行是運算結果,我們從第J列開始看起,可以將第J列理解為二進位制碼的第一位,我們可以看見黃色的第J列是0,紅色是1,那麼根據&符的運演演算法則,不全為1,所以藍色運算結果就是0,第I列同理,到了第H列變為了全為1,那麼藍色的運算結果就是1,再往後運算結果都是0,那麼結算結果的二進位制碼就出來了100,在轉化為十進位制就是4。
‘|’符運演演算法則有1就為1,具體運算過程可以參照&符
下面">>" ,"<<",運算原理和上面類似,先看程式碼:

print(11>>2)# 2
print(11<<2)# 44

這兩個運運算元的運演演算法則說明白就是「高位溢位,低位截斷」,"<<"(轉換為二進數後左移)," >>"(轉換為二進位制數後右移),向左移動的時候第1位位補零,向右的時候多出來的位數截斷(無論是0還是1)
在這裡插入圖片描述
第E~J二進位制碼,第K列是對應的十進位制碼,先看紅色內行,執行>>運運算元,11,是進行運算的引數,而2是所對應的二進位制碼移動的位數,紅色向右移動2為,那麼藍色原來的IJ兩列的1,就被截斷了,1011就變成了10,轉換十進位制為2,黃色向左移動兩位,那原先的IJ兩列就空出來了,這裡就需要補0,1011就變成了101100,轉化為十進位制為44

運運算元優先順序

最後是運運算元的優先順序**大於*,/,//,%大於+,—大於<<,>>大於&大於|大於and大於or大於=

四, bool值為False的情況

# 獲取變數的bool值使用bool()函數
# 以下變數bool值為False
print(bool(0))
print(bool(0.0))
print(bool("")) # 空字串
print(bool('')) # 空字串
print(bool(False)) # False本身
print(bool({})) # 空字典
print(bool(dict())) # 空字典
print(bool([])) # 空列表
print(bool(list())) # 空列表
print(bool(tuple())) # 空元組
print(bool(())) # 空元組
print(bool(None))
print(bool(set())) # 空集合
print('--------------其餘為Ture----------------')

五,選擇結構

if else選擇結構

這很簡單,基本結構如下所示

if 條件:
   要執行的語句
else:  
   要執行的語句 

條件計算結果bool值為Ture執行if下面的語句,否則就是else
這裡舉一個例子

num=int(input('請輸入一個整數:'))
if num % 2:
    print('是奇數哦')
else:
    print('是偶數哦')

if elif選擇結構

這裡直接舉一個例子會更直觀

score=float(input("請輸入學生的成績:"))
if 90 <= score <= 100:#條件格式寫成score>=90 and score<=100也行
    print('A')
elif 80 <= score < 90:
    print('B')
elif 70 <= score < 80:
    print('c')
elif 60 <= score < 70:
    print('D')
elif 0 <= score < 60:
    print('E')
else:
    print("請輸入合法成績")

在這裡我做了一個if else和if elif的巢狀練習

"""
   設定商場消費打折程式要求
   vip使用者0-199元9折
         200-500元8折
         501-1000元73折
         1001-2000元68折
         2001以上6折
   非vip使用者0-300不打折
           301-1000元9折
           101-1500元85折
           1501以上77折
"""
charge=float(input('請輸入您的消費金額'))
answer=input('請問您是會員嗎,是/不是')
if answer=='是':
    if 200< charge <=500:
        charge*=0.8
        print('打完折後的價格為:',int(charge))
    elif 500< charge <=1000:
        charge*=0.73
        print('打完折後的價格為:',int(charge))
    elif 1000< charge <=2000:
        charge*=0.68
        print('打完折後的價格為:',int(charge))
    elif 2000< charge:
        charge*=0.6
        print('打完折後的價格為:',int(charge))
    elif 0<= charge <=200:
        charge*=0.9
        print('打完折後的價格為:',int(charge))
else:
    if 0<= charge <=300:
        print('您的消費金額過低,不能參與打折哦,建議參加會員呢')
    elif 300< charge <=1000:
        charge*=0.9
        print('打完折後的價格為:',int(charge))
    elif 1000< charge <=1500:
        charge*=0.85
        print('打完折後的價格為:',int(charge))
    elif 1500< charge:
        charge*=0.77
        print('打完折後的價格為:',int(charge))

這裡需要注意的是,巢狀過程需要注意對齊

好了,今天就到這裡。
                                                                      2021/3/8 0:02