根據下圖的Python路線進入Python學習之旅。python
學習一門編程語言,首先得學習它的數據類型和語法。基於如今的趨勢,全部的都是基於Python3的學習。
複製代碼
Python 的基本數據類型有如下幾類:git
1. 數字(int)類型:int、float、complex
2. 布爾型(bloo)
3. 字符串(str)
4. 列表(list)
5. 元組(tuple)
6. 字典(dict)
7. 集合(set)
複製代碼
Python3中,不管整數的大小長度爲多少,統稱爲整型int。 【GitHub代碼commits id:b0f0c81】github
power_int = 2 ** 40
print("power_int:", power_int)
print("power_int_type:", type(power_int))
str_int = int('123')
print("str_int_type:", type(str_int))
bit_length_int = 123
print(bit_length_int.bit_length())
複製代碼
對於 bool 類型來講,只存在兩種值 True 和 False,對應的二進制值分別是 1 和 0。True的值太多,但 False 的值能夠窮舉:None, 空([], (), {}, ""), 0。【GitHub代碼commits id:e420fc2】編程
none_value = bool(None)
print("none_value: ", none_value)
blank_1 = bool([])
print("blank_1: ", blank_1)
blank_2 = bool({})
print("blank_2: ", blank_2)
blank_3 = bool("")
print("blank_3: ", blank_3)
blank_4 = bool(())
print("blank_4: ", blank_4)
zero_value = bool(0)
print("zero_value: ", zero_value)
複製代碼
字符串可由單引號或雙引號來建立,字符串是不可修改的,字符串可進行如下操做【GitHub代碼commits id:4abe110】:api
(1)索引
(2)切片
(3)長度
(4)遍歷
(5)刪除
(6)分割
(7)替換
(8)鏈接
(9)大小寫替換
(10)判斷以什麼開頭
(11)判斷字符串的內容
(12)格式話輸出
(13)擴展
複製代碼
# 3.1 索引
#   index() 和 find() 的區別:若索引的字符串或序列不在字符串內,index--->返回的是ValueError:subString not found,而find--->返回 -1。
string1 = "沒有什麼獨特"
index_str = string1.index("沒", 0)
print("index_str: ", index_str)
find_str = string1.find("有", 2)
print("find_str: ", find_str)
# 3.2 切片
string2= "這是一首簡單的歌"
section_str = string2[0: 1]
print("section_str: ", section_str)
# 3.3 長度
string3 = "試着帶入個人心事"
len_str = len(string3)
print("len_str: ", len_str)
# 3.4 遍歷
string4 = "它那麼幼稚"
for ergodic_str in string4:
print("ergodic_str: ", ergodic_str)
for index in range(len(string4)):
print("ergodic_str2: ", string4[index])
# 3.5 刪除
string5 = "像個頑皮的孩子"
del string5
# print("del_str: ", string5)
# 3.6 分割
# partition制定分隔符;split指定分隔符分割幾回
string6 = "多麼-好笑的-心事 TEST METHOD YOU LOSE"
partition_str = string6.partition("-")
print("partition_str: ", partition_str)
split_str = string6.split(" ", 2)
print("split_str: ", split_str)
# 3.7 替換
# 與替換相關的方法:replace、strip、lstrip、rstrip
string7 = " 頑皮的像個孩子的大人 "
replace_str = string7.replace('的', "XX", 2)
print("replace_str: ", replace_str)
strip_str = string7.strip()
print("strip_str去掉兩邊的空格:", strip_str)
lstrip_str = string7.lstrip()
print("lstrip_str去掉左邊的空格:", lstrip_str)
rstrip_str = string7.rsplit()
print("rstrip_str去掉右邊的空格:", rstrip_str)
# 3.8 鏈接
string8 = "MOREANDMORE"
join_str = '*'.join(string8)
print("join_str: ", join_str)
list8 = ['xi', 'as', 'peo']
join_list = "->".join(list8)
print("join_list: ", join_list)
# 3.9 大小寫轉換
# 第一個單詞首字母大寫:capitalize;所有字母小寫:lower;所有字母大寫:upper;單詞首字母大寫:title;大寫轉小寫,小寫轉大寫:swapcase
string9 = "start is More and More"
capitalize_str = string9.capitalize()
print("capitalize_str: ", capitalize_str)
lower_str = string9.lower()
print("lower_str: ", lower_str)
upper_str = string9.upper()
print("upper_str: ", upper_str)
tittle_str = string9.title()
print("tittle_str: ", tittle_str)
swapcase_str = string9.swapcase()
print("swapcase_str: ", swapcase_str)
# 3.10 判斷字符串的內容
# isalnum字符串是數字或字母的組合;isalpha字符串所有是字母;isdigit字符串數字的組合
string11 = "Howare1213"
isalnum_str = string11.isalnum()
print("isalnum字符串是數字或字母的組合: ", isalnum_str)
isalpha_str = string11.isalpha()
print("isalpha字符串所有是字母:", isalpha_str)
isdigit_str = string11.isdigit()
print("isdigit字符串數字的組合:", isdigit_str)
# 3.11 判斷以什麼開頭
string10 = "How are 你?"
startswith_str = string10.startswith("How")
print("startswith_str: ", startswith_str)
endswith_str = string10.endswith("?")
print("endswith_str: ", endswith_str)
# 3.12 格式化輸出
string12 = "My name is {name}, I'am {age} years old."
print(string12.format(name="XIAO MI", age=9))
print(string12.format_map({"name": "MI", "age": 90}))
name = input("please input your name: ")
age = int(input("please input your age: "))
sex = bool(int(input("please input your sex: ")))
job = input("please input your job: ")
salary = input("please input your salary: ")
if sex == True:
sex = 'male'
else:
sex = 'fmale'
if salary.isdigit():
salary = int(salary)
else:
exit("salary must be int.")
print(name, age, sex, job, salary)
# 格式化輸出字符串
personal_info = ''' -------------Personal information of %s--------- .........NAME: %s .........AGE: %d .........SEX: %s .........JOB: %s .........SALARY: %f .........WORK STILL: %d YEARS --------------This is the end------------- ''' % (name, name, age, sex, job, salary, (65-age))
print(personal_info)
# 3.13 擴展
string13 = "name\tage\tsex\nA\t22\tmale\nB\t23\tfmale"
expandtabs_str = string13.expandtabs()
print("expandtabs_str: \n", expandtabs_str)
複製代碼
列表是由一系列特定元素順序排列的元素組成的,它的元素能夠是由任何數據類型即數字、字符串、列表、元組、字典、布爾值等,同時其元素是能夠修改的。【GitHub代碼commits id:9a6357b】數據結構
(1)索引、切片
(2)追加
(3)拓展
(4)插入
(5)取出
(6)刪除
(7)排序
複製代碼
# (1)索引、切片
list41 = [123, 'string', [1, 2, 3], (1, 2), {"APP": "1"}, True]
index_list = list41[2]
print("index_list: ", index_list)
section_list = list41[0: 3]
print("section_list: ", section_list)
# (2)追加【append】----- 將元素總體添加
list42 = [123, 'string', [1, 2, 3], (1, 2)]
list42.append([1, 2])
print("append_list: ", list42)
# (3)拓展【extend】----- 將元素分解添加
list43 = [123, 'string', [1, 2, 3], (1, 3)]
list43.extend([1, 3])
print("append_list: ", list43)
# (4)插入【insert】
list44 = [1, 2, "ok", [20, 9]]
list44.insert(3, "R")
print("insert_list: ", list44)
# (5)取出【pop】
list45 = [23, "OOO", "pop"]
list45.pop()
print("pop_list: ", list45)
# (6)刪除【remove、del】
list461 = ["1", 2, "ok", [20, 9]]
list462 = ["1", 2, "ok", [20, 9]]
list461.remove("1")
print("remove_list: ", list461)
del list462[0]
print("del_list: ", list462)
# (7)排序【sorted】
list47 = [11,55,88,66,35,42]
print("sorted_list: ", sorted(list47))
print("sorted_reverse_list: ", sorted(list47, reverse=True))
複製代碼
元組即爲不可修改的列表,用圓括號標識,特性和list類似。【GitHub代碼commits id:aa1a46a】app
tuple51 = (1, 2, [22, 3])
print("切片:", tuple51[0])
複製代碼
字典爲一系列的鍵-值對,每一個鍵值經過逗號分割,每一個鍵對應一個值,能夠經過鍵來訪問值。無序訪問。 鍵的要求:必須是不可變的。能夠是數字、字符串、元組、布爾值。編程語言
dict61 = {
('ok', ): 1,
"abc": "中文",
True: ['abc']
}
print("dict61: ", dict61)
# 遍歷字典----鍵
for key in dict61:
print(key)
print(dict61.keys())
# 遍歷字典----鍵值對
print(dict61.items())
# 遍歷字典----值
print(dict61.values())
複製代碼
集合是一個無序不重複元素的集。set集合類須要的參數必須是迭代類型的,如:序列、字典等,而後轉換爲無序不重複的元素集。因爲集合是不重複的,因此能夠對字符串、列表、元組進行去重。post
集合的特性:
(1)去重
(2)無序
(3)每一個元素必須爲不可變類型(hashable類型,可做爲字典的key)
複製代碼
set711 = {"ABC", 'abc', "test", "test", (12, 3), True}
set712 = set({"ABC", 'abc', "test", "test", (12, 3), True})
set713 = frozenset({"ABC", 'abc', "test", "test", (12, 3), True, "這是一個不可變的集合"})
# (2)增【add、update】
set721 = {'A', 'B', 'C'}
set721.add('D')
print("set_add: ", set721)
set722 = {'A', 'B', 'C'}
set722.update("ERT")
print("update_set: ", set722)
#(3)刪除【pop、remove、discard】
set731 = {'A', 'B', 'C'}
set731.pop()
print("pop_set: ", set731)
set732 = {'A', 'B', 'C', 'D'}
set732.remove('C')
print('remove_set: ', set732)
set733 = {'A', 'B', 'C', 'DF'}
set733.discard('E') # 若是未找到該元素,則無視
print("discard_set: ", set733)
#(4)關係運算【交集&、並集|、差集-、交叉補集^、issubset、isupperset】
set741 = {'a', 'b', 'c', 'd', 1}
set742 = {'A', 'D', 'e', 'F', 1}
print("交集&", set741 & set742)
print("並集|", set741 | set742)
print("差集-", set741 - set742)
print("交叉補集^", set741 ^ set742)
print("issubset前是不是後的子集:", set741.issubset(set742))
print("isupperset前是不是後的父集:", set741.issuperset(set742))
複製代碼
棧是一種後進先出(FILO)的數據結構,能夠操做列表來實現棧的數據結構特性。刪除的元素至關因而刪掉了棧尾的元素。【GitHub代碼commits id:426eb81】學習
class Stack():
def __init__(self, size):
self.stack131 = []
self.top = -1
self.size = size
def isfull(self):
return self.top + 1 == self.size
def isempty(self):
return self.top == '-1'
# 入棧前先檢查棧是否已滿
def push_stack(self, x):
if self.isfull():
raise Exception("statck is full")
else:
self.stack131.append(x)
self.top = self.top + 1
# 出棧以前檢查棧是否爲空
def pop_statck(self):
if self.isempty():
raise Exception("stack is empty")
else:
self.top = self.top - 1
self.stack131.pop()
def show_stack(self):
print(self.stack131)
if __name__ == "__main__":
s = Stack(10)
s.show_stack()
for i in range(6):
s.push_stack(i)
s.show_stack()
for i in range(3):
s.pop_statck()
s.show_stack()
print("stack FILO is end.......")
複製代碼
隊列是一種後進先出(FIFO)的數據結構,能夠操做列表來實現棧的數據結構特性。新增的元素是添加的隊列結尾的元素,出隊列的元素至關因而刪掉了對列前面的元素。【GitHub代碼commits id:6367333】
class Queue():
def __init__(self, size):
self.queue132 = []
self.front = -1
self.rear = -1
self.size = size
def isfull(self):
return self.rear - self.front + 1 == self.size
def isempty(self):
return self.front == self.rear
# 入隊列
def enqueue(self, x):
if self.isfull():
raise Exception("queue is full")
else:
self.queue132.append(x)
self.rear = self.rear + 1
# 出隊列
def dequeue(self):
if self.isempty():
raise Exception("queue is empty")
else:
self.queue132.pop(0)
self.front = self.front + 1
def show_queue(self):
print(self.queue132)
if __name__ == "__main__":
s = Stack(10)
s.show_stack()
for i in range(6):
s.push_stack(i)
s.show_stack()
for i in range(3):
s.pop_statck()
s.show_stack()
print("stack FILO is end.......")
q = Queue(7)
q.show_queue()
for i in range(6):
q.enqueue(i)
q.show_queue()
for i in range(3):
q.dequeue()
q.show_queue()
複製代碼
序結構就是按照你寫的代碼順序執行,也就是一條一條語句順序執行。
分支結構又稱爲選擇結構,是程序代碼根據判斷條件選擇執行特定的代碼。
若是條件爲真,程序執行一部分代碼;不然執行另外一部分代碼
基本語法:
一、if
二、if...else
三、if...elif...else
四、if...elif...elif......else
五、if 嵌套
複製代碼
# 1.if
a = 1
if a == 1:
print("你的輸出正確")
# 2.if...else...
a = 1
if a == 1:
print("a的值爲1")
else:
print("a的值不爲1")
# 3.if...elif...else...
a = 1
if a > 1:
print("a的值大於1")
elif a == 1:
print("a的值等於1")
else:
print("a的值小於1")
# 4.if...elif...elif......else
a = 1
if a == 1:
print("a的值爲1")
elif a == 2:
print("a的值爲2")
elif a == 3:
print("a的值爲3")
else:
print("a的值爲不知道是什麼")
# 5.if 嵌套
a = 1
b = 2
if a == 1:
if b == 2:
print("b的值爲1")
else:
print("b的值不知道是什麼")
else:
print("a的值迷失了~")
複製代碼
循環結構是指知足必定的條件下,重複執行某段代碼的一種編碼結構。
Python的循環結構中,常見的循環結構是for循環和while循環。
for 循環常常用與遍歷字符串、列表、字典等數據結構,for循環須要知道循環次數。
複製代碼
# 1. for...in...
list1 = [1, 2, 3, 4, 5, 2, 4, 7, 9, 0]
count = 0
for i in list1:
if i == 2:
count += 1
print("count: ", count)
# 2.嵌套for循環
# 乘法表
result = 0
for i in range(1, 10):
for j in range(1, i + 1):
print(str(j) + '*' + str(i) + '=' + str(i*j) + '', end=' ')
print(' ')
# 3.while循環
num = 1
while num <= 5:
print("num:", num)
num += 1
複製代碼
讀寫文件是最多見的IO操做,現代操做系統不容許普通程序直接操做磁盤,讀寫文件就是請求操做系統打開一個文件操做對象,經過操做系統提供的接口進行對文件的讀寫操做。
讀取文件的三個必要步驟:
(1)以讀文件的模式 read 打開一個文件對象;
(2)read() 方法讀取文件中的內容;
(3)文件讀取操做完後,要進行文件的關閉。由於文件對象會佔用操做系統資源。
複製代碼
# codecs模塊:主要用來解決文件亂碼的問題
import codecs
f_read = codecs.open('read_file.txt', 'rb', encoding="utf-8")
print("f_read: ", f_read.read())
f_read.close()
複製代碼
f_write = codecs.open('write_file.txt', 'wb', encoding='utf-8')
f_write.write("********************\n")
f_write.write("<鵝>\n")
f_write.write("曲項向天歌\n")
f_write.write("白毛浮綠水\n")
f_write.close()
複製代碼
# 3.1 readlines():用於讀取全部行(直到結束符 EOF)並返回列表,該列表能夠由 Python 的 for... in ... 結構進行處理。
f_readlines = codecs.open('write_file.txt', 'rb', encoding='utf-8')
text_list = f_readlines.readlines()
print('text_list_type: ', type(text_list))
print("text_list: ", text_list)
print(text_list[2])
f_readlines.close()
# 3.2 readline():用於從文件讀取整行,包括 "\n" 字符。若是指定了一個非負數的參數,則返回指定大小的字節數,包括 "\n" 字符。
# __next__():返回迭代器的下一個指向
f_readline = codecs.open('read_file.txt', 'rb', encoding='utf-8')
readline_list = f_readline.readline()
print('readline_list_type: ', type(readline_list))
print("readline_list: ", readline_list)
print(f_readline.__next__())
print(f_readline.__next__())
f_readline.close()
# 3.3 writelines():用於向文件中寫入一序列的字符串。
f_writelines = codecs.open("writelines_file.txt", 'wb', encoding='utf-8')
write_list = f_writelines.write("1213311\nnewbanlance\n\n")
writelines_list = f_writelines.writelines(["11111111\n", '2222222\n', '333333333\n'])
f_writelines.close()
# 3.4 tell():返回文件的當前位置,即文件指針當前位置。
f_tell = codecs.open('tell_file.txt', 'wb', encoding='utf-8')
f_tell.write("1213311\nnewbanlance\n\n")
print(f_tell.tell())
f_tell.writelines(["11111111\n", '2222222\n', '333333333\n'])
print(f_tell.tell())
f_tell.close()
# 3.5 seek():用於移動文件讀取指針到指定位置
f_seek = codecs.open('seek_file.txt', 'wb', encoding='utf-8')
f_seek.write("abcdefgh\n12131313\n\djkfdjskfjkd\n")
print(f_seek.tell())
f_seek.seek(0)
f_seek.writelines(["11111111\n", '2222222\n', '333333333\n'])
f_seek.close()
# 3.6 name(): 讀取文件名
f_name = codecs.open('name_file.txt', 'wb', encoding='utf-8')
print("f_name: ", f_name.name)
print("f_name_closed", f_name.closed)
# 3.7 flush(): 刷新緩衝區的,即將緩衝區中的數據馬上寫入文件,同時清空緩衝區,不須要是被動的等待輸出緩衝區寫入。通常狀況下,文件關閉後會自動刷新緩衝區,
# 但有時你須要在關閉前刷新它,這時就可使用 flush() 方法。
複製代碼
文件操做中常常會忘記文件的關閉操做,使用with操做會避免這一狀況的發生。 【GitHub代碼commits id:ecf390d】
with codecs.open('with_file.txt', 'wb', encoding='utf-8') as f_with:
f_with.write("test with.")
print("f_with_closed: ", f_with.closed)
print("f_with_closed: ", f_with.closed)
複製代碼