python3新手中的常見(jiàn)錯(cuò)誤
- 1> 手誤苏携,例如使用
pirnt("Hello world")
NameError: name 'pirnt' is not defined
名稱(chēng)錯(cuò)誤:'pirnt' 名字沒(méi)有定義
- 2> 將多條
print
寫(xiě)在一行
SyntaxError: invalid syntax
語(yǔ)法錯(cuò)誤:語(yǔ)法無(wú)效
每行代碼負(fù)責(zé)完成一個(gè)動(dòng)作
- 3> 縮進(jìn)錯(cuò)誤
IndentationError: unexpected indent
縮進(jìn)錯(cuò)誤:不期望出現(xiàn)的縮進(jìn)
- Python 是一個(gè)格式非常嚴(yán)格的程序設(shè)計(jì)語(yǔ)言
- 目前而言,大家記住每行代碼前面都不要增加空格
注釋
單行注釋(行注釋)
- 以
#
開(kāi)頭契讲,#
右邊的所有東西都被當(dāng)做說(shuō)明文字,而不是真正要執(zhí)行的程序滑频,只起到輔助說(shuō)明作用 - 示例代碼如下:
# 這是第一個(gè)單行注釋
print("hello python")
為了保證代碼的可讀性捡偏,
#
后面建議先添加一個(gè)空格,然后再編寫(xiě)相應(yīng)的說(shuō)明文字
在代碼后面增加的單行注釋
- 在程序開(kāi)發(fā)時(shí)峡迷,同樣可以使用
#
在代碼的后面(旁邊)增加說(shuō)明性的文字 - 但是银伟,需要注意的是,為了保證代碼的可讀性绘搞,注釋和代碼之間 至少要有 兩個(gè)空格
- 示例代碼如下:
print("hello python") # 輸出 `hello python`
多行注釋?zhuān)▔K注釋?zhuān)?/strong>
- 如果希望編寫(xiě)的 注釋信息很多彤避,一行無(wú)法顯示,就可以使用多行注釋
- 要在 Python 程序中使用多行注釋?zhuān)梢杂?一對(duì) 連續(xù)的 三個(gè) 引號(hào)(單引號(hào)和雙引號(hào)都可以)
- 示例代碼如下:
"""
這是一個(gè)多行注釋
在多行注釋之間夯辖,可以寫(xiě)很多很多的內(nèi)容……
"""
print("hello python")
什么時(shí)候需要使用注釋?zhuān)?/strong>
- 注釋不是越多越好琉预,對(duì)于一目了然的代碼,不需要添加注釋
- 對(duì)于 復(fù)雜的操作蒿褂,應(yīng)該在操作開(kāi)始前寫(xiě)上若干行注釋
- 對(duì)于 不是一目了然的代碼圆米,應(yīng)在其行尾添加注釋?zhuān)榱颂岣呖勺x性,注釋?xiě)?yīng)該至少離開(kāi)代碼 2 個(gè)空格)
- 絕不要描述代碼啄栓,假設(shè)閱讀代碼的人比你更懂 Python娄帖,他只是不知道你的代碼要做什么
變量的類(lèi)型
-
在
Python
中定義變量是 不需要指定類(lèi)型(在其他很多高級(jí)語(yǔ)言中都需要) 數(shù)據(jù)類(lèi)型可以分為 數(shù)字型 和 非數(shù)字型
-
數(shù)字型
- 整型 (
int
) - 浮點(diǎn)型(
float
) - 布爾型(
bool
)- 真
True
非 0 數(shù)
—— 非零即真 - 假
False
0
- 真
- 復(fù)數(shù)型 (
complex
)- 主要用于科學(xué)計(jì)算,例如:平面場(chǎng)問(wèn)題昙楚、波動(dòng)問(wèn)題近速、電感電容等問(wèn)題
- 整型 (
-
非數(shù)字型
- 字符串
- 列表
- 元組
- 字典
使用
type
函數(shù)可以查看一個(gè)變量的類(lèi)型
In [1]: type(name)
不同類(lèi)型變量之間的計(jì)算
1) 數(shù)字型變量 之間可以直接計(jì)算
-
在 Python 中,兩個(gè)數(shù)字型變量是可以直接進(jìn)行 算數(shù)運(yùn)算的
-
如果變量是
bool
型堪旧,在計(jì)算時(shí)True
對(duì)應(yīng)的數(shù)字是1
-
False
對(duì)應(yīng)的數(shù)字是0
演練步驟
- 定義整數(shù)
i = 10
- 定義浮點(diǎn)數(shù)
f = 10.5
- 定義布爾型
b = True
- 在 iPython 中削葱,使用上述三個(gè)變量相互進(jìn)行算術(shù)運(yùn)算
2) 字符串變量 之間使用 +
拼接字符串
-
在 Python 中,字符串之間可以使用
+
拼接生成新的字符串
In [1]: first_name = "三"
In [2]: last_name = "張"
In [3]: first_name + last_name
Out[3]: '三張'
3) 字符串變量 可以和 整數(shù) 使用 *
重復(fù)拼接相同的字符串
In [1]: "-" * 50
Out[1]: '--------------------------------------------------'
4) 數(shù)字型變量 和 字符串 之間 不能進(jìn)行其他計(jì)算
In [1]: first_name = "zhang"
In [2]: x = 10
In [3]: x + first_name
---------------------------------------------------------------------------
TypeError: unsupported operand type(s) for +: 'int' and 'str'
類(lèi)型錯(cuò)誤:`+` 不支持的操作類(lèi)型:`int` 和 `str`
字符串中的轉(zhuǎn)義字符
-
\t
在控制臺(tái)輸出一個(gè) 制表符崎场,協(xié)助在輸出文本時(shí) 垂直方向 保持對(duì)齊 -
\n
在控制臺(tái)輸出一個(gè) 換行符
制表符 的功能是在不使用表格的情況下在 垂直方向 按列對(duì)齊文本
轉(zhuǎn)義字符 | 描述 |
---|---|
\\ | 反斜杠符號(hào) |
\' | 單引號(hào) |
\" | 雙引號(hào) |
\n | 換行 |
\t | 橫向制表符 |
\r | 回車(chē) |
變量的輸入與輸出
函數(shù) | 說(shuō)明 |
---|---|
print(x) | 將 x 輸出到控制臺(tái) |
type(x) | 查看 x 的變量類(lèi)型 |
1) input 函數(shù)實(shí)現(xiàn)鍵盤(pán)輸入
- 在 Python 中可以使用
input
函數(shù)從鍵盤(pán)等待用戶(hù)的輸入 - 用戶(hù)輸入的 任何內(nèi)容 Python 都認(rèn)為是一個(gè) 字符串
- 語(yǔ)法如下:
字符串變量 = input("提示信息:")
2) 類(lèi)型轉(zhuǎn)換函數(shù)
函數(shù) | 說(shuō)明 |
---|---|
int(x) | 將 x 轉(zhuǎn)換為一個(gè)整數(shù) |
float(x) | 將 x 轉(zhuǎn)換到一個(gè)浮點(diǎn)數(shù) |
3) 變量的格式化輸出
- 如果希望輸出文字信息的同時(shí)佩耳,一起輸出 數(shù)據(jù),就需要使用到 格式化操作符
-
%
被稱(chēng)為 格式化操作符谭跨,專(zhuān)門(mén)用于處理字符串中的格式- 包含
%
的字符串干厚,被稱(chēng)為 格式化字符串 -
%
和不同的 字符 連用,不同類(lèi)型的數(shù)據(jù) 需要使用 不同的格式化字符
- 包含
格式化字符 | 含義 |
---|---|
%s | 字符串 |
%d | 有符號(hào)十進(jìn)制整數(shù)螃宙,%06d 表示輸出的整數(shù)顯示位數(shù)蛮瞄,不足的地方使用 0 補(bǔ)全 |
%f | 浮點(diǎn)數(shù),%.2f 表示小數(shù)點(diǎn)后只顯示兩位 |
%% | 輸出 %
|
- 語(yǔ)法格式如下:
print("格式化字符串" % 變量1)
print("格式化字符串" % (變量1, 變量2...))
例1
- 定義字符串變量
name
谆扎,輸出 我的名字叫 小明挂捅,請(qǐng)多多關(guān)照! - 定義整數(shù)變量
student_no
堂湖,輸出 我的學(xué)號(hào)是 000001 - 定義小數(shù)
price
闲先、weight
状土、money
,輸出 蘋(píng)果單價(jià) 9.00 元/斤伺糠,購(gòu)買(mǎi)了 5.00 斤蒙谓,需要支付 45.00 元 - 定義一個(gè)小數(shù)
scale
,輸出 數(shù)據(jù)比例是 10.00%
print("我的名字叫 %s训桶,請(qǐng)多多關(guān)照累驮!" % name)
print("我的學(xué)號(hào)是 %06d" % student_no)
print("蘋(píng)果單價(jià) %.02f 元/斤,購(gòu)買(mǎi) %.02f 斤舵揭,需要支付 %.02f 元" % (price, weight, money))
print("數(shù)據(jù)比例是 %.02f%%" % (scale * 100))
標(biāo)識(shí)符與關(guān)鍵字
標(biāo)識(shí)符
標(biāo)示符就是程序員定義的 變量名谤专、函數(shù)名
- 標(biāo)示符可以由 字母、下劃線 和 數(shù)字 組成
- 不能以數(shù)字開(kāi)頭
- 不能與關(guān)鍵字重名
關(guān)鍵字
-
關(guān)鍵字 就是在
Python
內(nèi)部已經(jīng)使用的標(biāo)識(shí)符 - 關(guān)鍵字 具有特殊的功能和含義
- 開(kāi)發(fā)者 不允許定義和關(guān)鍵字相同的名字的標(biāo)示符
通過(guò)以下命令可以查看 Python
中的關(guān)鍵字
In [1]: import keyword
In [2]: print(keyword.kwlist)
變量命名規(guī)則
命名規(guī)則 可以被視為一種 慣例午绳,并無(wú)絕對(duì)與強(qiáng)制
目的是為了 增加代碼的識(shí)別和可讀性
注意 Python
中的 標(biāo)識(shí)符 是 區(qū)分大小寫(xiě)的
在定義變量時(shí)置侍,為了保證代碼格式,
=
的左右應(yīng)該各保留一個(gè)空格-
在
Python
中拦焚,如果 變量名 需要由 二個(gè) 或 多個(gè)單詞 組成時(shí)墅垮,可以按照以下方式命名- 每個(gè)單詞都使用小寫(xiě)字母
- 單詞與單詞之間使用
_
下劃線 連接
- 例如:
first_name
、last_name
耕漱、qq_number
、qq_password
駝峰命名法
- 當(dāng) 變量名 是由二個(gè)或多個(gè)單詞組成時(shí)抬伺,還可以利用駝峰命名法來(lái)命名
-
小駝峰式命名法
- 第一個(gè)單詞以小寫(xiě)字母開(kāi)始螟够,后續(xù)單詞的首字母大寫(xiě)
- 例如:
firstName
、lastName
-
大駝峰式命名法
- 每一個(gè)單詞的首字母都采用大寫(xiě)字母
- 例如:
FirstName
峡钓、LastName
妓笙、CamelCase
運(yùn)算符
數(shù)學(xué)符號(hào)表鏈接:https://zh.wikipedia.org/wiki/數(shù)學(xué)符號(hào)表
01. 算數(shù)運(yùn)算符
- 是完成基本的算術(shù)運(yùn)算使用的符號(hào),用來(lái)處理四則運(yùn)算
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
+ | 加 | 10 + 20 = 30 |
- | 減 | 10 - 20 = -10 |
* | 乘 | 10 * 20 = 200 |
/ | 除 | 10 / 20 = 0.5 |
// | 取整除 | 返回除法的整數(shù)部分(商) 9 // 2 輸出結(jié)果 4 |
% | 取余數(shù) | 返回除法的余數(shù) 9 % 2 = 1 |
** | 冪 | 又稱(chēng)次方能岩、乘方寞宫,2 ** 3 = 8 |
- 在 Python 中
*
運(yùn)算符還可以用于字符串,計(jì)算結(jié)果就是字符串重復(fù)指定次數(shù)的結(jié)果
In [1]: "-" * 50
Out[1]: '----------------------------------------'
02. 比較(關(guān)系)運(yùn)算符
運(yùn)算符 | 描述 |
---|---|
== | 檢查兩個(gè)操作數(shù)的值是否 相等拉鹃,如果是辈赋,則條件成立,返回 True |
!= | 檢查兩個(gè)操作數(shù)的值是否 不相等膏燕,如果是钥屈,則條件成立,返回 True |
> | 檢查左操作數(shù)的值是否 大于 右操作數(shù)的值坝辫,如果是篷就,則條件成立,返回 True |
< | 檢查左操作數(shù)的值是否 小于 右操作數(shù)的值近忙,如果是竭业,則條件成立智润,返回 True |
>= | 檢查左操作數(shù)的值是否 大于或等于 右操作數(shù)的值,如果是未辆,則條件成立窟绷,返回 True |
<= | 檢查左操作數(shù)的值是否 小于或等于 右操作數(shù)的值,如果是鼎姐,則條件成立钾麸,返回 True |
03. 邏輯運(yùn)算符
運(yùn)算符 | 邏輯表達(dá)式 | 描述 |
---|---|---|
and | x and y | 只有 x 和 y 的值都為 True,才會(huì)返回 True<br />否則只要 x 或者 y 有一個(gè)值為 False炕桨,就返回 False |
or | x or y | 只要 x 或者 y 有一個(gè)值為 True饭尝,就返回 True<br />只有 x 和 y 的值都為 False,才會(huì)返回 False |
not | not x | 如果 x 為 True献宫,返回 False<br />如果 x 為 False钥平,返回 True |
04. 賦值運(yùn)算符
- 在 Python 中,使用
=
可以給變量賦值 - 在算術(shù)運(yùn)算時(shí)姊途,為了簡(jiǎn)化代碼的編寫(xiě)涉瘾,
Python
還提供了一系列的 與 算術(shù)運(yùn)算符 對(duì)應(yīng)的 賦值運(yùn)算符 - 注意:賦值運(yùn)算符中間不能使用空格
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
= | 簡(jiǎn)單的賦值運(yùn)算符 | c = a + b 將 a + b 的運(yùn)算結(jié)果賦值為 c |
+= | 加法賦值運(yùn)算符 | c += a 等效于 c = c + a |
-= | 減法賦值運(yùn)算符 | c -= a 等效于 c = c - a |
*= | 乘法賦值運(yùn)算符 | c *= a 等效于 c = c * a |
/= | 除法賦值運(yùn)算符 | c /= a 等效于 c = c / a |
//= | 取整除賦值運(yùn)算符 | c //= a 等效于 c = c // a |
%= | 取 模 (余數(shù))賦值運(yùn)算符 | c %= a 等效于 c = c % a |
**= | 冪賦值運(yùn)算符 | c **= a 等效于 c = c ** a |
05. 運(yùn)算符的優(yōu)先級(jí)
- 以下表格的算數(shù)優(yōu)先級(jí)由高到最低順序排列
運(yùn)算符 | 描述 |
---|---|
** | 冪 (最高優(yōu)先級(jí)) |
* / % // | 乘、除捷兰、取余數(shù)立叛、取整除 |
+ - | 加法、減法 |
<= < > >= | 比較運(yùn)算符 |
== != | 等于運(yùn)算符 |
= %= /= //= -= += *= **= | 賦值運(yùn)算符 |
not or and | 邏輯運(yùn)算符 |
分支語(yǔ)句
if 分支語(yǔ)句基本語(yǔ)法
- 在開(kāi)發(fā)中贡茅,使用
if
可以 判斷條件 - 使用
else
可以處理 條件不成立 的情況 - 但是秘蛇,如果希望 再增加一些條件,條件不同顶考,需要執(zhí)行的代碼也不同 時(shí)赁还,就可以使用
elif
格式如下:
if 條件1:
條件1滿(mǎn)足執(zhí)行的代碼
……
elif 條件2:
條件2滿(mǎn)足時(shí),執(zhí)行的代碼
……
elif 條件3:
條件3滿(mǎn)足時(shí)驹沿,執(zhí)行的代碼
……
else:
以上條件都不滿(mǎn)足時(shí)艘策,執(zhí)行的代碼
……
注意:代碼的縮進(jìn)為一個(gè)
tab
鍵,或者 4 個(gè)空格 —— 建議使用空格
- 在 Python 開(kāi)發(fā)中渊季,Tab 和空格不要混用朋蔫!
邏輯運(yùn)算
- 在程序開(kāi)發(fā)中,通常 在判斷條件時(shí)梭域,會(huì)需要同時(shí)判斷多個(gè)條件
- 只有多個(gè)條件都滿(mǎn)足斑举,才能夠執(zhí)行后續(xù)代碼,這個(gè)時(shí)候需要使用到 邏輯運(yùn)算符
- 邏輯運(yùn)算符 可以把 多個(gè)條件 按照 邏輯 進(jìn)行 連接病涨,變成 更復(fù)雜的條件
- Python 中的 邏輯運(yùn)算符 包括:與 and/或 or/非 not 三種
例2 : 剪刀石頭布
import random
# 從控制臺(tái)輸入—— 石頭(1)/剪刀(2)/布(3)
player = int(input("請(qǐng)出拳 石頭(1)/剪刀(2)/布(3):"))
# 電腦 隨機(jī)出拳
computer = random.randint(1, 3)
# 比較勝負(fù)
# 如果條件判斷的內(nèi)容太長(zhǎng)富玷,可以在最外側(cè)的條件增加一對(duì)大括號(hào)
# 再在每一個(gè)條件之間,使用回車(chē),PyCharm 可以自動(dòng)增加 8 個(gè)空格
if ((player == 1 and computer == 2) or
(player == 2 and computer == 3) or
(player == 3 and computer == 1)):
print("你贏了J昱场H妇椤!")
elif player == computer:
print("平局励两,再來(lái)一盤(pán)黎茎!")
else:
print("你輸了!")
循環(huán)語(yǔ)句
循環(huán)的作用: 讓 指定的代碼 重復(fù)的執(zhí)行
while
語(yǔ)句基本語(yǔ)法
初始條件設(shè)置 —— 通常是重復(fù)執(zhí)行的 計(jì)數(shù)器
while 條件(判斷 計(jì)數(shù)器 是否達(dá)到 目標(biāo)次數(shù)):
條件滿(mǎn)足時(shí)当悔,做的事情1
條件滿(mǎn)足時(shí)傅瞻,做的事情2
條件滿(mǎn)足時(shí),做的事情3
...(省略)...
處理?xiàng)l件(計(jì)數(shù)器 + 1)
注意:
-
while
語(yǔ)句以及縮進(jìn)部分是一個(gè) 完整的代碼塊
例3: 計(jì)算 0 ~ 100 之間所有數(shù)字的累計(jì)求和結(jié)果
# 計(jì)算 0 ~ 100 之間所有數(shù)字的累計(jì)求和結(jié)果
# 0. 定義最終結(jié)果的變量
result = 0
# 1. 定義一個(gè)整數(shù)的變量記錄循環(huán)的次數(shù)
i = 0
# 2. 開(kāi)始循環(huán)
while i <= 100:
print(i)
# 每一次循環(huán)盲憎,都讓 result 這個(gè)變量和 i 這個(gè)計(jì)數(shù)器相加
result += i
# 處理計(jì)數(shù)器
i += 1
print("0~100之間的數(shù)字求和結(jié)果 = %d" % result)
進(jìn)階版: 計(jì)算 0 ~ 100 之間 所有 偶數(shù) 的累計(jì)求和結(jié)果
# 0. 最終結(jié)果
result = 0
# 1. 計(jì)數(shù)器
i = 0
# 2. 開(kāi)始循環(huán)
while i <= 100:
# 判斷偶數(shù)
if i % 2 == 0:
print(i)
result += i
# 處理計(jì)數(shù)器
i += 1
print("0~100之間偶數(shù)求和結(jié)果 = %d" % result)
break 和 continue
break
和continue
是專(zhuān)門(mén)在循環(huán)中使用的關(guān)鍵字
-
break
某一條件滿(mǎn)足時(shí)嗅骄,退出循環(huán),不再執(zhí)行后續(xù)重復(fù)的代碼 -
continue
某一條件滿(mǎn)足時(shí)饼疙,不執(zhí)行后續(xù)重復(fù)的代碼
例4: break 和 continue
break
-
在循環(huán)過(guò)程中溺森,如果 某一個(gè)條件滿(mǎn)足后,不 再希望 循環(huán)繼續(xù)執(zhí)行,可以使用
break
退出循環(huán)
i = 0
while i < 10:
# break 某一條件滿(mǎn)足時(shí),退出循環(huán)蚀苛,不再執(zhí)行后續(xù)重復(fù)的代碼
# i == 3
if i == 3:
break
print(i)
i += 1
print("over")
break 只針對(duì)當(dāng)前所在循環(huán)有效
continue
在循環(huán)過(guò)程中,如果 某一個(gè)條件滿(mǎn)足后炊林,不 希望 執(zhí)行循環(huán)代碼,但是又不希望退出循環(huán)卷要,可以使用
continue
-
也就是:在整個(gè)循環(huán)中铛铁,只有某些條件,不需要執(zhí)行循環(huán)代碼却妨,而其他條件都需要執(zhí)行
i = 0
while i < 10:
# 當(dāng) i == 7 時(shí),不希望執(zhí)行需要重復(fù)執(zhí)行的代碼
if i == 7:
# 在使用 continue 之前括眠,同樣應(yīng)該修改計(jì)數(shù)器
# 否則會(huì)出現(xiàn)死循環(huán)
i += 1
continue
# 重復(fù)執(zhí)行的代碼
print(i)
i += 1
- 需要注意:使用
continue
時(shí)彪标,條件處理部分的代碼,需要特別注意掷豺,不小心會(huì)出現(xiàn) 死循環(huán)
continue
只針對(duì)當(dāng)前所在循環(huán)有效
循環(huán)嵌套
-
while
嵌套就是:while
里面還有while
例5:打印小星星
*
**
***
****
*****
- 使用字符串 * 打印
# 1. 定義一個(gè)計(jì)數(shù)器變量捞烟,從數(shù)字1開(kāi)始,循環(huán)會(huì)比較方便
row = 1
while row <= 5:
print("*" * row)
row += 1
- 使用循環(huán)嵌套打印小星星
知識(shí)點(diǎn) :對(duì) print
函數(shù)的使用做一個(gè)增強(qiáng)
- 在默認(rèn)情況下当船,
print
函數(shù)輸出內(nèi)容之后题画,會(huì)自動(dòng)在內(nèi)容末尾增加換行 - 如果不希望末尾增加換行,可以在
print
函數(shù)輸出內(nèi)容的后面增加, end=""
- 其中
""
中間可以指定print
函數(shù)輸出內(nèi)容之后德频,繼續(xù)希望顯示的內(nèi)容 - 語(yǔ)法格式如下:
# 向控制臺(tái)輸出內(nèi)容結(jié)束之后苍息,不會(huì)換行
print("*", end="")
# 單純的換行
print("")
end=""
表示向控制臺(tái)輸出內(nèi)容結(jié)束之后,不會(huì)換行
實(shí)現(xiàn)流程:
- 1> 完成 5 行內(nèi)容的簡(jiǎn)單輸出
- 2> 分析每行內(nèi)部的
*
應(yīng)該如何處理?- 每行顯示的星星和當(dāng)前所在的行數(shù)是一致的
- 嵌套一個(gè)小的循環(huán)竞思,專(zhuān)門(mén)處理每一行中
列
的星星顯示
row = 1
while row <= 5:
# 假設(shè) python 沒(méi)有提供字符串 * 操作
# 在循環(huán)內(nèi)部表谊,再增加一個(gè)循環(huán),實(shí)現(xiàn)每一行的 星星 打印
col = 1
while col <= row:
print("*", end="")
col += 1
# 每一行星號(hào)輸出完成后盖喷,再增加一個(gè)換行
print("")
row += 1
例6:九九乘法表
# 定義起始行
row = 1
# 最大打印 9 行
while row <= 9:
# 定義起始列
col = 1
# 最大打印 row 列
while col <= row:
# end = ""爆办,表示輸出結(jié)束后,不換行
# "\t" 可以在控制臺(tái)輸出一個(gè)制表符课梳,協(xié)助在輸出文本時(shí)對(duì)齊
print("%d * %d = %d" % (col, row, row * col), end="\t")
# 列數(shù) + 1
col += 1
# 一行打印完成的換行
print("")
# 行數(shù) + 1
row += 1