python基礎函式
阿新 • • 發佈:2020-07-20
目錄
Python參考學習部落格
參考部落格
https://www.cnblogs.com/Dominic-Ji/
https://www.cnblogs.com/xiaoyuanqujing/
計算機硬體
# 五大組成部分 1.控制器 類似於人的大腦用來控制計算機硬體 2.運算器 數學運算、邏輯運算 控制器 + 運算器 = CPU 3.儲存器 記憶體 基於電工作、速度非常快 斷電資料丟失 外存 硬碟、磁帶、磁碟 能夠永久儲存資料 4.輸入裝置 滑鼠、鍵盤。。。 5.輸出裝置 螢幕、顯示器、印表機。。。 # 三大核心硬體 1.CPU 2.記憶體 3.硬體 """ 你下載的軟體最開始是存放於硬碟的 如果要想執行的話必須先由硬碟載入到記憶體 然後CPU去記憶體中取指執行 """ # 作業系統 windows、linux、ubuntu """ 計算機本身不會自動做任何事 如果想要讓計算機工作必須要控制計算機各個硬體的運作 但是控制計算機硬體太麻煩了,所以就有了作業系統 作業系統就是用來幫助我們控制計算機硬體的 我們以後寫程式碼只需要跟作業系統打交道即可 """ # 計算機三層架構 1.應用程式 2.作業系統 3.計算機硬體
程式語言與程式設計
"""
程式語言
語言
漢語、英語、日語。。。
人與人之間溝通交流的媒介
程式語言
人與計算機之間溝通交流的媒介
學習程式語言其實就是在學習一門外語
學python就類似於學一門火星語
學會了就能夠跟火星人溝通
程式設計
人將自己的思維邏輯和想法用計算機能夠聽懂的語言表達出來的過程
"""
python直譯器
# 在IT行業千萬不要輕易的嘗試新版本的軟體 python直譯器版本 2.X 最高的只有2.7 2020年之後不再維護更新 所以不要用2.X版本 3.X 習慣用3.6版本 # 去官網下載 點選安裝的時候,最後一步記得勾選 add to path新增到環境變數如果沒勾問題也不大
python IDE開發工具
1.vscode 2.pycharm 在下載pycharm的時候需要選擇下載專業版 不要下載社群版 pycharm是收費的每年也就幾百刀 任何收費的到了咋這裡都可以破解 1.淘寶買一個啟用碼 2.百度搜索啟用碼 3.將我分享給你的壓縮包解壓 然後先點選pycharm試用 將檔案裡面的一個jar程式的檔案拖入pycharm即可 然後點選安裝重啟即可 4.分享一個實時獲取啟用碼的網站 http://idea.medeming.com/jets/ 下載拷貝選擇active code貼上即可
註釋
註釋是程式碼之母
python的註釋有兩種
1.單行註釋
# 單行註釋
2.多行註釋
'''
多行註釋1
多行註釋2
多行註釋3
'''
"""
多行註釋1
多行註釋2
多行註釋3
"""
變數
變數即變化的量
程式的執行其實就是一些列資料的變化
本質就是一系列變數的變化過程
變數的定義
username = 'jason'
age = 18
"""
變數名 賦值符號 變數的值
在記憶體中申請一塊記憶體空間將jason儲存進去
之後給jason繫結一個變數名username
後期如果你想要訪問記憶體裡面的jason那麼只需要通過username即可
"""
# 要想訪問到記憶體裡面的資料就必須藉助於變數名
變數的命名規範
1.數字、字母、下劃線三者組合
2.數字不能開頭
3.一定要做到見名知意
4.不能用關鍵字
變數的命名風格
1.下劃線 python推薦
user_name = 'jason'
2.大駝峰 js推薦
UserName = 'jason'
3.小駝峰
userName = 'jason'
常量
在python中沒有真正意義上的常量
在python中我們是墨守成規的將全大寫的變數名看成是常量
HOST = '127.0.0.1'
PORT = 22
在js中有真正意義上的常量
const pi = 3.1415926242342342
undefined
pi
3.1415926242342342
pi = 666
VM204:1 Uncaught TypeError: Assignment to constant variable.
at <anonymous>:1:4
資料型別
- 整型
- 浮點型
- 字串
- 列表
- 字典
- 布林值
- 元組
- 集合
"""
不同的資料應該有對應不同的資料型別來儲存和處理
.txt
.pdf
.mp4
...
"""
ps:如何檢視資料型別
type(變數名/資料)
整型int
就是整數
作用:年齡、出生年份
age = 18
year = 2020
浮點型float
就是小數
作用:身高、體重
height = 183.1
weight = 75.1
字串型別str
# 單引號雙引號沒有區別,三引號能輸入多行文字,但三引號左側沒有等號,則為註釋
帶有描述性性質的資訊
作用:姓名、地址、個人簡介
username = 'jason' # 單引號
addr = "安徽蕪湖" # 雙引號
info1 = '''你好壞哦 我好喜歡'''
info2 = """去你妹的""" # 三引號
# 常見方法
# 1 索引取值
info = 'jason'
# print(info[0]) # j 索引都是從0開始的
# 2 切片操作
# print(info[0:3]) # jas 顧頭不顧尾,0表示第一個,3不會顯示
# 3 步長
# print(info[0:5:2]) # jsn 隔一個取一個
# 4 切割
# res = 'frank|123|DBJ'
# res1 = res.split('|')
# print(res1) # ['frank', '123', 'DBJ']
# 5 替換
res = 'frank is NB and age is 18 frank frank frank heiheihei'
# res1 = res.replace('frank','jason')
# print(res1) # jason is NB and age is 18 jason jason jason heiheihei
res1 = res.replace('frank','jason',2)
print(res1) # jason is NB and age is 18 jason frank frank heiheihei
列表型別list
names = 'jason,egon,frank,haoda'
"""
能夠儲存多個數據,資料與資料之間逗號隔開
資料可以是任意資料型別
"""
name_list = ['jason','frank',12,11.11]
# 1 索引取值
# print(name_list[0])
# print(name_list[0:3])
# print(name_list[0:3:2])
# 2 尾部追加值
# name_list.append('egon')
# print(name_list) # ['jason', 'frank', 12, 11.11, 'egon']
# 3 指定位置插入
# name_list.insert(0,'xxoo')
# print(name_list) # ['xxoo', 'jason', 'frank', 12, 11.11]
# 4 擴充套件列表
name_list.extend(['tony','tom','jerry','kevin'])
print(name_list) # ['jason', 'frank', 12, 11.11, 'tony', 'tom', 'jerry', 'kevin']
字典型別dict
info_dict = {
'username':'jason',
'password':123,
'hobby':['study','read','run']
}
"""
字典在構造資料的時候是按照key:value的形式
key
一般情況下是對value的描述性資訊(字典的key一般情況下都是字串型別)
value
真正的資料(字典的value可以是python任意資料型別)
"""
# 1 字典內部的k:v是無序的 也就意味著沒法使用索引取值但是卻可以按照key取值
# print(info_dict['username']) # jason 我們不推薦使用該方法取值
# print(info_dict['gender']) # 字典的key不存在的情況下會直接報錯
# res = info_dict.get('username')
# print(res) # jason
# res1 = info_dict.get('gender')
# print(res1) # None
# 擴充套件
# res1 = info_dict.get('gender','你要找的這個鍵不存在')
# print(res1) # 你要找的這個鍵不存在
# res2 = info_dict.get('username','你要找的這個鍵不存在')
# print(res2) # jason
# 2 新增鍵值對
# info_dict['gender'] = 'male' # 不存在則新增
# print(info_dict) # {'username': 'jason', 'password': 123, 'hobby': ['study', 'read', 'run'], 'gender': 'male'}
# info_dict['username'] = 'frank' # 存在則修改
# print(info_dict)
print(info_dict.items()) # 直接獲取字典裡面所有的鍵值對 組織稱列表的形式
print(info_dict.keys()) # 直接獲取字典裡面所有的key
print(info_dict.values()) #直接獲取字典裡面所有的value
"""
dict_items([('username', 'jason'), ('password', 123), ('hobby', ['study', 'read', 'run'])])
dict_keys(['username', 'password', 'hobby'])
dict_values(['jason', 123, ['study', 'read', 'run']])
"""
布林值bool
作用:用來判斷事物對錯
True
False
多用於邏輯判斷中 流程控制
# 布林值預設為False的有哪些
0、None、''、[]、{}
元組tuple
就把它看成是一個不可變的列表即可
元組也可以存放多個數據、資料與資料之間逗號隔開
區別在於列表裡面的元素可以修改但是元組裡面的不可以
t = (111,222,333)
t = (111,222,333,222,222,222,222,222,222)
l = [111,222,333]
# l[0] = 666
# print(l)
# 1 索引取值
# print(t[0])
# print(t[0:3])
# print(t[0:3:2])
# 不可修改
# t[0] = 666 # 直接報錯
# 統計元素出現的個數
# res = t.count(222)
# print(res) # 7
# 獲取元素對應的索引值
print(t.index(222)) # 1
集合型別set
"""
1.去重
2.關係運算
共同好友...
"""
s1 = {1,2,3,4,5} # 集合內不可能出現相同的元素
# s = {1,2,3,4}
# print(type(s))
# s = {1,2,3,4,3,3,3,3,3,3,3,3}
# print(s)
f1 = {'jason','egon','tony','jerry'} # 使用者1的所有好友姓名
f2 = {'jason','frank','oscar','tony'} # 使用者2的所有好友姓名
# 1 求兩個使用者的共同好友
# res = f1 & f2 # 交集
# print(res) # {'jason', 'tony'}
# 2 求使用者1的獨有好友
# res = f1 - f2
# print(res) # {'egon', 'jerry'}
# 3 求使用者2的獨有好友
# res = f2 - f1
# print(res) # {'frank', 'oscar'}
# 4 求兩個使用者各自獨有的好友
# res = f1 ^ f2
# print(res) # {'oscar', 'jerry', 'frank', 'egon'}
# 5 父集 子集
print(f1 > f2)
與使用者互動
1.輸入
input
username = input('請輸入你的使用者名稱>>>:')
print(username,type(username)) # input獲取到的使用者輸入都是字串型別
2.輸出
print
格式化輸出
"""
親愛的XXX你好
您的話費是XXX
餘額是XXX
"""
%s佔位符
res = '親愛的%s,你的話費是%s,餘額是%s'
print(res%('jason',50,100000000000000))
運算子
-
數學運算
+ - * /
-
邏輯運算
與 and 或 or 非 not """ 三者結合使用的情況下會有優先順序的問題 但是我們在寫程式的時候應該人為的區分優先順序 就是用括號提前劃分出優先順序 """
-
增量賦值
x = 1 x = x + 1 # x += 1 x = x - 1 # x -= 1 x = x * 1 # x *= 1 x = x /1 # x /= 1
-
解壓賦值
name_list = ['jason','egon','frank','haoda'] # jason_name = name_list[0] # egon_name = name_list[1] # frank_name = name_list[2] # haoda_name = name_list[3] # a,b,c,d = name_list # 解壓賦值 # print(a,b,c,d) # a,b,c = name_list # 少一個不行 # print(a,b,c) # a,b,c,d,e = name_list # 多一個不行 # print(a,b,c) # a,*_,b = name_list # *號會將多餘的元素組織稱列表交給後面的變數名 # print(a,b,_) # jason haoda ['egon', 'frank'] a,b,*_ = name_list print(a,b,_) # jason egon ['frank', 'haoda']
流程控制
"""
流程控制主要分為三類
1.順序結構
從上往下的順序依次執行即可
2.分支結構
根據條件作出不同的響應
3.迴圈結構
重複的做/執行事情/一段程式碼
"""
# 分支結構
# 1.女孩子的年齡 如果小於35叫小姐姐
# age = 40
# if age < 35:
# print('小姐姐加個微信')
# a = 1
# b = 2
"""
在python中是利用程式碼的縮排來表示程式碼的從屬關係
縮排量一般推薦四個空格
多行子程式碼屬於一個關鍵字的時候 那麼它們必須保持相同的縮排量
"""
# 2.女孩子的年齡 如果小於35叫小姐姐 否則叫不好意思認錯人了
# age = 28
# if age < 35:
# print('小姐姐加個微信')
# else:
# print('認錯人了 趕緊跑')
# 成績評判
"""
大於90 優秀
大於80 良好
大於70 一般
大於60 及格
其他 掛科
"""
score = input('score>>>:')
# 將字串的數字轉為整型的數字
score = int(score)
if score > 90:
print('優秀')
elif score > 80:
print('良好')
elif score > 70:
print('一般')
elif score > 60:
print('及格')
else:
print('掛科 交錢重修')
"""
if elif else 三者只會走一個
"""
# 登入功能
username = input('username>>>')
password = input('password>>>')
if username == 'jason' and password == '123':
print('來賓三位')
else:
print('沒錢滾蛋')
# 迴圈結構
"""
while 條件:
程式碼塊1
程式碼塊2
程式碼塊3
1.需要先判斷條件是否成立 如果成立則依次執行程式碼塊1、2、3
2.程式碼塊執行完畢之後 會再次回到while的開頭再次判斷條件是否成立
如果成立繼續執行程式碼1、2、3
3.一旦條件不成立之後 就會結束迴圈體的執行
"""
while True:
username = input('username>>>')
password = input('password>>>') # 好看的前端介面
if username == 'jason' and password == '123': # 連線資料庫查詢
print('登入成功')
while True:
cmd = input('please input your command>>>:')
print('正在執行您的命令%s'%cmd)
else:
print('使用者名稱或密碼錯誤')
# while + break
"""直接結束本層迴圈"""
while True:
username = input('username>>>')
password = input('password>>>') # 好看的前端介面
if username == 'jason' and password == '123': # 連線資料庫查詢
print('登入成功')
while True:
cmd = input('please input your command>>>:')
if cmd == 'quit':
# 結束當前迴圈體
break # 只能結束上方離它最近的那個while迴圈
print('正在執行您的命令%s'%cmd)
break
else:
print('使用者名稱或密碼錯誤')
# while + continue
"""結束本次迴圈 直接開始下一次"""
l = [11,22,33,44,55,66,77,88,99,100]
# 統計元素個數
# print(len(l)) # 10 列表包含10個元素
count = 0
while count < len(l):
if l[count] == 66:
# 先將count加1
count += 1
# 結束本次迴圈 直接開始下一次迴圈
continue
print(l[count])
count += 1
# while + else
count = 0
while count < 10:
print(count)
if count == 6:
break
count += 1
else: # 當while迴圈沒有被break主動打斷的情況下 正常的結束了才會走else
print('while迴圈壽正終寢了')
# for迴圈
"""
for迴圈能夠做的事情while迴圈都能做
但是for迴圈的語法更加的簡單
"""
for i in range(1,11): # [1,2,3,4,5,6,7,8,9,10] 顧頭不顧尾
print(i)
"""
for迴圈不需要你給出結束的條件
它的內部一旦將取的值全部取完 會自己結束
"""
# s = 'jason 666 '
# for i in s: # 將字串裡面的一個個的字元取出賦值給for後面的變數名i
# print(i)
# l = [111,222,333,444]
# for i in l:
# print(i)
d = {'username':'jason','password':123,'hobby':[111,222,333]}
for i in d:
print(i)
"""
字典預設暴露給外界的只有key for迴圈也只能獲取到key 答案B
A
'username':'jason'
B
'username'
C
'jason'
D
報錯 不支援
"""
ps:
for+break
for+continue
for+else
規律跟while一直
檔案處理
# 什麼是檔案
"""
其實檔案是作業系統暴露給我們操作計算機硬碟的快捷方式
"""
# 檔案操作
# file_obj = open('a.txt',mode='r',encoding='utf-8')
# res = file_obj.read() # 讀取檔案內容
# print(res)
# file_obj.close()
# with上下文管理
with open('a.txt',mode='r',encoding='utf-8') as file_obj:
print(file_obj.read())
開啟檔案的三種模式
mode引數
r
只讀
w
只寫
a
追加寫
# r
# 檔案不存在直接報錯
# with open('b.txt',mode='r',encoding='utf-8') as file_obj:
# print(file_obj.read())
# with open('a.txt',mode='r',encoding='utf-8') as file_obj:
# print(file_obj.read()) # 只能讀不能寫
# w
# 檔案不存在自動建立
# with open('b.txt',mode='w',encoding='utf-8') as file_obj:
# pass
"""w模式會先清空當前檔案 之後再寫入"""
# with open('a.txt',mode='w',encoding='utf-8') as file_obj:
# file_obj.write('是不是有點懵逼?\n')
# file_obj.write('是不是有點懵逼?\n')
# file_obj.write('是不是有點懵逼?')
# a
# 檔案不存在自動建立
# with open('c.txt',mode='a',encoding='utf-8') as file_obj:
# pass
# 檔案存在不會清空檔案內容
with open('a.txt',mode='a',encoding='utf-8') as file_obj:
file_obj.write('\n趕緊下課吧 堅持不住了\n')
file_obj.write('趕緊下課吧 堅持不住了\n')
file_obj.write('趕緊下課吧 堅持不住了\n')
檔案的操作模式
mode
rt text文字
wt
at
t不寫預設就是文字模式
t
t不寫預設就是文字模式
b
以二進位制模式開啟檔案
用b就可以開啟所有的檔案
"""
計算機基於電工作的,電訊號只有高低電平
所以計算機只識別二進位制數 010101010101
"""
# with open('a.txt','rb') as f:
# data = f.read()
# print(data.decode('utf-8')) # 解碼
"""
在python中有一個bytes型別,你直接把它看成是二進位制資料即可
"""
# with open('b.txt','wb') as f:
# f.write('真架不住了'.encode('utf-8')) # 編碼
'''
編碼 encode
將人類能夠識別的字元按照指定的編碼 編碼成二進位制資料
解碼 decode
將二進位制資料按照指定的編碼 解碼成人類能夠讀懂的字元
'''
with open('b.txt','ab') as f:
# f.write('真架不住了'.encode('utf-8')) # 編碼
# f.write('hello world'.encode('utf-8')) # 編碼
f.write(b'hello world 666') # 編碼
利用b拷貝圖片
# 1 先獲取拷貝源
# 2 建立一個新檔案將檔案內容寫入(r並不是讀的意思,而是怕圖片名字有特殊字元,所以這裡可以當做轉義)
with open(r'111.jpg','rb') as f:
data = f.read()
with open(r'222.jpg','wb') as f:
f.write(data)
控制檔案內游標的移動
f.seek(offset,whence)
whence
0
相對於檔案開頭
1
相對於當前位置
2
相對於檔案末尾
# 1、2只能在b模式下使用
offset
偏移量
是以位元組為單位(bytes)的
1bytes = 8bitbit
1024bytes = 1KB
1024KB = 1MB
...
utf-8預設用3bytes表示一箇中文
用1bytes表示一個英文/數字
with open(r'a.txt','r',encoding='utf-8') as f:
print(f.read())
f.seek(4,0)
print(f.read())
檔案修改
1.覆蓋寫
2.先建立一個新的臨時檔案 將修改的檔案內容寫入
之後將原始檔刪除 將新檔案重新命名為原始檔
with open(r'a.txt','r',encoding='utf-8') as f:
data = f.read()
# 字串的替換
data = data.replace('frank','haoda')
with open(r'a.txt','w',encoding='utf-8') as f:
f.write(data)
# 需要掌握
with open(r'a.txt','r',encoding='utf-8') as f:
for line in f: # 一行一行的讀取檔案內容
print(line)
import os
with open(r'a.txt','r',encoding='utf-8') as f1,open(r'a.backend.txt','w',encoding='utf-8') as f2:
for line in f1:
f2.write(line.replace('haoda','frank'))
os.remove(r'a.txt')
os.rename(r'a.backend.txt',r'a.txt')