python3新手中的常見錯誤
- 1> 手誤,例如使用
pirnt("Hello world")
NameError: name 'pirnt' is not defined
名稱錯誤:'pirnt' 名字沒有定義
- 2> 將多條
print
寫在一行
SyntaxError: invalid syntax
語法錯誤:語法無效
每行代碼負責完成一個動作
- 3> 縮進錯誤
IndentationError: unexpected indent
縮進錯誤:不期望出現的縮進
- Python 是一個格式非常嚴格的程序設計語言
- 目前而言,大家記住每行代碼前面都不要增加空格
注釋
單行注釋(行注釋)
- 以
#
開頭,#
右邊的所有東西都被當做說明文字,而不是真正要執行的程序,只起到輔助說明作用 - 示例代碼如下:
# 這是第一個單行注釋
print("hello python")
為了保證代碼的可讀性,
#
后面建議先添加一個空格,然后再編寫相應的說明文字
在代碼后面增加的單行注釋
- 在程序開發時,同樣可以使用
#
在代碼的后面(旁邊)增加說明性的文字 - 但是,需要注意的是,為了保證代碼的可讀性,注釋和代碼之間 至少要有 兩個空格
- 示例代碼如下:
print("hello python") # 輸出 `hello python`
多行注釋(塊注釋)
- 如果希望編寫的 注釋信息很多,一行無法顯示,就可以使用多行注釋
- 要在 Python 程序中使用多行注釋,可以用 一對 連續的 三個 引號(單引號和雙引號都可以)
- 示例代碼如下:
"""
這是一個多行注釋
在多行注釋之間,可以寫很多很多的內容……
"""
print("hello python")
什么時候需要使用注釋?
- 注釋不是越多越好,對于一目了然的代碼,不需要添加注釋
- 對于 復雜的操作,應該在操作開始前寫上若干行注釋
- 對于 不是一目了然的代碼,應在其行尾添加注釋(為了提高可讀性,注釋應該至少離開代碼 2 個空格)
- 絕不要描述代碼,假設閱讀代碼的人比你更懂 Python,他只是不知道你的代碼要做什么
變量的類型
-
在
Python
中定義變量是 不需要指定類型(在其他很多高級語言中都需要) 數據類型可以分為 數字型 和 非數字型
-
數字型
- 整型 (
int
) - 浮點型(
float
) - 布爾型(
bool
)- 真
True
非 0 數
—— 非零即真 - 假
False
0
- 真
- 復數型 (
complex
)- 主要用于科學計算,例如:平面場問題、波動問題、電感電容等問題
- 整型 (
-
非數字型
- 字符串
- 列表
- 元組
- 字典
使用
type
函數可以查看一個變量的類型
In [1]: type(name)
不同類型變量之間的計算
1) 數字型變量 之間可以直接計算
-
在 Python 中,兩個數字型變量是可以直接進行 算數運算的
-
如果變量是
bool
型,在計算時True
對應的數字是1
-
False
對應的數字是0
演練步驟
- 定義整數
i = 10
- 定義浮點數
f = 10.5
- 定義布爾型
b = True
- 在 iPython 中,使用上述三個變量相互進行算術運算
2) 字符串變量 之間使用 +
拼接字符串
-
在 Python 中,字符串之間可以使用
+
拼接生成新的字符串
In [1]: first_name = "三"
In [2]: last_name = "張"
In [3]: first_name + last_name
Out[3]: '三張'
3) 字符串變量 可以和 整數 使用 *
重復拼接相同的字符串
In [1]: "-" * 50
Out[1]: '--------------------------------------------------'
4) 數字型變量 和 字符串 之間 不能進行其他計算
In [1]: first_name = "zhang"
In [2]: x = 10
In [3]: x + first_name
---------------------------------------------------------------------------
TypeError: unsupported operand type(s) for +: 'int' and 'str'
類型錯誤:`+` 不支持的操作類型:`int` 和 `str`
字符串中的轉義字符
-
\t
在控制臺輸出一個 制表符,協助在輸出文本時 垂直方向 保持對齊 -
\n
在控制臺輸出一個 換行符
制表符 的功能是在不使用表格的情況下在 垂直方向 按列對齊文本
轉義字符 | 描述 |
---|---|
\\ | 反斜杠符號 |
\' | 單引號 |
\" | 雙引號 |
\n | 換行 |
\t | 橫向制表符 |
\r | 回車 |
變量的輸入與輸出
函數 | 說明 |
---|---|
print(x) | 將 x 輸出到控制臺 |
type(x) | 查看 x 的變量類型 |
1) input 函數實現鍵盤輸入
- 在 Python 中可以使用
input
函數從鍵盤等待用戶的輸入 - 用戶輸入的 任何內容 Python 都認為是一個 字符串
- 語法如下:
字符串變量 = input("提示信息:")
2) 類型轉換函數
函數 | 說明 |
---|---|
int(x) | 將 x 轉換為一個整數 |
float(x) | 將 x 轉換到一個浮點數 |
3) 變量的格式化輸出
- 如果希望輸出文字信息的同時,一起輸出 數據,就需要使用到 格式化操作符
-
%
被稱為 格式化操作符,專門用于處理字符串中的格式- 包含
%
的字符串,被稱為 格式化字符串 -
%
和不同的 字符 連用,不同類型的數據 需要使用 不同的格式化字符
- 包含
格式化字符 | 含義 |
---|---|
%s | 字符串 |
%d | 有符號十進制整數,%06d 表示輸出的整數顯示位數,不足的地方使用 0 補全 |
%f | 浮點數,%.2f 表示小數點后只顯示兩位 |
%% | 輸出 %
|
- 語法格式如下:
print("格式化字符串" % 變量1)
print("格式化字符串" % (變量1, 變量2...))
例1
- 定義字符串變量
name
,輸出 我的名字叫 小明,請多多關照! - 定義整數變量
student_no
,輸出 我的學號是 000001 - 定義小數
price
、weight
、money
,輸出 蘋果單價 9.00 元/斤,購買了 5.00 斤,需要支付 45.00 元 - 定義一個小數
scale
,輸出 數據比例是 10.00%
print("我的名字叫 %s,請多多關照!" % name)
print("我的學號是 %06d" % student_no)
print("蘋果單價 %.02f 元/斤,購買 %.02f 斤,需要支付 %.02f 元" % (price, weight, money))
print("數據比例是 %.02f%%" % (scale * 100))
標識符與關鍵字
標識符
標示符就是程序員定義的 變量名、函數名
- 標示符可以由 字母、下劃線 和 數字 組成
- 不能以數字開頭
- 不能與關鍵字重名
關鍵字
-
關鍵字 就是在
Python
內部已經使用的標識符 - 關鍵字 具有特殊的功能和含義
- 開發者 不允許定義和關鍵字相同的名字的標示符
通過以下命令可以查看 Python
中的關鍵字
In [1]: import keyword
In [2]: print(keyword.kwlist)
變量命名規則
命名規則 可以被視為一種 慣例,并無絕對與強制
目的是為了 增加代碼的識別和可讀性
注意 Python
中的 標識符 是 區分大小寫的
在定義變量時,為了保證代碼格式,
=
的左右應該各保留一個空格-
在
Python
中,如果 變量名 需要由 二個 或 多個單詞 組成時,可以按照以下方式命名- 每個單詞都使用小寫字母
- 單詞與單詞之間使用
_
下劃線 連接
- 例如:
first_name
、last_name
、qq_number
、qq_password
駝峰命名法
- 當 變量名 是由二個或多個單詞組成時,還可以利用駝峰命名法來命名
-
小駝峰式命名法
- 第一個單詞以小寫字母開始,后續單詞的首字母大寫
- 例如:
firstName
、lastName
-
大駝峰式命名法
- 每一個單詞的首字母都采用大寫字母
- 例如:
FirstName
、LastName
、CamelCase
運算符
數學符號表鏈接:https://zh.wikipedia.org/wiki/數學符號表
01. 算數運算符
- 是完成基本的算術運算使用的符號,用來處理四則運算
運算符 | 描述 | 實例 |
---|---|---|
+ | 加 | 10 + 20 = 30 |
- | 減 | 10 - 20 = -10 |
* | 乘 | 10 * 20 = 200 |
/ | 除 | 10 / 20 = 0.5 |
// | 取整除 | 返回除法的整數部分(商) 9 // 2 輸出結果 4 |
% | 取余數 | 返回除法的余數 9 % 2 = 1 |
** | 冪 | 又稱次方、乘方,2 ** 3 = 8 |
- 在 Python 中
*
運算符還可以用于字符串,計算結果就是字符串重復指定次數的結果
In [1]: "-" * 50
Out[1]: '----------------------------------------'
02. 比較(關系)運算符
運算符 | 描述 |
---|---|
== | 檢查兩個操作數的值是否 相等,如果是,則條件成立,返回 True |
!= | 檢查兩個操作數的值是否 不相等,如果是,則條件成立,返回 True |
> | 檢查左操作數的值是否 大于 右操作數的值,如果是,則條件成立,返回 True |
< | 檢查左操作數的值是否 小于 右操作數的值,如果是,則條件成立,返回 True |
>= | 檢查左操作數的值是否 大于或等于 右操作數的值,如果是,則條件成立,返回 True |
<= | 檢查左操作數的值是否 小于或等于 右操作數的值,如果是,則條件成立,返回 True |
03. 邏輯運算符
運算符 | 邏輯表達式 | 描述 |
---|---|---|
and | x and y | 只有 x 和 y 的值都為 True,才會返回 True<br />否則只要 x 或者 y 有一個值為 False,就返回 False |
or | x or y | 只要 x 或者 y 有一個值為 True,就返回 True<br />只有 x 和 y 的值都為 False,才會返回 False |
not | not x | 如果 x 為 True,返回 False<br />如果 x 為 False,返回 True |
04. 賦值運算符
- 在 Python 中,使用
=
可以給變量賦值 - 在算術運算時,為了簡化代碼的編寫,
Python
還提供了一系列的 與 算術運算符 對應的 賦值運算符 - 注意:賦值運算符中間不能使用空格
運算符 | 描述 | 實例 |
---|---|---|
= | 簡單的賦值運算符 | c = a + b 將 a + b 的運算結果賦值為 c |
+= | 加法賦值運算符 | c += a 等效于 c = c + a |
-= | 減法賦值運算符 | c -= a 等效于 c = c - a |
*= | 乘法賦值運算符 | c *= a 等效于 c = c * a |
/= | 除法賦值運算符 | c /= a 等效于 c = c / a |
//= | 取整除賦值運算符 | c //= a 等效于 c = c // a |
%= | 取 模 (余數)賦值運算符 | c %= a 等效于 c = c % a |
**= | 冪賦值運算符 | c **= a 等效于 c = c ** a |
05. 運算符的優先級
- 以下表格的算數優先級由高到最低順序排列
運算符 | 描述 |
---|---|
** | 冪 (最高優先級) |
* / % // | 乘、除、取余數、取整除 |
+ - | 加法、減法 |
<= < > >= | 比較運算符 |
== != | 等于運算符 |
= %= /= //= -= += *= **= | 賦值運算符 |
not or and | 邏輯運算符 |
分支語句
if 分支語句基本語法
- 在開發中,使用
if
可以 判斷條件 - 使用
else
可以處理 條件不成立 的情況 - 但是,如果希望 再增加一些條件,條件不同,需要執行的代碼也不同 時,就可以使用
elif
格式如下:
if 條件1:
條件1滿足執行的代碼
……
elif 條件2:
條件2滿足時,執行的代碼
……
elif 條件3:
條件3滿足時,執行的代碼
……
else:
以上條件都不滿足時,執行的代碼
……
注意:代碼的縮進為一個
tab
鍵,或者 4 個空格 —— 建議使用空格
- 在 Python 開發中,Tab 和空格不要混用!
邏輯運算
- 在程序開發中,通常 在判斷條件時,會需要同時判斷多個條件
- 只有多個條件都滿足,才能夠執行后續代碼,這個時候需要使用到 邏輯運算符
- 邏輯運算符 可以把 多個條件 按照 邏輯 進行 連接,變成 更復雜的條件
- Python 中的 邏輯運算符 包括:與 and/或 or/非 not 三種
例2 : 剪刀石頭布
import random
# 從控制臺輸入—— 石頭(1)/剪刀(2)/布(3)
player = int(input("請出拳 石頭(1)/剪刀(2)/布(3):"))
# 電腦 隨機出拳
computer = random.randint(1, 3)
# 比較勝負
# 如果條件判斷的內容太長,可以在最外側的條件增加一對大括號
# 再在每一個條件之間,使用回車,PyCharm 可以自動增加 8 個空格
if ((player == 1 and computer == 2) or
(player == 2 and computer == 3) or
(player == 3 and computer == 1)):
print("你贏了?。?!")
elif player == computer:
print("平局,再來一盤!")
else:
print("你輸了!")
循環語句
循環的作用: 讓 指定的代碼 重復的執行
while
語句基本語法
初始條件設置 —— 通常是重復執行的 計數器
while 條件(判斷 計數器 是否達到 目標次數):
條件滿足時,做的事情1
條件滿足時,做的事情2
條件滿足時,做的事情3
...(省略)...
處理條件(計數器 + 1)
注意:
-
while
語句以及縮進部分是一個 完整的代碼塊
例3: 計算 0 ~ 100 之間所有數字的累計求和結果
# 計算 0 ~ 100 之間所有數字的累計求和結果
# 0. 定義最終結果的變量
result = 0
# 1. 定義一個整數的變量記錄循環的次數
i = 0
# 2. 開始循環
while i <= 100:
print(i)
# 每一次循環,都讓 result 這個變量和 i 這個計數器相加
result += i
# 處理計數器
i += 1
print("0~100之間的數字求和結果 = %d" % result)
進階版: 計算 0 ~ 100 之間 所有 偶數 的累計求和結果
# 0. 最終結果
result = 0
# 1. 計數器
i = 0
# 2. 開始循環
while i <= 100:
# 判斷偶數
if i % 2 == 0:
print(i)
result += i
# 處理計數器
i += 1
print("0~100之間偶數求和結果 = %d" % result)
break 和 continue
break
和continue
是專門在循環中使用的關鍵字
-
break
某一條件滿足時,退出循環,不再執行后續重復的代碼 -
continue
某一條件滿足時,不執行后續重復的代碼
例4: break 和 continue
break
-
在循環過程中,如果 某一個條件滿足后,不 再希望 循環繼續執行,可以使用
break
退出循環
i = 0
while i < 10:
# break 某一條件滿足時,退出循環,不再執行后續重復的代碼
# i == 3
if i == 3:
break
print(i)
i += 1
print("over")
break 只針對當前所在循環有效
continue
在循環過程中,如果 某一個條件滿足后,不 希望 執行循環代碼,但是又不希望退出循環,可以使用
continue
-
也就是:在整個循環中,只有某些條件,不需要執行循環代碼,而其他條件都需要執行
i = 0
while i < 10:
# 當 i == 7 時,不希望執行需要重復執行的代碼
if i == 7:
# 在使用 continue 之前,同樣應該修改計數器
# 否則會出現死循環
i += 1
continue
# 重復執行的代碼
print(i)
i += 1
- 需要注意:使用
continue
時,條件處理部分的代碼,需要特別注意,不小心會出現 死循環
continue
只針對當前所在循環有效
循環嵌套
-
while
嵌套就是:while
里面還有while
例5:打印小星星
*
**
***
****
*****
- 使用字符串 * 打印
# 1. 定義一個計數器變量,從數字1開始,循環會比較方便
row = 1
while row <= 5:
print("*" * row)
row += 1
- 使用循環嵌套打印小星星
知識點 :對 print
函數的使用做一個增強
- 在默認情況下,
print
函數輸出內容之后,會自動在內容末尾增加換行 - 如果不希望末尾增加換行,可以在
print
函數輸出內容的后面增加, end=""
- 其中
""
中間可以指定print
函數輸出內容之后,繼續希望顯示的內容 - 語法格式如下:
# 向控制臺輸出內容結束之后,不會換行
print("*", end="")
# 單純的換行
print("")
end=""
表示向控制臺輸出內容結束之后,不會換行
實現流程:
- 1> 完成 5 行內容的簡單輸出
- 2> 分析每行內部的
*
應該如何處理?- 每行顯示的星星和當前所在的行數是一致的
- 嵌套一個小的循環,專門處理每一行中
列
的星星顯示
row = 1
while row <= 5:
# 假設 python 沒有提供字符串 * 操作
# 在循環內部,再增加一個循環,實現每一行的 星星 打印
col = 1
while col <= row:
print("*", end="")
col += 1
# 每一行星號輸出完成后,再增加一個換行
print("")
row += 1
例6:九九乘法表
# 定義起始行
row = 1
# 最大打印 9 行
while row <= 9:
# 定義起始列
col = 1
# 最大打印 row 列
while col <= row:
# end = "",表示輸出結束后,不換行
# "\t" 可以在控制臺輸出一個制表符,協助在輸出文本時對齊
print("%d * %d = %d" % (col, row, row * col), end="\t")
# 列數 + 1
col += 1
# 一行打印完成的換行
print("")
# 行數 + 1
row += 1