其實,程序指的就是一系列指令,用來告訴計算機作什麼,而編寫程序的關鍵在於,咱們須要用計算機能夠理解的語言來提供這些指令。html
爲了有效避開全部影響給計算機傳遞指令的因素,計算機科學家設計了一些符號,這些符號各有其含義,且之間無二義性,一般稱它們爲編程語言。編程語言中的每一個結構,都有固定的使用格式(稱爲語法)以及精確的含義(稱爲語義)。換句話說,編程語言指定了成套的規則,用來編寫計算機能夠理解的指令。習慣上,咱們將這一條條指令稱爲計算機代碼,而用編程語言來編寫算法的過程稱爲編碼。java
本教程要講解的 Python] 就是一種編程語言,除此以外,你確定也據說過其餘一些編程語言,如 C、C++,Java、Ruby 等。至今,計算機科學家已經開發了成百上千種編程語言,且隨着時間演變,這些編程語言又產生了多個不一樣的版本。但不管是哪一個編程語言,也不管有多少個版本,雖然它們在細節上可能有所不一樣,無疑它們都有着固定的、無二義性的語法和語義。python
以上提到的編程語言,都是高級計算機語言,設計它們的目的是爲了方便程序員理解和使用。但嚴格來講,計算機硬件只能理解一種很是低級的編程語言,稱爲機器語言。git
咱們編寫的源代碼是人類語言,咱們本身可以輕鬆理解;可是對於計算機硬件(CPU),源代碼就是天書,根本沒法執行,計算機只能識別某些特定的二進制指令,在程序真正運行以前必須將源代碼轉換成二進制指令。所謂的二進制指令,也就是機器碼,是 CPU 可以識別的硬件層面的「代碼」。程序員
然而,究竟在何時將源代碼轉換成二進制指令呢?不一樣的編程語言有不一樣的規定:算法
有的編程語言要求必須提早將全部源代碼一次性轉換成二進制指令,也就是生成一個可執行程序(Windows 下的 .exe),好比C語言、C++、Go、Pascal(Delphi)、彙編等,這種編程語言稱爲編譯型語言,使用的轉換工具稱爲編譯器。編程
有的編程語言能夠一邊執行一邊轉換,須要哪些源代碼就轉換哪些源代碼,不會生成可執行程序,好比 Python、JavaScript、PHP、Shell、MATLAB等,這種編程語言稱爲解釋型語言,使用的轉換工具稱爲解釋器。api
一、簡單理解,編譯器就是一個「翻譯工具」,相似於將中文翻譯成英文、將英文翻譯成俄文。可是,翻譯源代碼是一個複雜的過程,大體包括詞法分析、語法分析、語義分析、性能優化、生成可執行文件等幾個步驟數組
二、Java和 C#是一種比較奇葩的存在,它們是半編譯半解釋型的語言,源代碼須要先轉換成一種中間文件(字節碼文件),而後再將中間文件拿到虛擬機中執行。Java 引領了這種風潮,它的初衷是在跨平臺的同時兼顧執行效率;C# 是後來的跟隨者,可是 C# 一直止步於 Windows 平臺,在其它平臺鮮有做爲。性能優化
圖 1 編譯型語言和解釋型語言的執行流程
那麼,編譯型語言和解釋型語言各有什麼特色呢?它們之間有什麼區別?
對於編譯型語言,開發完成之後須要將全部的源代碼都轉換成可執行程序,好比 Windows 下的.exe
文件,可執行程序裏面包含的就是機器碼。只要咱們擁有可執行程序,就能夠隨時運行,不用再從新編譯了,也就是「一次編譯,無限次運行」。在運行的時候,咱們只須要編譯生成的可執行程序,再也不須要源代碼和編譯器了,因此說編譯型語言能夠脫離開發環境運行。編譯型語言通常是不能跨平臺的,也就是不能在不一樣的操做系統之間隨意切換。
對於解釋型語言,每次執行程序都須要一邊轉換一邊執行,用到哪些源代碼就將哪些源代碼轉換成機器碼,用不到的不進行任何處理。每次執行程序時可能使用不一樣的功能,這個時候須要轉換的源代碼也不同。由於每次執行程序都須要從新轉換源代碼,因此解釋型語言的執行效率天生就低於編譯型語言,甚至存在數量級的差距。計算機的一些底層功能,或者關鍵算法,通常都使用 C/C++ 實現,只有在應用層面(好比網站開發、批處理、小工具等)纔會使用解釋型語言。
在運行解釋型語言的時候,咱們始終都須要源代碼和解釋器,因此說它沒法脫離開發環境。
當咱們說「下載一個程序(軟件)」時,不一樣類型的語言有不一樣的含義:
對於編譯型語言,咱們下載到的是可執行文件,源代碼被做者保留,因此編譯型語言的程序通常是閉源的。
對於解釋型語言,咱們下載到的是全部的源代碼,由於做者不給源代碼就無法運行,因此解釋型語言的程序通常是開源的。
相比於編譯型語言,解釋型語言幾乎都能跨平臺,「一次編寫,處處運行」是真是存在的,並且比比皆是。那麼,爲何解釋型語言就能跨平臺呢?這一切都要歸功於解釋器!
咱們所說的跨平臺,是指源代碼跨平臺,而不是解釋器跨平臺。解釋器用來將源代碼轉換成機器碼,它就是一個可執行程序,是絕對不能跨平臺的。解釋型語言之因此可以跨平臺,是由於有了解釋器這個中間層。在不一樣的平臺下,解釋器會將相同的源代碼轉換成不一樣的機器碼,解釋器幫助咱們屏蔽了不一樣平臺之間的差別。
Python 屬於典型的解釋型語言,因此運行 Python 程序須要解釋器的支持,只要你在不一樣的平臺安裝了不一樣的解釋器,你的代碼就能夠隨時運行,不用擔憂任何兼容性問題,真正的「一次編寫,處處運行」。Python 幾乎支持全部常見的平臺,好比 Linux、Windows、Mac OS、Android、FreeBSD、Solaris、PocketPC 等,你所寫的 Python 代碼無需修改就能在這些平臺上正確運行。也就是說,Python 的可移植性是很強的。
Python 英文原意爲「蟒蛇」,直到 1989 年荷蘭人 Guido van Rossum (簡稱 Guido)發明了一種面向對象的解釋型編程語言,並將其命名爲 Python,才賦予了它表示一門編程語言的含義。
Python 語言是在 ABC 教學語言的基礎上發展來的;遺憾的是,ABC 語言雖然很是強大,但卻沒有普及應用,Guido 認爲是它不開放致使的。基於這個考慮,Guido 在開發 Python 時,不只爲其添加了不少 ABC 沒有的功能,還爲其設計了各類豐富而強大的庫,利用這些 Python 庫,程序員能夠把使用其它語言製做的各類模塊(尤爲是C語言和 C++)很輕鬆地聯結在一塊兒,所以 Python 又常被稱爲「膠水」語言。
Python的語言優點有如下幾個點:
簡單易學
跨平臺
豐富強大的庫
極高的開發效率
應用領域普遍
擴展性強
'''
(1)Cpython(官方推薦)
把python轉化成c語言能識別的二進制碼
(2)Jpython
把python轉化成java語言能識別的二進制碼
(3)其餘語言解釋器
把python轉化成其餘語言能識別的二進制碼
(4)PyPy
將全部代碼一次性編譯成二進制碼,加快執行效率(模仿編譯型語言的一款python解釋器)
'''
'''
python 2.x 版本,官方在 2020 年中止支持,原碼不規範,重複較多
python 3.x 版本,功能更增強大且修復了不少bug,原碼清晰,簡單
'''
Python 安裝包下載地址:https://www.python.org/downloads/
安裝完成之後,打開 Windows 的命令行程序(命令提示符),在窗口中輸入python
命令(注意字母p
是小寫的),若是出現 Python 的版本信息,並看到命令提示符>>>
,就說明安裝成功了,以下圖所示。
請儘可能勾選
Add Python 3.8 to PATH
,這樣能夠將 Python 命令工具所在目錄添加到系統 Path 環境變量中,之後開發程序或者運行 Python 命令會很是方便。
python python文件名
簡單地理解,標識符就是一個名字,就好像咱們每一個人都有屬於本身的名字,它的主要做用就是做爲變量、函數、類、模塊以及其餘對象的名稱。Python中標識符的命名不是隨意的,而是要遵照必定的命令規則
'''
一、標識符是由字符(A~Z 和 a~z)、下劃線和數字組成,但第一個字符不能是數字。
二、標識符不能和 Python 中的保留字相同。有關保留字,後續章節會詳細介紹。
三、Python中的標識符中,不能包含空格、@、% 以及 $ 等特殊字符。
四、在 Python 中,標識符中的字母是嚴格區分大小寫
五、Python 語言中,如下劃線開頭的標識符有特殊含義
六、Python 容許使用漢字做爲標識符(不推薦)
'''
標識符的命名,除了要遵照以上這幾條規則外,不一樣場景中的標識符,其名稱也有必定的規範可循,例如:
'''
- 當標識符用做模塊名時,應儘可能短小,而且所有使用小寫字母,可使用下劃線分割多個字母,例如 game_mian、game_register 等。
- 當標識符用做包的名稱時,應儘可能短小,也所有使用小寫字母,不推薦使用下劃線,例如 com.mr、com.mr.book 等。
- 當標識符用做類名時,應採用單詞首字母大寫的形式。例如,定義一個圖書類,能夠命名爲 Book。
- 模塊內部的類名,能夠採用 "下劃線+首字母大寫" 的形式,如 _Book;
- 函數名、類中的屬性名和方法名,應所有使用小寫字母,多個單詞之間能夠用下劃線分割;
- 常量命名應所有使用大寫字母,單詞之間能夠用下劃線分割;
'''
and | as | assert | break | class | continue |
---|---|---|---|---|---|
def | del | elif | else | except | finally |
for | from | False | global | if | import |
in | is | lambda | nonlocal | not | None |
or | pass | raise | return | try | True |
while | with | yield |
變量是一段有名字的連續存儲空間。咱們經過定義變量來申請並命名這樣的存儲空間,並經過變量的名字來使用這段存儲空間。在編程語言中,將數據放入變量的過程叫作賦值(Assignment)。Python 使用等號=
做爲賦值運算符,具體格式爲:
變量名 = 任意類型的值(存儲數據)
例如:
x = 10
y = "hi,yuan"
z = True
# 變量的值能夠隨時被修改,只要從新賦值便可 並且,你也不用關心數據的類型
x = "hello world"
思考:
x = 10
x = 20
y = x
y = 30
print(x)
print(y)
在C、Java等語言的語法中規定,必須以分號做爲語句結束的標識。Python也支持分號,一樣用於一條語句的結束標識。但在Python中分號的做用已經不像C、Java中那麼重要了,Python中的分號能夠省略,主要經過換行來識別語句的結束。
和其它程序設計語言(如
注意,Python 中實現對代碼的縮進,可使用空格或者 Tab 鍵實現。但不管是手動敲空格,仍是使用 Tab 鍵,一般狀況下都是採用 4 個空格長度做爲一個縮進量(默認狀況下,一個 Tab 鍵就表示 4 個空格)。
Python 的設計哲學是優雅、明確、簡單
註釋(Comments)用來向用戶提示或解釋某些代碼的做用和功能,它能夠出如今代碼中的任何位置。
通常狀況下,合理的代碼註釋應該佔源代碼的 1/3 左右。Python 支持兩種類型的註釋,分別是單行註釋和多行註釋。
# Python的單行註釋
'''
Python的多行註釋
這是註釋代碼,不被解釋器執行的內容
'''
注意事項:
(1) Python 多行註釋不支持嵌套
(2) 無論是多行註釋仍是單行註釋,當註釋符做爲字符串的一部分出現時,就不能再將它們視爲註釋標記,而應該看作正常代碼的一部分,例如:
print('''Hello,World!''')
print("""http://c.biancheng.net/cplus/""")
print("#是單行註釋的開始")
print("hi,yuan") # 輸入函數
input(">>>") # 輸入函數
Python 採用 PEP 8 做爲編碼規範,其中 PEP 是 Python Enhancement Proposal(Python 加強建議書)的縮寫,8 表明的是 Python 代碼的樣式指南。下面僅給你們列出 PEP 8 中初學者應嚴格遵照的一些編碼規則:
一、每一個 import 語句只導入一個模塊,儘可能避免一次導入多個模塊,例如:
#推薦
import os
import sys
#不推薦
import os,sys
關於 import 的含義和用法會在後續介紹,這裏沒必要深究。
二、不要在行尾添加分號,也不要用分號將兩條命令放在同一行
三、建議每行不超過 80 個字符,若是超過,建議使用小括號將多行內容隱式的鏈接起來,而不推薦使用反斜槓 \ 進行鏈接。例如,若是一個字符串文本沒法實現一行徹底顯示,則可使用小括號將其分開顯示,代碼以下:
#推薦
s=("C語言中文網是中國領先的C語言程序設計專業網站,"
"提供C語言入門經典教程、C語言編譯器、C語言函數手冊等。")
#不推薦
s="C語言中文網是中國領先的C語言程序設計專業網站,\
提供C語言入門經典教程、C語言編譯器、C語言函數手冊等。"
四、使用必要的空行能夠增長代碼的可讀性,一般在頂級定義(如函數或類的定義)之間空兩行,而方法定義之間空一行,另外在用於分隔某些功能的位置也能夠空一行。
五、一般狀況下,在運算符兩側、函數參數之間以及逗號兩側,都建議使用空格進行分隔。
整數就是沒有小數部分的數字,Python 中的整數包括正整數、0 和負整數。有些強類型的編程語言會提供多種整數類型,每種類型的長度都不一樣,能容納的整數的大小也不一樣,開發者要根據實際數字的大小選用不一樣的類型。例如C語言提供了 short、int、long、long long 四種類型的整數,它們的長度依次遞增,初學者在選擇整數類型時每每比較迷惑,有時候還會致使數值溢出。而 Python 則不一樣,它的整數不分類型,或者說它只有一種類型的整數。Python 整數的取值範圍是無限的,無論多大或者多小的數字,Python 都能輕鬆處理。
x = 10
print(type(x)) # <class 'int'>
x = 100000000000000000000000000000000000000000000000000
print(type(x))
print(x)
進制
# 十六進制
print(0x11)
print(0x111)
# 二進制
print(0b101)
print(0B101)
# 八進制
print(0o12)
print(0o23)
# 十進制轉換爲二進制
print(bin(3))
# 十進制轉換爲十六進制
print(hex(19))
# 十進制轉換爲八進制
print(oct(10))
在編程語言中,小數一般以浮點數的形式存儲。
Python中的小數有兩種書寫形式:
(1) 十進制形式
這種就是咱們平時看到的小數形式,例如 34.六、346.0、0.346。書寫小數時必須包含一個小數點,不然會被 Python 看成整數處理。
(2)指數形式
Python 小數的指數形式的寫法爲:aEn 或 aen
指數形式的小數舉例:
2.1E5 = 2.1×105,其中 2.1 是尾數,5 是指數。
3.7E-2 = 3.7×10-2,其中 3.7 是尾數,-2 是指數。
0.5E7 = 0.5×107,其中 0.5 是尾數,7 是指數。
注意,只要寫成指數形式就是小數,即便它的最終值看起來像一個整數。例如 14E3 等價於 14000,但 14E3 是一個小數。Python 只有一種小數類型,就是 float。
f1 = 3.14
print(f1)
print(type(f1)) # <class 'float'>
f2 =0.000000000000000000000000000000003
print(f2)
print(type(f2))
f3 = 3.141592612345678987654321
print(f3)
print(type(f3))
f4 = 12e4
print(f4)
print(type(f4))
Python提供了 bool 類型來表示真(對)或假(錯),好比常見的5 > 3
比較算式,這個是正確的,在程序世界裏稱之爲真(對),Python 使用 True 來表明;再好比4 > 20
比較算式,這個是錯誤的,在程序世界裏稱之爲假(錯),Python 使用 False 來表明。
print(4 == 2) # False
print(5 > 1) # True
name = "yuan"
print(name == "alex") # False
print(1=="1") # False
True 至關於整數值 1,False 至關於整數值 0。
字符串是由零個或多個字符組成的有限序列。字符串的內容能夠包含字母、標點、特殊符號、中文、日文等全世界的全部字符。
s1 = "hi yuan"
print(s1)
s2 = ""
print(s2)
s3 = "苑是最好的老師!"
print(s3)
Python 字符串中的雙引號和單引號沒有任何區別
轉義字符 | 說明 |
---|---|
\n | 換行符,將光標位置移到下一行開頭。 |
\r | 回車符,將光標位置移到本行開頭。 |
\t | 水平製表符,也即 Tab 鍵,通常至關於四個空格。 |
\a | 蜂鳴器響鈴。注意不是喇叭發聲,如今的計算機不少都不帶蜂鳴器了,因此響鈴不必定有效。 |
\b | 退格(Backspace),將光標位置移到前一列。 |
\ | 反斜線 |
' | 單引號 |
" | 雙引號 |
\ | 在字符串行尾的續行符,即一行未完,轉到下一行繼續寫。 |
s1 = "hi yuan\noldboyedu"
print(s1)
s2 = 'I\'m yuan'
print(s2)
s3 = "D:\\nythonProject\\nenv\\Scripts\\python.exe"
print(s3)
Python 長字符串由三個雙引號"""
或者三個單引號'''
包圍,語法格式以下:
'''
Python 長字符
'''
"""
Python 長字符
"""
在長字符串中放置單引號或者雙引號不會致使解析錯誤。若是長字符串沒有賦值給任何變量,那麼這個長字符串就不會起到任何做用,和一段普通的文本無異,至關於被註釋掉了。
注意,此時 Python 解釋器並不會忽略長字符串,也會按照語法解析,只是長字符串起不到實際做用而已。當程序中有大段文本內容須要定義成字符串時,優先推薦使用長字符串形式,由於這種形式很是強大,能夠在字符串中放置任何內容,包括單引號和雙引號。
方式1:
以前講到過 print() 函數的用法,這只是最簡單最初級的形式,print() 還有不少高級的玩法,好比格式化輸出,這就是本節要講解的內容。print() 函數使用以%
開頭的轉換說明符對各類類型的數據進行格式化輸出,具體請看下錶。
轉換說明符 | 解釋 |
---|---|
%d、%i | 轉換爲帶符號的十進制整數 |
%o | 轉換爲帶符號的八進制整數 |
%x、%X | 轉換爲帶符號的十六進制整數 |
%e | 轉化爲科學計數法表示的浮點數(e 小寫) |
%E | 轉化爲科學計數法表示的浮點數(E 大寫) |
%f、%F | 轉化爲十進制浮點數 |
%g | 智能選擇使用 %f 或 %e 格式 |
%G | 智能選擇使用 %F 或 %E 格式 |
%c | 格式化字符及其 ASCII 碼 |
%r | 使用 repr() 函數將表達式轉換爲字符串 |
%s | 使用 str() 函數將表達式轉換爲字符串 |
name = "yuan"
age = 23
print("My name is %s; My age is %d"%(name,age))
在 print() 函數中,由引號包圍的是格式化字符串,它至關於一個字符串模板,能夠放置一些轉換說明符(佔位符)。本例的格式化字符串中包含一個%s
和%d
說明符,它最終會被後面的name和age 變量的值所替代。中間的%
是一個分隔符,它前面是格式化字符串,後面是要輸出的表達式。
方式2:
相對基本格式化輸出採用‘%’的方法,format()功能更強大,該函數把字符串當成一個模板,經過傳入的參數進行格式化,而且使用大括號‘{}’做爲特殊字符代替‘%’
(1)不帶編號,即「{}」
(2)帶數字編號,可調換順序,即「{1}」、「{2}」
(3)帶關鍵字,即「{name}」、「{age}」
name = "yuan"
age = 23
print("My name is {}; My age is {}".format(name,age))
print("My name is {1}; My age is {0}".format(name,age))
print("My name is {n}; My age is {a}".format(n=name,a=age))
大小寫處理
函數 | 做用 | 示例 | 輸出 |
---|---|---|---|
capitalize | 首字母大寫,其他小寫 | ‘lk with psr'.capitalize() | ‘Lk with psr' |
upper | 所有大寫 | ‘lk with psr'.upper() | ‘LK WITH PSR' |
lower | 所有小寫 | ‘lk with psr'.lower() | ‘lk with psr' |
swapcase() | 大小寫互換 | ‘Lk with Psr'.swapcase() | ‘lK WITH pSR' |
.title() | 首字母大寫 | ‘lk with psr'.title() | ‘Lk With Psr' |
判斷字符串中的字符類型
函數 | 做用 | 示例 | 輸出 |
---|---|---|---|
startswith(‘a',[start,end]) | 是否以a開頭 | ‘a lk'.startswith(‘a') | True |
endswith(‘a') | 是否以a結尾 | ‘lk'.endswith(‘a') | False |
isalnum() | 是否全爲字母或數字 | ‘123asd'.isalnum() | True |
isalpha() | 是否全字母 | ‘lk12'.isalpha() | True |
isdigit() | 是否全數字 | ‘123'.isdigit() | True |
islower() | 是否全小寫 | ‘lk'.islower() | True |
isupper() | 是否全大寫 | ‘lk'.isupper() | False |
istitle() | 判斷首字母是否爲大寫 | ‘Lk'.istitle() | True |
isspace() | 判斷字符是否爲空格 | ' '.isspace() | True |
字符串替換
函數 | 做用 | 示例 | 輸出 |
---|---|---|---|
replace(‘old',‘new') | 替換old爲new | 'hello world'.replace(‘world',‘python') | hello python |
replace(‘old',‘new',次數) | 替換指定次數的old爲new | 'hello world'.replace(‘l',‘p',2) | heppo world |
去空格
函數 | 做用 | 示例 | 輸出 |
---|---|---|---|
strip() | 去兩邊空格 | ' h e-l lo '.strip() | 能夠想象 |
lstrip() | 去左邊空格 | ' h e-l lo '.lstrip() | 能夠想象 |
rstrip() | 去右邊空格 | ' h e-l lo '.rstrip() | 能夠想象 |
用特定符鏈接單個字符
函數 | 做用 | 示例 | 輸出 |
---|---|---|---|
.join() | -鏈接 | ‘-'.join([‘a', ‘b', ‘c']) | a-b-c |
用字符串中的特定符分割字符串
函數 | 做用 | 示例 | 輸出 |
---|---|---|---|
split() | 默認按空格分隔 | ' h e-l lo ' .split() | [‘h', ‘e-l', ‘lo'] |
split(‘指定字符') | 按指定字符分割字符串爲數組 | ' h e-l lo ' .split('-') | [' h e', 'l lo '] |
搜索
函數 | 做用 | 示例 | 輸出 |
---|---|---|---|
find() | 搜索指定字符串,沒有返回-1 | ‘lk la'.find(‘lk') | 0 |
index() | 同上,可是找不到會報錯 | ‘lk la'.index(‘lk') | 0 |
rfind() | 從右邊開始查找 | ‘lk la'.rfind(‘lk') | 0 |
count() | 統計指定的字符串出現的次數 | ‘lklklk'.count(‘lk') | 3 |
所謂序列,指的是一塊可存放多個值的連續內存空間,這些值按必定順序排列,可經過每一個值所在位置的編號(稱爲索引)訪問它們。
爲了更形象的認識序列,能夠將它看作是一家旅店,那麼店中的每一個房間就如同序列存儲數據的一個個內存空間,每一個房間所特有的房間號就至關於索引值。也就是說,經過房間號(索引)咱們能夠找到這家旅店(序列)中的每一個房間(內存空間)。
序列中,每一個元素都有屬於本身的編號(索引)。從起始元素開始,索引值從 0 開始遞增,如圖 1 所示。
除此以外,Python 還支持索引值是負數,此類索引是從右向左計數,換句話說,從最後一個元素開始計數,從索引值 -1 開始,如圖 2 所示。
切片操做是訪問序列中元素的另外一種方法,它能夠訪問必定範圍內的元素,經過切片操做,能夠生成一個新的序列。序列實現切片操做的語法格式以下:
序列類型對象[start : end : step]
其中,各個參數的含義分別是:
start:表示切片的開始索引位置(包括該位置),此參數也能夠不指定,會默認爲 0,也就是從序列的開頭進行切片;
end:表示切片的結束索引位置(不包括該位置),若是不指定,則默認爲序列的長度;
step:表示在切片過程當中,隔幾個存儲位置(包含當前位置)取一次元素,也就是說,若是 step 的值大於 1,則在進行切片去序列元素時,會「跳躍式」的取元素。若是省略設置 step 的值,則最後一個冒號就能夠省略。
Python 中,支持兩種類型相同的序列使用「+」運算符作相加操做,它會將兩個序列進行鏈接,但不會去除重複的元素。使用數字 n 乘以一個序列會生成新的序列,其內容爲原來序列被重複 n 次的結果
print("welcome"+" to"+" oldboyedu")
print("*"*10)
print("*"*30+"welcome to oldboyedu"+"*"*30)
Python 中,可使用 in 關鍵字檢查某元素是否爲序列的成員。
print("yuan" in "hi,yuan")
在實際開發中,常常須要將一組(不僅一個)數據存儲起來,以便後邊的代碼使用。說到這裏,一些讀者可能據說過數組(Array),它就能夠把多個數據挨個存儲到一塊兒,經過數組下標能夠訪問數組中的每一個元素。
從形式上看,列表會將全部元素都放在一對中括號[ ]
裏面,相鄰元素之間用逗號,
分隔,以下所示:
[element1, element2, element3, ..., elementn]
列表中的元素個數沒有限制,只要是 Python 支持的數據類型就能夠。從內容上看,列表能夠存儲整數、小數、字符串、列表、元組等任何類型的數據,而且同一個列表中元素的類型也能夠不一樣。
列表是 Python 序列的一種,咱們可使用索引(Index)訪問列表中的某個元素(獲得的是一個元素的值),也可使用切片訪問列表中的一組元素(獲得的是一個新的子列表)。
使用索引訪問列表元素的格式爲:
listname[i]
其中,listname
表示列表名字,i 表示索引值。列表的索引能夠是正數,也能夠是負數。
使用切片訪問列表元素的格式爲:
listname[start : end : step]
其中,listname
表示列表名字,start 表示起始索引,end 表示結束索引,step 表示步長。
添加方法: append、extend、insert
<1>append() 方法用於在列表的末尾追加元素,該方法的語法格式以下:
listname.append(obj)
其中,listname
表示要添加元素的列表;obj 表示到添加到列表末尾的數據,它能夠是單個元素,也能夠是列表、元組等。
<2>extend() 和 append() 的不一樣之處在於:extend() 不會把列表或者元祖視爲一個總體,而是把它們包含的元素逐個添加到列表中。
extend() 方法的語法格式以下:
listname.extend(obj)
其中,listname
指的是要添加元素的列表;obj 表示到添加到列表末尾的數據,它能夠是單個元素,也能夠是列表、元組等,但不能是單個的數字。
<3> append() 和 extend() 方法只能在列表末尾插入元素,若是但願在列表中間某個位置插入元素,那麼可使用 insert() 方法。
insert() 的語法格式以下:
listname.insert(index , obj)
其中,index 表示指定位置的索引值。insert() 會將 obj 插入到 listname
列表第 index 個元素的位置。
當插入列表或者元祖時,insert() 也會將它們視爲一個總體,做爲一個元素插入到列表中,這一點和 append() 是同樣的。
在Python列表中刪除元素主要分爲如下 3 種場景:
根據目標元素所在位置的索引進行刪除,可使用 del 關鍵字或者 pop() 方法;
根據元素自己的值進行刪除,可以使用列表(list類型)提供的 remove() 方法;
將列表中全部元素所有刪除,可以使用列表(list類型)提供的 clear() 方法。
<1>del
是 Python 中的關鍵字,專門用來執行刪除操做,它不只能夠刪除整個列表,還能夠刪除列表中的某些元素。咱們已經在《
del
能夠刪除列表中的單個元素,格式爲:
del listname[index]
其中,listname
表示列表名稱,index 表示元素的索引值。
del
也能夠刪除中間一段連續的元素,格式爲:
del listname[start : end]
其中,start 表示起始索引,end 表示結束索引。del
會刪除從索引 start 到 end 之間的元素,不包括 end 位置的元素。
<2> Python pop() 方法用來刪除列表中指定索引處的元素,具體格式以下:
listname.pop(index)
其中,listname
表示列表名稱,index 表示索引值。若是不寫 index 參數,默認會刪除列表中的最後一個元素.
<3>除了del
關鍵字,Python 還提供了 remove() 方法,該方法會根據元素自己的值來進行刪除操做。須要注意的是,remove() 方法只會刪除第一個和指定值相同的元素,並且必須保證該元素是存在的,不然會引起ValueError
錯誤。
Python提供了兩種修改列表(list)元素的方法,你能夠每次修改單個元素,也能夠每次修改一組元素(多個)。修改單個元素很是簡單,直接對元素賦值便可.
修改一組元素,Python 支持經過切片語法給一組元素賦值。在進行這種操做時,若是不指定步長(step 參數),Python 就不要求新賦值的元素個數與原來的元素個數相同;這意味,該操做既能夠爲列表添加元素,也能夠爲列表刪除元素。
Python 列表(list)提供了 index() 和 count() 方法,它們均可以用來查找元素。
元組(tuple)是 Python中另外一個重要的序列結構,和列表相似,元組也是由一系列按特定順序排序的元素組成。
元組和列表(list)的不一樣之處在於:
列表的元素是能夠更改的,包括修改元素值,刪除和插入元素,因此列表是可變序列;
而元組一旦被建立,它的元素就不可更改了,因此元組是不可變序列。元組也能夠看作是不可變的列表,一般狀況下,元組用於保存無需修改的內容。
從形式上看,元組的全部元素都放在一對小括號( )
中,相鄰元素之間用逗號,
分隔,以下所示:
(element1, element2, ... , elementn)
其中 element1~elementn
表示元組中的各個元素,個數沒有限制,只要是 Python 支持的數據類型就能夠。
須要注意的一點是,當建立的元組中只有一個字符串類型的元素時,該元素後面必需要加一個逗號
,
,不然 Python 解釋器會將它視爲字符串。
Python字典(dict
)是一種無序的、可變的序列,它的元素以「鍵值對(key-value)」的形式存儲。相對地,列表(list)和元組(tuple)都是有序的序列,它們的元素在底層是挨着存放的。
字典類型是 Python 中惟一的映射類型。「映射」是數學中的術語,簡單理解,它指的是元素之間相互對應的關係,即經過一個元素,能夠惟一找到另外一個元素。如圖 1 所示。
字典中,習慣將各元素對應的索引稱爲鍵(key),各個鍵對應的元素稱爲值(value),鍵及其關聯的值稱爲「鍵值對」。
字典類型很像學生時代經常使用的新華字典。咱們知道,經過新華字典中的音節表,能夠快速找到想要查找的漢字。其中,字典裏的音節表就至關於字典類型中的鍵,而鍵對應的漢字則至關於值。
主要特徵 | 解釋 |
---|---|
經過鍵而不是經過索引來讀取元素 | 字典類型有時也稱爲關聯數組或者散列表(hash)。它是經過鍵將一系列的值聯繫起來的,這樣就能夠經過鍵從字典中獲取指定項,但不能經過索引來獲取。 |
字典是任意數據類型的無序集合 | 和列表、元組不一樣,一般會將索引值 0 對應的元素稱爲第一個元素,而字典中的元素是無序的。 |
字典是可變的,而且能夠任意嵌套 | 字典能夠在原處增加或者縮短(無需生成一個副本),而且它支持任意深度的嵌套,即字典存儲的值也能夠是列表或其它的字典。 |
字典中的鍵必須惟一 | 字典中,不支持同一個鍵出現屢次,不然只會保留最後一個鍵值對。 |
字典中的鍵必須不可變 | 字典中每一個鍵值對的鍵是不可變的,只能使用數字、字符串或者元組,不能使用列表。 |
使用 { } 建立字典,因爲字典中每一個元素都包含兩部分,分別是鍵(key)和值(value),所以在建立字典時,鍵和值之間使用冒號:
分隔,相鄰元素之間使用逗號,
分隔,全部元素放在大括號{ }
中。
使用{ }
建立字典的語法格式以下:
dictname = {'key':'value1', 'key2':'value2', ..., 'keyn':valuen}
其中
dictname
表示字典變量名,keyn : valuen
表示各個元素的鍵值對。須要注意的是,同一字典中的各個鍵必須惟一,不能重複。
列表和元組是經過下標來訪問元素的,而字典不一樣,它經過鍵來訪問對應的值。由於字典中的元素是無序的,每一個元素的位置都不固定,因此字典也不能像列表和元組那樣,採用切片的方式一次性訪問多個元素。
Python 訪問字典元素的具體格式爲:
dictname[key]
其中,dictname
表示字典變量的名字,key 表示鍵名。注意,鍵必須是存在的,不然會拋出異常。
除了上面這種方式外,Python 更推薦使用 dict
類型提供的 get() 方法來獲取指定鍵對應的值。當指定的鍵不存在時,get() 方法不會拋出異常。
get() 方法的語法格式爲:
dictname.get(key[,default])
其中,dictname
表示字典變量的名字;key 表示指定的鍵;default 用於指定要查詢的鍵不存在時,此方法返回的默認值,若是不手動指定,會返回 None。
因爲字典屬於可變序列,因此咱們能夠任意操做字典中的鍵值對(key-value)。Python 中,常見的字典操做有如下幾種:
向現有字典中添加新的鍵值對。
修改現有字典中的鍵值對。
從現有字典中刪除指定的鍵值對。
判斷現有字典中是否存在指定的鍵值對。
一、Python字典添加鍵值對
爲字典添加新的鍵值對很簡單,直接給不存在的 key 賦值便可,具體語法格式以下:
dictname[key] = value
對各個部分的說明:
dictname
表示字典名稱。
key 表示新的鍵。
value 表示新的值,只要是 Python 支持的數據類型均可以。
二、Python字典修改鍵值對
Python 字典中鍵(key)的名字不能被修改,咱們只能修改值(value)。
字典中各元素的鍵必須是惟一的,所以,若是新添加元素的鍵與已存在元素的鍵相同,那麼鍵所對應的值就會被新的值替換掉,以此達到修改元素值的目的。
三、Python字典刪除鍵值對
若是要刪除字典中的鍵值對,仍是可使用 del
語句。
四、判斷字典中是否存在指定鍵值對
若是要判斷字典中是否存在指定鍵值對,首先應判斷字典中是否有對應的鍵。判斷字典是否包含指定鍵值對的鍵,可使用 in 或 not in 運算符。
運算符 | 說明 | 實例 | 結果 |
---|---|---|---|
+ | 加 | 12.45 + 15 | 27.45 |
- | 減 | 4.56 - 0.26 | 4.3 |
* | 乘 | 5 * 3.6 | 18.0 |
/ | 除法(和數學中的規則同樣) | 7 / 2 | 3.5 |
// | 整除(只保留商的整數部分) | 7 // 2 | 3 |
% | 取餘,即返回除法的餘數 | 7 % 2 | 1 |
** | 冪運算/次方運算,即返回 x 的 y 次方 | 2 ** 4 | 16,即 24 |
運算符 | 說 明 | 用法舉例 | 等價形式 |
---|---|---|---|
= | 最基本的賦值運算 | x = y | x = y |
+= | 加賦值 | x += y | x = x + y |
-= | 減賦值 | x -= y | x = x - y |
*= | 乘賦值 | x *= y | x = x * y |
/= | 除賦值 | x /= y | x = x / y |
%= | 取餘數賦值 | x %= y | x = x % y |
**= | 冪賦值 | x **= y | x = x ** y |
//= | 取整數賦值 | x //= y | x = x // y |
&= | 按位與賦值 | x &= y | x = x & y |
|= | 按位或賦值 | x |= y | x = x | y |
^= | 按位異或賦值 | x ^= y | x = x ^ y |
<<= | 左移賦值 | x <<= y | x = x << y,這裏的 y 指的是左移的位數 |
>>= | 右移賦值 | x >>= y | x = x >> y,這裏的 y 指的是右移的位數 |
比較運算符 | 說明 |
---|---|
> | 大於,若是> 前面的值大於後面的值,則返回 True,不然返回 False。 |
< | 小於,若是< 前面的值小於後面的值,則返回 True,不然返回 False。 |
== | 等於,若是== 兩邊的值相等,則返回 True,不然返回 False。 |
>= | 大於等於(等價於數學中的 ≥),若是>= 前面的值大於或者等於後面的值,則返回 True,不然返回 False。 |
<= | 小於等於(等價於數學中的 ≤),若是<= 前面的值小於或者等於後面的值,則返回 True,不然返回 False。 |
!= | 不等於(等價於數學中的 ≠),若是!= 兩邊的值不相等,則返回 True,不然返回 False。 |
is | 判斷兩個變量所引用的對象是否相同,若是相同則返回 True,不然返回 False。 |
is not | 判斷兩個變量所引用的對象是否不相同,若是不相同則返回 True,不然返回 False。 |
邏輯運算符 | 含義 | 基本格式 | 說明 |
---|---|---|---|
and | 邏輯與運算,等價於數學中的「且」 | a and b | 當 a 和 b 兩個表達式都爲真時,a and b 的結果才爲真,不然爲假。 |
or | 邏輯或運算,等價於數學中的「或」 | a or b | 當 a 和 b 兩個表達式都爲假時,a or b 的結果纔是假,不然爲真。 |
not | 邏輯非運算,等價於數學中的「非」 | not a | 若是 a 爲真,那麼 not a 的結果爲假;若是 a 爲假,那麼 not a 的結果爲真。至關於對 a 取反。 |
和其它編程語言同樣,按照執行流程劃分,Python 程序也可分爲 3 大結構,即順序結構、選擇(分支)結構和循環結構:
Python 順序結構就是讓程序按照從頭至尾的順序依次執行每一條 Python 代碼,不重複執行任何代碼,也不跳過任何代碼。
Python 選擇結構也稱分支結構,就是讓程序「拐彎」,有選擇性的執行代碼;換句話說,能夠跳過沒用的代碼,只執行有用的代碼。
Python 循環結構就是不斷地重複執行同一段代碼。
Python 中的 if else 語句能夠細分爲三種形式,分別是 if
語句、if else
語句和if elif else
語句
if
語句語法格式:
if 表達式:
代碼塊
if-else
語句語法格式:
if 表達式:
代碼塊 1
else:
代碼塊 2
if-elif-else
語句語法格式:
if 表達式 1:
代碼塊 1
elif 表達式 2:
代碼塊 2
elif 表達式 3:
代碼塊 3
...# 其它elif語句
else:
代碼塊 n
對語法格式的說明:
一、「表達式」能夠是一個單一的值或者變量,也能夠是由運算符組成的複雜語句,形式不限,只要它能獲得一個值就行。無論「表達式」的結果是什麼類型,if else 都能判斷它是否成立(真或者假)。
二、「代碼塊」由:與具由相同縮進標識的若干條語句組成。
Python 中,while 循環和 if 條件分支語句相似,即在條件(表達式)爲真的狀況下,會執行相應的代碼塊。不一樣之處在於,只要條件爲真,while 就會一直重複執行那段代碼塊。
while 語句的語法格式以下:
while 條件表達式:
代碼塊
這裏的代碼塊,指的是縮進格式相同的多行代碼,不過在循環結構中,它又稱爲循環體。
while 語句執行的具體流程爲:首先判斷條件表達式的值,其值爲真(True)時,則執行代碼塊中的語句,當執行完畢後,再回過頭來從新判斷條件表達式的值是否爲真,若仍爲真,則繼續從新執行代碼塊...如此循環,直到條件表達式的值爲假(False),才終止循環。
for 循環的語法格式以下:
for 迭代變量 in 字符串|列表|元組|字典|集合:
代碼塊
格式中,迭代變量用於存放從序列類型變量中讀取出來的元素,因此通常不會在循環中對迭代變量手動賦值;代碼塊指的是具備相同縮進格式的多行代碼(和 while 同樣),因爲和循環結構聯用,所以代碼塊又稱爲循環體。
咱們知道,在執行 while 循環或者 for 循環時,只要循環條件知足,程序將會一直執行循環體,不停地轉圈。但在某些場景,咱們可能但願在循環結束前就強制結束循環,Python 提供了 2 種強制離開當前循環體的辦法:
使用 continue 語句,能夠跳過執行本次循環體中剩餘的代碼,轉而執行下一次的循環。
只用 break 語句,能夠徹底終止當前循環。
break 語句能夠當即終止當前循環的執行,跳出當前所在的循環結構。不管是 while 循環仍是 for 循環,只要執行 break 語句,就會直接結束當前正在執行的循環體。和 break 語句相比,continue 語句的做用則沒有那麼強大,它只會終止執行本次循環中剩下的代碼,直接從下一次循環繼續執行。