寫在前面的一些說明:
- 本文章為個人整理與考試等無關,所列重點均為個人理解
- 所有的程式撰寫不唯一!不唯一!不唯一!本人提供的非最優解,僅供參考
- 部分程式提供多種解決思路僅供參考
- 本文僅提供本人認為的重要內容(用【*】標出),其他內容請參閱書或PPT
- 如有錯誤請提出,本人也隨時原意為各位答疑,可以隨意聯系
- 如果有些問題問的比較多,我也會繼續補充,
CNU 2020級 生科院 PYTHON 部分整理
- 第一部分 初識PYTHON語言
- 第一章 程式設計基本方法
- 一般程式
- 一切的開始
- 圓面積的計算
- Turtle繪圖庫
- 五角星的繪制
- 第二章 PYTHON程式實體決議
- 保留字(33個)【*】
- 陳述句型別
- 實體
- 溫度轉換【*】
- Python蟒蛇繪制
- 第二部分 深入PYTHON語言
- 第三章 基本資料型別
- 資料型別
- 數字型別
- 字串型別【*】
- 格式化(format)
- 天天向上的力量
- 每天1%
- 每天5‰
- 作業日的力量
- 文本進度條(不作要求)
- 基礎
- 單行動態重繪
- 整合
- 第四章 程式的控制結構
- 程式流程圖
- 分支結構
- 回圈結構
- 例外處理(低要求)
- random庫
- 身體質量指數BMI
- PM指數
- π 的計算(不作要求)
- 近似計算公式
- 蒙特卡羅方法
- 生成隨機密碼
- 第五章 函式和代碼復用
- 基礎
- lambda
- 引數
- 變數
- 代碼復用和模塊化設計
- 遞回【*】
- n的階乘
- 字串反轉
- 斐波那契數列
- 科赫曲線的繪制1[一段]
- 科赫曲線的繪制2[封閉]
- 七段數碼管的繪制
- 第六章 組合資料型別
- 序列型別
- 集合型別
- 字典型別
- jieba庫
- 文本詞頻統計
第一部分 初識PYTHON語言
第一章 程式設計基本方法
一般程式
一切的開始
print('Hello World')
圓面積的計算
r= 25
area = 3.1415 * r * r
print(area)
print("{:.2f}".format(area))
Turtle繪圖庫
五角星的繪制
import turtle //匯入Turtle庫
from turtle import *
color('red', 'red')
begin_fill()
for i in range(5):
fd(200)
rt(144)
end_fill()
done()
第二章 PYTHON程式實體決議
命名規則等其他內容自行看書復習
保留字(33個)【*】
注意True False None 首字母大寫
以及在判定(比較大小,下同)時
True=1 False=0
| True | False | None | – |
|---|---|---|---|
| and | elif | import | raise |
| as | else | in | return |
| assert | except | is | try |
| break | finally | lambda | while |
| class | for | nonlocal | with |
| continue | from | not | yield |
| def | global | or | |
| del | if | pass |
陳述句型別
賦值陳述句
分支陳述句
回圈陳述句
函式
注意:分支和回圈的冒號!
實體
溫度轉換【*】
分析每行代碼的意義
理解縮進的作用/意義
TempStr = input("請輸入帶有符號的溫度值: ")
if TempStr[-1] in ['F', 'f']:
C = (eval(TempStr[0:-1]) -32)/1.8
print("轉換后的溫度是{:.2f}C".format(C))
elif TempStr[-1] in ['C','c']:
F = 1.8*eval(TempStr[0:-1]) + 32
print("轉換后的溫度是{:.2f}F".format(F))
else:
print("輸入格式錯誤")
Python蟒蛇繪制
最好可以知道每個函式的作用~
#PythonDraw.py
import turtle
turtle.setup(650, 350, 200, 200)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
turtle.pencolor("purple")
turtle.seth(-40)
for i in range(4):
turtle.circle(40, 80)
turtle.circle(-40, 80)
turtle.circle(40, 80/2)
turtle.fd(40)
turtle.circle(16, 180)
turtle.fd(40 * 2/3)
turtle.done()
第二部分 深入PYTHON語言
第三章 基本資料型別
資料型別
字串、數字、組合元素型別……
數字型別
2、8、10、16進制 前綴:0b | 0o | 無 | 0x
整數,浮點數(不確定尾數,處理),復數 各自的規則與相互的轉換
四則運算的順序
二元數值運算子的識別
內置數學函式pow() round() int() float() max() min()
字串型別【*】
序號規則
操作
索引:回傳字串中單個字符 <字串>[M]
“請輸入帶有符號的溫度值: “[0] 或者 TempStr[-1]
切片:回傳字串中一段字符子串 <字串>[M:N]
[M: N]獲取字串中從M到N【但不包含N】間連續的子字串
“請輸入帶有符號的溫度值: “[1:3] 或者 TempStr[0:-1]
運算: +、*、in 在字串運算中的意思
內置函式的運用
len() str() hex() oct() chr() ord()
str.lower()或str.upper()
str.split(sep=None)
str.count(sub)
str.replace(old, new)
str.center(width[,fillchar])
str.strip(chars)
str.join(iter)
Unicode編碼 科普內容 但是很有趣
轉義符(雖然很重要 但是咱們基本沒涉及 故基本無視)
格式化(format)
槽{}的概念和規則
| : | <填充> | <對齊> | <寬度> | <,> | <.精度> | <型別> |
|---|---|---|---|---|---|---|
| 引導符號 | 用于填充的單個字符 | < 左對齊 | 槽設定的輸出寬度 | 數字的千位分隔符 | 浮點數小數精度或字串最大輸出長度 | 整數型別 |
| – | – | > 右對齊 | – | – | – | b,c, d,o,x,X |
| – | – | ^ 居中對齊 | – | – | – | 浮點數型別 |
| – | – | – | – | – | – | e, E, f, % |
出于系統限制 表格就請湊合看吧=3=(其實還是懶)
強調!!!!
填充是指將輸出的內容 填充至指定長度(當長度不滿足所寫數值時才填充!)
舉例:{0:3}是將字串a填充至3位(字串默認填充在末尾,數字默認填充在開始)
如果a=‘a’
此時a不滿足三位 所以默認填充空格(在這里用—替代空格) 輸出’a——’
如果a=‘abcd’ 此時a滿足三位 不進行填充,輸出為’abcd’
所以,此代碼{0:3}只負責填充(即加法),不會進行減法!
天天向上的力量
(通過代碼理解各陳述句的關系和使用方法)
每天1%
dayup= pow(1.001, 365)
daydown= pow(0.999, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown
每天5‰
#DayDayUpQ2.py
dayfactor= 0.005
dayup= pow(1+dayfactor, 365)
daydown= pow(1-dayfactor, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown))
作業日的力量
#DayDayUpQ3.py
dayup=1.0
dayfactor= 0.01
for i in range(365):
if i % 7 in[6,0]:
dayup= dayup*(1-dayfactor)
else:
dayup= dayup*(1+dayfactor)
print("作業日的力量:{:.2f}".format(dayup))
#DayDayUpQ4.py
def dayUP(df):
dayup=1.0
for i in range(365):
if i % 7 in[6,0]:
dayup= dayup*(1-0.01)
else:
dayup= dayup*(1+df)
return dayup
dayfactor= 0.01
while dayUP(dayfactor) < 37.78:
dayfactor+= 0.001
print("作業日的努力引數是:{:.3f}".format(dayfactor))
下面這個是我瞎魔改的 康康就好=3=
a=int(input('周期:'))
d=int(input('總時間:'))
c=int(input('奮斗時間:'))
b=int(input('摸魚時間:'))
y=float(input('向上變化量:'))
z=float(input('向下變化量:'))
x=1
if b+c==a:
for i in range(d):
if i % a in range(c):
x=(1+y)*x
else :
x=(1-z)*x
print('結果',x)
else :
print('錯誤')
文本進度條(不作要求)
基礎
import time
scale = 10
print("------執行開始------")
for i in range(scale+1):
a = '*'* i
b = '.'* (scale -i)
c = (i/scale)*100
print("{:^3.0f}%[{}->{}]".format(c,a,b))
time.sleep(0.1)
print("------執行結束------")
單行動態重繪
import time
for i in range(101):
print("\r{:3}%".format(i), end="")
time.sleep(0.1)
整合
import time
scale = 50
print("執行開始".center(scale//2,"-"))
start = time.perf_counter()
for i in range(scale+1):
a = '*'* i
b = '.'* (scale -i)
c = (i/scale)*100
dur= time.perf_counter() -start
print("\r{:^3.0f}%[{}-{}]{:.2f}s".format(c,a,b,dur),end='')
time.sleep(0.1)
print("\n"+"執行結束".center(scale//2,'-'))
第四章 程式的控制結構
程式流程圖
參閱書和PPT
分支結構
單分支結構(少見)
二分支結構(簡易形式)
多分支結構
注意冒號!!!!
運算子與三個保留字
回圈結構
遍歷回圈 for … in …
無限回圈 while (可以設定條件執行有限次的回圈)
兩個保留字:
break跳出并結束當前整個回圈,執行回圈后的陳述句
continue結束當次回圈,繼續執行后續次數回圈
二者都只對最內層回圈起作用
例外處理(低要求)
學會查看錯誤提示(包括錯誤型別,錯誤原因,發生位置,有助于你修改程式)
try、except的應用(依舊是 注意冒號!!!)
random庫
幾個常用函式(萬一又讓你生成亂數呢…)
random()
randint()
身體質量指數BMI
PPT里是圖片 我也懶得手敲了 =3=

PM指數
a=eval(input('PM數值:'))
if 0<=a<50:
print('優秀')
elif 50<=a<100:
print('良好')
else:
print('污染')
π 的計算(不作要求)
近似計算公式
pi = 0
N = 100
for k in range(N) :
pi += 1/pow(16,k)*( \
4/(8*k+1) –2/(8*k+4) -\
1/(8*k+5) –1/(8*k+6))
print("圓周率值是: {}".format(pi))
蒙特卡羅方法
這種數學思想還是建議各位了解一下的
依舊懶得打 =3=

生成隨機密碼
#生成隨機密碼
from random import choice
import string #一個庫 這個庫可以理解為用幾個字母的函式來表示a-z,A-Z,0-9
def GenPassword(length=8,chars=string.ascii_letters+string.digits):
return ''.join([choice(chars) for i in range(length)])
if __name__=="__main__":
#生成10個隨機密碼
for i in range(10):
#密碼的長度為8
print(GenPassword(8))
第五章 函式和代碼復用
基礎
函式是組織好的,可重復使用的,用來實作單一,或相關聯功能的代碼段,
函式能提高應用的模塊性,和代碼的重復利用率,你已經知道Python提供了許多內建函式,比如print(),但你也可以自己創建函式,這被叫做用戶自定義函式,
也就是說你用def()定義的函式和print()等本質是一個東西
函式在定義之后只有呼叫!呼叫!呼叫!才會有作用!(你問我什么是呼叫?罰你回去抄書!)(我尋思我這一個月發現好幾個因為不呼叫/呼叫不對而出錯的)
def <函式名>(<引數(0個或多個)>):
<函式體>
return <回傳值>
lambda
因為一些(可能超綱的 )原因,要謹慎使用(說白了就是不用會寫,但你要能認出別人寫的 )lambda函式
<函式名> = lambda <引數> :<運算式>
等價于
def <函式名>(<引數>):
<函式體>
return <回傳值>
引數
函式可以有引數,也可以沒有,但必須保留括號
區分實參(有實際意義的引數)和虛參(虛假的引數,只用來占位)
引數的傳遞(名字,順序)
即必須以 def 函式名() 的形式出現 括號不能省略
括號后面要有冒號!!!!!!
函式定義時可以為某些引數指定默認值,構成可選引數
def 函式名(非可選引數,可選引數):
函式體(即函式內容)
return 回傳值
return 后面的回傳值可有0至n多個(默認以元組形式回傳),0就是沒有回傳值(你甚至可以不寫return 233)
(但是沒有return你呼叫這個函式為了什么呢?這就相當于你讓你同學幫你算1+1,你的同學只告訴你他算完了,但并不告訴你結果(你沒有return計算機甚至都不告訴你他算完了,除非你寫進去-1-)(雖然有時候也有一些別的目的,但是不展開說了))
變數
全域變數與區域變數(不理解的還是直接問吧,變數能說一年(霧))
二者不同,當區域變數含有未創建的組合資料型別等同于全域變數,
global的使用
代碼復用和模塊化設計
這一節在編程中(尤其是大程式(就像下面那個七段數碼管那么大(其實它很小 )的程式))十分重要,但是吧,咱們課上幾乎就沒怎么用,各位也沒有機會寫這種程式,就被迫顯得沒那么重要了orz,但是這種模塊化的思維,真的很重要,
模塊內部緊耦合、模塊之間松耦合(其他的我就不強調了)
遞回【*】
由函式+分支結構構成
會認 會寫 雖然這個玩意執行速度并不快,但依然很重要
遞回,理解成套娃就好了,但是這個套娃最里面必須得有獎品(基例),不能是空的
n的階乘
def fact(date):
if n == 0 :
return 1
else :
return n*fact(n-1)
字串反轉
[::-1]比遞回香多了(
def rvs(s):
if s == " " :
return s
else :
return rvs(s[1:])+s[0]
斐波那契數列
def f(n):
if n == 1 or n == 2 :
return 1
else :
return f(n-1)+f(n-2)
科赫曲線的繪制1[一段]
import turtle
def koch(size , n):
if n == 0 :
turtle.fd(size)
else :
for angle in [0, 60, -120, 60]:
turtle.left(angle)
koch(size/3, n-1)
def main():
turtle.setup(800,400)
turtle.penup()
turtle.goto(-300, -50)
turtle.pendown()
turtle.pensize(2)
koch(600, 3) # 3階科赫曲線,階數
turtle.hideturtle()
main()
科赫曲線的繪制2[封閉]
import turtle
def koch(size , n):
if n == 0 :
turtle.fd(size)
else :
for angle in [0, 60, -120, 60]:
turtle.left(angle)
koch(size/3, n-1)
def main():
turtle.setup(600,600)
turtle.penup()
turtle.goto(-200, 100)
turtle.pendown()
turtle.pensize(2)
level = 3 # 3階科赫雪花,階數
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.hideturtle()
main()
七段數碼管的繪制
沒啥內容,給你們放一個可以偽實時重繪的代碼,運行玩玩(如果不是實時重繪的,請去問你的Python,至少我這里是時時重繪 )
#繪制七段數碼管,動態顯示當前時間
from turtle import *
from datetime import datetime
from time import sleep
#繪制數碼管間的空白間隔
def drawGap():
up()
fd(5)
#繪制單段數碼管,方向控制
def drawLine(draw):
drawGap()
down() if draw== True else up()
fd(40)
drawGap()
right(90)
#根據數字繪制數碼管
def drawDigit(d):
drawLine(True) if d in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if d in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if d in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if d in [0,2,6,8] else drawLine(False)
left(90) #第4段到第5段無需右轉,相當于修正了方向
drawLine(True) if d in [0,4,5,6,8,9] else drawLine(False)
drawLine(True) if d in [0,2,3,5,6,7,8,9] else drawLine(False)
drawLine(True) if d in [0,1,2,3,4,7,8,9] else drawLine(False)
left(180)
up()
fd(20)
#繪制當前時間
def drawDate(date):
pencolor("red")
for i in date:
if i == '-':
write('年',font=('Arial',18,'normal'))
pencolor('orange')
fd(40)
elif i == '=':
write('月',font=('Arial',18,'normal'))
pencolor('yellow')
fd(40)
elif i == '+':
write('日',font=('Arial',18,'normal'))
pencolor('green')
fd(40)
elif i == '*':
write('時',font=('Arial',18,'normal'))
pencolor('blue')
fd(40)
elif i == '#':
write('分',font=('Arial',18,'normal'))
pencolor('purple')
fd(40)
elif i == '?':
write('秒',font=('Arial',18,'normal'))
fd(40)
else:
drawDigit(eval(i))
#主函式
def main():
setup(1300,280,50,300)
speed(0)
up()
fd(-600)
pensize(5)
while(1):
penup()
goto(-600,0)
pendown()
tracer(False)
pencolor('red')
drawDate(datetime.now().strftime('%Y-%m=%d+%H*%M#%S?')) #獲取當前系統時間
hideturtle()
sleep(1)
clear() #清屏
done()
main()
第六章 組合資料型別
序列型別(字串str,元組tuple,串列list)、集合型別(集合set)和映射型別(字典map)
各部分的操作暫略
序列型別
具有先后關系
可以存在相同數值但位置不同的元素
元組用 () 和 tuple() 創建,串列用 [] 和 list() 創建
6個通用運算子 5個函式和方法
特別注意了串列型別17個操作函式和方法
集合型別
無序,每個元素唯一,不能是可變資料型別
集合用大括號 {} 表示,元素間用 逗號 分隔
建立集合型別用 {} 或 set()
建立空集合型別,必須使用 set()
6個運算子 4個增強運算子 處理方法10個
主要應用于:包含關系比較、資料去重
字典型別
理解“映射” 鍵(索引)和值(資料)
鍵值對:鍵是資料索引的擴展
字典是鍵值對的集合,鍵值對之間無序
采用大括號 {} 和 dict() 創建,鍵值對用冒號: 表示
13個操作函式和方法
jieba庫
了解即可
文本詞頻統計
了解
最后再給大家推薦一個小網址
https://www.runoob.com/python3/python3-list.html
進去就知道了,畢竟人家叫“菜鳥教程”應該都能看得懂吧=3=
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/237238.html
標籤:python
上一篇:演算法題:旋轉影像
