一、常量表達式
在編程中,常量指的是在程序執行期間其值不會改變的數據項。雖然 Python 并沒有專門的語法來定義常量(不像某些其他語言如 Java 中有 final
關鍵字),但在實踐中,我們通常通過約定俗成的方式來表示一個變量是一個“常量”:
示例:
# 算術表達式
a = 5 + 3 * 2 # 結果為 11,注意乘法優先于加法# 關系表達式
b = 10 > 5 # b 的值為 True# 邏輯表達式
c = (10 > 5) and (2 < 3) # c 的值為 True
print(1 + 2 - 3)
print(1 + 2 * 3)
print(1 + 2 / 3)
代碼里的print()
?是 Python 中的一個內置函數,用于將內容輸出到終端(屏幕)上。它是我們最常用的調試工具之一,可以讓我們看到程序運行時的中間結果、變量值、提示信息等。這個我們后續詳談
- 可以使用+-*/()等運算符進行算術運算,先算乘除后算加減
- 運算符和數字之間,可以沒有空格,但是一般習慣上寫一個空格(比較美觀)
- 例如?1 + 2 - 3 這樣是算式,在編程語言中被稱為表達式,而運行后的結果,就是這個表達式的返回值
- 其中1,2,3這種被稱為字面值常量, +-*/ 這種被稱為運算符或者操作符
表達式的類型:
算術表達式:涉及數值及其運算符(如?
+
,?-
,?*
,?/
)。關系表達式:比較兩個值(如?
==
,?!=
,?>
,?<
)。邏輯表達式:結合多個條件(如?
and
,?or
,?not
)。
這里注意一下,我們發現第三個表達式計算出來后是 1.66666666665,而不是1。而我們熟悉了c或者java的兄弟可能覺得很奇怪,其實在Python中得到的結果則是一個小數,更符合日常使用的直覺
例如:給定四個分數,65.5 , 89.0 , 12.9 , 32.2 ,編寫代碼,求這四個分數的平均數
print((65.5 + 89.0 + 12.9 + 32.2) / 4)
二、變量和類型
2.1 變量是啥?
有的時候,我們需要進行的計算可能會復雜一點,計算過程中需要把一些中間結果保存起來,那么這個時候就是通過變量這個東西
就例如我們現在要計算一個方差
- 給四個數, 67.5 , 89.0 , 12.9 , 32.2,編寫代碼,求這四個數的方差
- 方差計算過程:取每一項,減去平均值,計算平方,再求和,最后除以(項數 - 1)
- 計算這四個數的平均值
- 取每一項,減去平均值,計算平方,再求和 ?把最后的值給total
- 把total除以(項數 - 1)
- 將結果打印出來
avg = (67.5 + 89.0 + 12.9 + 32.2)/4
total = (67.5 - avg) ** 2 + (89.0 - avg) ** 2 + (12.9 - avg) ** 2 + (32.2 - avg) ** 2
result = total / 3
print(result)
?注意:avg,total,result都是變量
**在python里面表示乘方運算。 **2就是平方
而變量可以視為是一塊可以存放數據的一個空間,而這個空間是開辟在內存中過地方的
?想象內存是一個大倉庫,有許多小格子,每個格子有唯一編號(地址)。當我們聲明一個變量?
int avg?= 30;
,計算機在倉庫中找到一個空閑格子,放進去30,并記下標簽“age”指向那個格子編號。(圖上一個存放50.400000000000006)
2.2 變量的語法?
2.2.1 變量的定義
a = 10
//a是變量名。
// 10是值。
//變量名+賦值運算符+值
創建變量非常簡單:
- a是變量名。當我們創建很多個變量的時候,大家的變量名要取一個有意義,例如你創建的變量是用來計數的,就可以取為count
- = 為賦值運算符,表示把 = 右側的數據放到 = 左側空間中 ,注意,是由右向左
注意事項(規則):
- 變量名由數字、字母、下劃線構成
- 數字不能開頭
- 變量名不能和“關鍵字重復”。例如:print?
- 變量名大小寫敏感。num和Num是兩個不同的變量名
變量取名建議:
- 變量名最好用有意義的單詞來表示,就是我剛剛說的
- 駝峰命名法(CamelCase):首個單詞小寫,后續單詞首字母大寫,如 $userName$(常用于Java、JavaScript)。
- 蛇形命名法(snake_case):單詞間用下劃線連接,如 $user_name$(常用于Python、Ruby)。
- 常量命名:全大寫加下劃線,如 $MAX_VALUE$。
2.2.2 變量的使用
讀取變量的值:
a = 10
print(a)
?修改變量的值
a = 10
pritn(a)
#修改a
a = 20
print(a)
當然,我們也可以使用其他的變量來修改需要修改的值
a = 10
b = 20
a = b
print(a)
print(b)
一開始對變量a和b進行初始化,隨后 a = b,將b的值賦給a,這樣就把a的值給改變了!!!?
2.2.3 變量的類型?
變量里面存儲的不僅僅是數字,還可以存儲其他種類的數據,未來區分不同種類的數據,我們引入了“類型”這一概念。
注意:Python和C++/java等語言不同,Python的變量類型是不需要顯示指定的,而是在賦值的時候確定的
例如c++和java
//在 C++ 和 Java 中,變量類型必須在定義時明確寫出,否則編譯器會報錯int age = 20; // 必須顯式指定類型
string name = "Tom";
而Python:?
x = 10 # x 是整數
x = "Hello" # x 變成字符串
x = [1, 2, 3] # x 變成列表
2.2.3.1?整數
a = 10
print(type(a))
PS:pyte和print類似,也是Python內置的函數,pyte可以來查看一個變量的類型
這里注意一個點:Python的int類型變量,所表示的不是四個字節,而是?沒有上限?的,只要內存足夠大,理論上就可以表示無限大小的數組
2.2.3.2 浮點數
a = 0.5
print(type(a))
字符串需要用 ' (單引號)或者 " (雙引號) ,被這兩個符號所包圍起來的就被稱為字符串。可以用來表示文本
注意'hello'和"hello"是等價的
可以使用 len 函數來計算一個字符串的長度
a = 'hello'
print(len(a))
?
可以使用+針對兩個字符串的拼接
a = "hello"
b = " world"
print(a+b)
a = "hello"
b = 1
print(a+b)
此處只是字符串相加,不能拿字符串和其他類型相加?
2.2.3.4 布爾
布爾類型是一個特殊的類型(用于邏輯判斷),取值只有兩種:True(真)和False(假)
PS:這里True(真)和False(假)必須是首字母大寫的
而真假是什么?
例如:
女生每月會有生理期(真)
男士每月會有生理期(假)
a = True
print(type(a))
b = False
print(type(b))
?三、變量類型的意義
類型決定了數據在內存中占據多大內存空間
- float類型在內存中占據8個字節
- int 動態擴容
- bool為一個字節
類型約定了能對這個變量做了什么樣的工作
- 例如int / float 類型的變量,可以進行+ - * / 等操作
- 而str類型的變量,只能進行+(并且行為是字符串拼接),不能進行 - * / ,但是還能使用len等其他操作?
四、動態類型特性?
在Python中,一個變量是什么類型,是可以在"程序運行"過程中發生變化的(也就是變量類型是可以改變的)。這個特性稱為“動態類型”
a = 10
print(type(a))
a = 'hello'
print(type(a))
大家注意,程序執行過程中,a的類型從int變為str了,而這是在c++/Java中是不行的
- 靜態類型
程序運行時,變量的類型始終不變
- 動態類型
程序運行時,變量的類型是可以改變的
一個編程語言,是否為動態類型,只取決于運行時,類型是否發生改變,不取決于變量定義的時候是否聲明類型
當然了,動態類型是一把雙刃劍
- 對于中小型程序,他能大大節約代碼量?
- 對于大型程序,則提高了模塊之間交互的成本(A提供的代碼很難被B看懂)
其實這就是為什么很多公司一開始使用Python語言來完成項目,而后期又要針對原來的代碼用其他語言重構
?五、注釋
在編程中,注釋就是寫在代碼中、給程序員看的“說明文字”。它不會被 Python 解釋器執行,也就是說,計算機不會運行注釋里的內容,但它是寫給人看的。
5.1 注釋的作用
注釋的作用
- 解釋代碼:讓別人(或未來的你)更容易理解代碼的意圖。
- 調試代碼:暫時屏蔽某段代碼,方便調試。
- 文檔說明:在大型項目中,注釋可以作為文檔的一部分,說明函數、類或模塊的功能。
- 協作溝通:多人協作時,注釋可以說明你為什么這樣寫代碼。
5.2 注釋的方式
5.2.1.單行注釋
使用 #
符號,從 #
開始到這一行的末尾都會被當作注釋。
# 這是一個打印語句,輸出“你好,Python!”
print("你好,Python!")
5.2.2?多行注釋(塊注釋)
雖然 Python 沒有專門的多行注釋語法,但我們可以使用三引號 '''
或 """
來實現多行注釋:
'''
這是一個多行注釋的例子。
你可以在這里寫很多行說明。
這些內容不會被執行。
'''
print("多行注釋演示")
注意:嚴格來說,三引號是字符串,如果它沒有被賦值給變量,也不會被運行,因此可以當作注釋使用。但在某些上下文中,它可能作為文檔字符串(docstring)使用,我們后面會專門講解。
5.2.3 注釋的使用規范?
?注釋的使用規范(建議):
類型 | 寫法 | 示例 |
---|---|---|
單行注釋 | # 注釋內容 | # 計算兩個數的和 |
行末注釋 | 代碼 # 注釋 | x = 5 # 設置初始值 |
多行注釋 | ''' 注釋內容 ''' ?或?""" 注釋內容 """ |
"""
這是一個函數說明:
輸入兩個參數,返回它們的和。
"""
5.2.4 優秀注釋的例子?
注釋寫得好,代碼更清晰!
# 定義兩個變量
a = 3
b = 4# 計算平方和
c = a**2 + b**2# 輸出結果
print(c)
對比沒有注釋的版本:?
a = 3
b = 4
c = a**2 + b**2
print(c)
你覺得哪種更容易理解呢?沒錯,加上注釋之后,即使是一個新接觸這段代碼的人,也能迅速理解每一行代碼的目的。
六、輸入輸出
6.1 和用戶交用
- 用戶把消息傳遞給程序的過程,稱為"輸入"
- 用戶把結果展示給用戶的過程,稱為"輸出"
輸入輸出的最基本方法就是控制臺:用戶通過控制臺輸入一些字符串,程序再通過控制臺打印一些字符串
vs code運行程序的時候,下方彈出的窗口就是控制臺
Mac OS自帶的終端,也可以視為控制臺
輸入輸出的最常見方法是圖形化界面。我們平常對于電腦的操作基本都是圖形化界面?
6.2 通過控制臺輸出
Python使用print函數輸出到控制臺
print('hello')
不僅可以輸出一個字符串,還可以輸出一個其他類型的變量
a = 10
print(a)
b = True
print(b)
??
更多的時候,我們希望能夠輸出的內容是混合了字符串的變量
例如:輸出num = 10
num = 10
print(f'num = {num}')
? 注意:這里的?f'num = {num}'?是一種格式化字符串,使用{}來嵌入變量或表達式
例如:
#格式化字符串 a = 10 #希望數字和字符串混在一起 print(f'a = {a + 10}')
6.3 通過控制臺輸入
Python使用input函數輸入,從控制臺讀取用戶的輸入
# 通過控制臺輸入
num = 0
num = input('請輸入一個整數:')
print(f'你輸入的整數是{num}')
當我們在控制臺輸入10,再按回車,就運行完成
注意:
- input的參數相當于一個"提示信息",也可以沒有
- input的返回值就是用戶輸入的內容,是字符串類型?
?下面這個代碼大家想想會輸出什么?兩數相加嗎?
a = input('請輸入一個整數:')
b = input('請輸入二個整數:')print(f'a + b = {a + b}')
答案顯而易見:此處的結果是字符串的連接而不是算術運算
那我們該怎么進行算術運算呢:轉換類型
a = input('請輸入一個整數:')
b = input('請輸入二個整數:')a = int(a)
b = int(b)print(f'a + b = {a + b}')
小練習:輸入5個小數,求5個小數的平均值
a = input('請輸入一個整數:')
b = input('請輸入二個整數:')
c = input('請輸入三個整數:')
d = input('請輸入四個整數:')
e = input('請輸入五個整數:')a = int(a)
b = int(b)
c = int(c)
d = int(d)
e = int(e)avg = (a + b + c + d + e)/5
print(f'平均值: {avg}')
七、運算符
7.1 算術運算符
像 + - * / % ** // 這種進行算術運算的運算符,稱為算術運算符
算術規則:先算乘方,然后是乘除,最后是加減。如果運算過程中想修改默認的運行程序,就需要加上“()”
注意1:/中不能用0作為除數。否則會拋出異常
print(10/0)
?注意2?:整數/整數結果可能是小數,而不會截斷
print(1/2)
?注意3:%不是“百分數”,而是求余數
print(7%2)
?關于求余數,有些同學容易蒙,其實這個就是我們小學學過的
7除以2,商3余1
注意4: **是乘方,不光能算整數次方,還可以算小數次方
print(4 ** 2)
print(4 ** 0.5)
注意5: ?//是取整除法(也叫地板除)整數除以整數,結果還是整數(舍棄小數部分,并向下取整,不是四舍五入)
print(7 // 2)
print(-7 // 2)
7.2 關系運算符?
像 < ?<= ?> ?>= ? == ? != ?這一系列的運算符被稱為關系運算符
- <= 是"小于等于"
- >= 是"大于等于"
- == 是"等于"
- != 是"不等于"
7.2.1 如果關系符合,則返回Ture,如果不符合,返回False
a = 10
b = 20
print(a < b)
print(a <= b)
print(a < b)
print(a >= b)
print(a == b)
print(a != b)
7.2.2 關系運算符不光針對整數/浮點數進行比較,還能針對字符串進行比較
a = 'hello'
b = 'world'
print(a < b)
print(a <= b)
print(a < b)
print(a >= b)
print(a == b)
print(a != b)
注意:?
- 直接使用 == 或者 != 即可對字符串內容判斷是否相等
- 字符串比較大小,規則是“字典序”
字典序:
一個隨意單詞,例如absorb,這個單詞再字典里都是按照字母順序排列,如果首個字母相同,就比較第二個字母
我們認為一個單詞再字典上越靠前,就越小,越靠后,就越大
7.2.3 對于浮點數來說,不要使用==判斷相等
print(0.1 + 0.2 = 0.3)
浮點數在計算機中的表示并不是精確的!在計算過程中,就很容易出現非常小的誤差
print(0.1)
print(0.2)
print(0.3)
print(0.1 + 0.2)
可以看到 0.1+0.2 其實不是0.3,而是一個和0.3極其接近的0.30000000004
那么該如何操作來得到我們理想的0.3呢:做差來判定差值小于允許的誤差范圍
a = 0.1 + 0.2
b = 0.3
print(-0.000001 < (a - b) < 0.0000001)
八、邏輯運算符?
8.1 and ?or ?not
?像 and、or、not 這一系列的運算符被稱為 邏輯運算符
- and:表并且,兩側操作數均為Ture,最終結果為Ture,否則為False(一假則假)
- or:表或者,兩側操作數均為False,最終結果為False,否則為Ture(一真則真)
- not:邏輯取反,操作數本身為Ture,則返回False,則返回Ture
a = 10
b = 20
c = 30print(a < b and b < c)
print(a < b and b > c)print(a > b or b > c)
print(a < b or b > c)print(not a < b)
print(not a > b)
另一種寫法:我們可以把??print(a < b and b < c) ?等價于 a < b < c
8.2 短路求值
和其他編程語言類似,Python也存在短路求值的規則
- 關于and,如果左側表達式為False,則整體一定為False,右側表達式不再執行
- 對于or , 如果左側表達式為Ture,則整體一定為Ture,右側表達式不再執行
print(10 > 20 and 10 / 0 == 1)
print(10 < 20 or 10 / 0 == 1)
?九、賦值運算符
9.1 = 的使用
= 表示賦值,這個我們已經用過很多次了
=除了基本的用法外,還可以同時針對多個變量進行復制
9.1.1 鏈式賦值
a = b = 10
9.1.2 多元賦值
a, b = 10, 20
9.1.3 小案例:交換兩個變量
基于鏈式復制(基礎寫法):
a = 10
b = 20tmp = a
a = b
b = tmp
- 先定義兩個變量a,b
- 將a的值賦給一個空變量
- 再見b的值賦給a
- 最后把空變量(這是存放的是a的值)賦給b
舉個小例子:我們要將醬油和醋換一下,那這時候就一定要有個開瓶子暫時存放,讓其中一個空出來,就例如讓醬油空出來(醬油倒入tmp),這時候就可以把醋倒入醬油內
?
基于多元賦值:
a = 10
b = 20a , b = b , a
9.2 復合賦值運算符
Python還有一些 復合賦值運算符?,例如:+= ? -= ? *= ? /= ? %=
a = 10
a = a+1
a += 1
print(a)
?a += 1 等價于 a = a+1
本節完?