本筆記主要參考中國大學MOOC北京理工大學嵩天教授開設的《Python語言程序設計》課程。
課程連結:https://www.icourse163.org/course/BIT-268001
Python語言程序設計第一章 Python基本語法元素
1.1 程序設計基本方法
1.2 Python開發環境配置
1.3 實例1: 溫度轉換
Python程序語法元素分析
第二章 Python基本圖形繪製
深入理解Python語言
實例2: Python蟒蛇繪製
模塊1: turtle庫的使用
turtle程序語法元素分析
第三章 基本數據類型
實例3: 天天向上的力量
字符串類型及操作
模塊2: time庫的使用
實例4: 文本進度條
第四章 程序的控制結構
程序的分支結構
實例5: 身體質量指數BMI
程序的循環結構
模塊3: random庫的使用
實例6: 圓周率的計算
1第一章 Python基本語法元素1.1 程序設計基本方法QGKWQ4計算機與程序設計摩爾定律 Moore’s Law:單位面積集成電路上可容納電晶體的數量約每兩年翻一番
編譯和解釋U9m5N6aGsBHo靜態語言和腳本語言程序的基本編寫方法IPO編程解決問題的步驟計算機編程1.2 Python開發環境配置1.3 實例1: 溫度轉換#TempConvert.py
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("輸入錯誤")
#請輸入帶有符號的溫度值:100C
#轉換後的溫度是:212.00F
Python程序語法元素分析程序的格式框架縮進:一行代碼開始前的空白區域,表達程序的格式框架
命名與保留字變量:程序中用於保存和表示數據的佔位符號
命名:大小寫敏感、首字符不能是數字、不與保留字相同
保留字:被程式語言內部定義並保留使用的標識符
FQqwnA數據類型字符串字符串:由0個或多個字符組成的有序字符序列
字符串由一對單引號或一對雙引號表示
字符串是字符的有序序列,可以對其中的字符進行索引
正向遞增序號 和 反向遞減序號
1w30ZY索引:返回字符串中單個字符 <字符串>[M]
"請輸入帶有符號的溫度值: "[0] 或者 TempStr[-1]
切片:返回字符串中一段字符子串 <字符串>[M: N]
"請輸入帶有符號的溫度值: "[1:3] 或者 TempStr[0:-1]
數字類型數字類型:整數和浮點數
列表類型列表類型:由0個或多個數據組成的有序序列
列表使用[ ]表示,採用逗號(,)分隔各元素 ['F','f']表示兩個元素'F'和'f'
使用保留字 in 判斷一個元素是否在列表中 TempStr[-1] in ['C','c']判斷前者是否與列表中某個元素相同
語句與函數賦值語句賦值語句:由賦值符號構成的一行代碼
C=(eval(TempStr[0:-1])-32)/1.8 #右側運算結果賦給變量CTempStr=input("") #input()返回一個字符串,TempStr也是字符串
分支語句分支語句:由判斷條件決定程序運行方向的語句
使用保留字if elif else構成條件判斷的分支結構
函數函數:根據輸入參數產生不同輸出的功能過程
函數採用 <函數名>(<參數>) 方式使用
eval(TempStr[0:-1]) #TempStr[0:-1]是參數
Python程序的輸入輸出input():從控制臺獲得用戶輸入的函數
input()函數的使用格式:
<變量> = input(<提示信息字符串>)
print():以字符形式向控制臺輸出結果的函數
cSPzXn評估函數eval():去掉參數最外側引號並執行餘下語句的函數
tUddj1練習題#數字形式轉換 I
chiStr = ['零','一','二','三','四','五','六','七','八','九']
intStr = input()
for i in intStr:
b = eval(i)
print(chiStr[b])
#123
#一
#二
#三# 貨幣轉換 I
MoneyStr = input()
if MoneyStr[0:3] in ['RMB', 'rmb']:
USD = eval(MoneyStr[3:]) / 6.78
print("USD{:.2f}".format(USD))
else:
RMB = eval(MoneyStr[3:]) * 6.78
print("RMB{:.2f}".format(RMB))
#USD20
#RMB135.60
2第二章 Python基本圖形繪製深入理解Python語言程式語言的種類超級語言 高級語言 彙編語言 機器語言
實例2: Python蟒蛇繪製# PythonDraw.py
import turtle as t
t.setup(650,350,200,200)
t.penup()
t.fd(-250)
t.pendown()
t.pensize(25)
t.pencolor('purple')
t.seth(-40)
for i in range(4):
t.circle(40,80)
t.circle(-40,80)
t.circle(40, 80/2)
t.fd(40)
t.circle(16,180)
t.fd(40 * 2/3)
EXtaMC模塊1: turtle庫的使用turtle庫基本介紹庫Library、包Package、模塊Module,統稱模塊
turtle的繪圖窗體ssYGWXturtle空間坐標體系CDdJqn5x6nwfturtle角度坐標體系EsXw5qtui7jrRGB色彩體系t.colormode(255)
turtle程序語法元素分析庫引用與importr1X5fFimport turtle
import turtle as t
from turtle import *
turtle畫筆控制函數畫筆操作後一直有效,一般成對出現
penup()
pendown()
pensize(width)
pencolor(colorstring)
pencolor(r,g,b)
pencolor((r,g,b))
turtle運動控制函數控制海龜行進:走直線 & 走曲線
別名 turtle.fd(d) 向前行進,海龜走直線
turtle.circle(r, extent=None)
根據半徑r繪製extent角度的弧形
turtle方向控制函數turtle.setheading(angle)
改變行進方向,海龜走角度。行進方向的絕對角度
turtle.left(angle)
turtle.right(angle)
循環語句與range()函數range(N)
產生 0 到 N-1的整數序列,共N個
range(M,N)
產生 M 到 N-1的整數序列,共N-M個
練習題#RectDraw.py
import turtle as t
t.pensize(2)
for i in range(4):
t.fd(150)
t.left(90)#HexagonDraw.py
import turtle as t
t.pensize(2)
for i in range(6):
t.fd(150)
t.left(60)#TwoRoundDraw.py
import turtle as t
t.pensize(2)
for i in range(9):
t.fd(150)
t.left(80) #720/9
dGDwiI#WindWheel.py
import turtle as t
t.pensize(2)
for i in range(4):
t.seth(90*i)
t.fd(150)
t.right(90)
t.circle(-150, 45)
t.goto(0,0)
rIyRos3第三章 基本數據類型數字類型及操作整數類型pow(x,y)函數:計算 xy,想算多大算多大
浮點數類型浮點數間運算存在不確定尾數,不是bug
round(0.1+0.2, 1) == 0.3
#True
數值運算操作符Cf0fSEQFgzvk9d44VP數值運算函數SzwbaL實例3: 天天向上的力量"天天向上的力量"第一問問題1:1‰的力量
#DayDayUpQ1.py
dayup = pow(1.001, 365)
daydown = pow(0.999, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown))
#向上:1.44,向下:0.69
"天天向上的力量"第二問問題2:5‰和1%的力量
#DayDayUpQ1.py
dayfactor = 0.01
dayup = pow(1+dayfactor, 365)
daydown = pow(1-dayfactor, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown))
#向上:37.78,向下:0.03##DayDayupQ1.py
dayfactor = 0.005
dayup = pow(1 + dayfactor, 365)
daydown = pow(1 - dayfactor, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown))
#向上:6.17,向下:0.16#DayDayUpQ1.py
dayfactor = 0.001
dayup = pow(1 + dayfactor, 365)
daydown = pow(1 - dayfactor, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown))
#向上:1.44,向下:0.69
"天天向上的力量"第三問問題3:工作日的力量
#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))
#工作日的力量:4.63
### 介於0.001和0.005之間
"天天向上的力量"第四問問題4:工作日的努力
def dayUp(df):
dayup = 1
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))
#工作日的努力參數:0.019
#工作日模式,每天要努力到1.9%,相當於365模式每天1%的效果!
字符串類型及操作字符串類型的表示由0個或多個字符組成的有序字符序列
由一對單引號或雙引號表示,僅表示單行字符串
由一對三單引號或三雙引號表示,可表示多行字符串
''' Python
語言
'''
#' Python\n\n語言\n\n'
''' 這裡既有單引號(')又有雙引號 (") '''<字符串>[M: N: K],根據步長K對字符串切片
"〇一二三四五六七八九十"[::-1] 結果是 "十九八七六五四三二一〇"
轉義符 \
"這裡有個雙引號(\")" 結果為這裡有個雙引號(")
"\b"回退 "\n"換行(光標移動到下行首) "\r" 回車(光標移動到本行首)
字符串操作符hrd5oS#WeekNamePrintV1.py
weekStr = "星期一星期二星期三星期四星期五星期六星期日"
weekId = eval(input("請輸入星期數字(1-7):"))
pos = (weekId - 1) * 3
print(weekStr[pos:pos+3])
#請輸入星期數字(1-7):7
#星期日#WeekNamePrintV2.py
weekStr = "一二三四五六日"
weekId = eval(input("請輸入星期數字(1-7):"))
print("星期" + weekStr[weekId-1])
#請輸入星期數字(1-7):4
#星期四
字符串處理函數BuyF2R"1 + 1 = 2 " + chr(10004)
#'1 + 1 = 2 ✔'
for i in range(12):
print(chr(9800 + i), end="")
#♈♉♊♋♌♍♎♏♐♑♒♓
字符串處理方法"方法"在編程中是一個專有名詞
rGvOG4d1TZaNOum3WP字符串類型的格式化<模板字符串>.format(<逗號分隔的參數>)
gp7Qazv41Zf8ElK6lw模塊2: time庫的使用time庫基本介紹時間獲取:time() ctime() gmtime()
時間格式化:strftime() strptime()
程序計時:sleep(), perf_counter()
時間獲取W2vG9kii7Sp7時間格式化FS5LPLbWRcIW程序計時應用cRMKkwVO6uve實例4: 文本進度條"文本進度條"簡單的開始#TextProBarV1.py
YnlBSy"文本進度條"單行動態刷新
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("-執行結束-")#TextProBarV2.py
"文本進度條"實例完整效果
import time
for i in range(101):
print("\r{:3}%".format(i), end="")
time.sleep(0.1)#TestProBarV3.py
p32N4i練習題
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, "-"))#三次方格式化
qKS7AI
a = eval(input())
print("{:-^20}".format(pow(a,3)))
#10
#---1000---
#星號三角形
n = eval(input())
for i in range(1,n+1,2):
print("{0:^{1}}".format('*'*i, n)) # 槽中可以嵌套槽,用來表示寬度、填充等含義。愷撒密碼是古羅馬愷撒大帝用來對軍事情報進行加解密的算法,它採用了替換方法對信息中的每一個英文字符循環替換為字母表序列中該字符後面的第三個字符,即,字母表的對應關係如下:
原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
對於原文字符P,其密文字符C滿足如下條件:C=(P+3) mod 26
上述是凱撒密碼的加密方法,解密方法反之,即:P=(C-3) mod 26
#凱撒密碼1
Str = input()
for i in range(0,len(Str)):
if Str[i] == ' ':
print(' ', end="")
elif Str[i] in ['x','y','z',"X","Y","Z"]:
print(chr(ord(Str[i])-23), end="")
else:
print(chr(ord(Str[i])+3), end="")
#python is good
#sbwkrq lv jrrg#凱撒密碼2
counter(counterh2)第四章 程序的控制結構程序的分支結構單分支結構Iwcu1S二分支結構lKhlnd
s = input()
t = ""
for c in s:
if 'a' <= c <= 'z':
t += chr( ord('a') + ((ord(c)-ord('a')) + 3 )%26 )
elif 'A' <= c <= 'Z':
t += chr( ord('A') + ((ord(c)-ord('A')) + 3 )%26 )
else:
t += c
print(t)
#python is good
#sbwkrq lv jrrgguess = eval(input())
多分支結構FpF8rJs0dPf5條件判斷及組合9njD2kjyPI9r程序的異常處理WB81sEtmJq0x
print("猜{}了".format("對" if guess==99 else "錯"))try:
實例5: 身體質量指數BMI
num = eval(input("請輸入一個整數:"))
print(pow(num,2))
except NameError:
print("你輸錯了")
else:
print("Yeah!!!")
finally:
print("Hello World")#CalBMIv3.py
程序的循環結構遍歷循環Aq3SxO
height,weight = eval(input("請輸入身高(米)和體重(公斤)[逗號隔開]:"))
bmi = weight / pow(height, 2)
print("BMI 數值為:{:.2f}".format(bmi))
who,nat = "",""
if bmi < 18.5:
who, nat = "偏瘦","偏瘦"
elif 18.5 <= bmi < 24:
who, nat = "正常","正常"
elif 24 <= bmi < 25:
who, nat = "正常","偏胖"
elif 25 <= bmi < 28:
who, nat = "偏胖","偏胖"
elif 28 <= bmi < 30:
who, nat = "偏胖","肥胖"
else:
who, nat = "肥胖","肥胖"
print("BMI 指標為:國際'{0}', 國內'{1}'".format(who, nat))#計數循環(特定次)
無限循環q3mQuK循環控制保留字Zwd8uf
for i in range(N) :
for i in range(M,N,K) :
#字符串遍歷循環
for c in "Python123":
print(c, end=",")
#列表遍歷循環
for item in [123, "PY", 456] :
print(item, end=",")
#文件遍歷循環
for line in fi :
print(line)# continue結束當次循環
for c in "PYTHON":
if c == "T":
continue
print(c, end="")
#PYHON
for c in "PYTHON":
if c == "T":
break
print(c, end="")
#PY
s = "PYTHON"
while s != "":
for c in s:
print(c, end="")
s = s[:-1]
#PYTHONPYTHOPYTHPYTPYP## break僅跳出當前最內層循環
iP1vHZ
s = "PYTHON"
while s != "":
for c in s:
if c == "T":
break
print(c, end="")
s = s[:-1]
#PYPYPYPYPYP# 循環與else
模塊3: random庫的使用Dk9aUqOenTYfSEWeBwn4gR9N實例6: 圓周率的計算"圓周率的計算"問題分析BGIe0v
# 當循環沒有被break語句退出時,執行else語句塊
for c in "PYTHON":
if c == "T":
continue
print(c, end="")
else:
print("正常退出")
#PYHON正常退出
for c in "PYTHON":
if c == "T":
break
print(c, end="")
else:
print("正常退出")
#PY#CalPiV1.py
## 數學公式計算
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.141592653589793# 圓周率:蒙特卡羅方法
練習題
#CalPiV2.py
from random import random
from time import perf_counter
DARTs = 1000*1000
hits = 0.0
start = perf_counter()
for i in range(1, DARTs+1):
x, y = random(),random()
dist = pow(x ** 2 + y ** 2, 0.5)
if dist <= 1.0:
hits = hits + 1
pi = 4 * (hits/DARTs)
print("圓周率的值為:{}".format(pi))
print("運行時間是:{:.5f}".format(perf_counter() - start))
#圓周率的值為:3.144192
#運行時間是:0.47377#整數的加減和
s = 0
count = 1
while count <= 966:
if count % 2 == 0:
s -= count
else:
s += count
count += 1
print(s)
#-483
##三位水仙花數
s = ""
for i in range(100, 1000):
t = str(i)
if pow(eval(t[0]),3) + pow(eval(t[1]),3) + pow(eval(t[2]),3) == i :
s += "{},".format(i)
print(s[:-1])
#153,370,371,407
#用戶登錄的三次機會
count = 0
while count < 3:
name = input()
passwd = input()
if name == "Kate" and passwd == '666666':
print("登陸成功")
break
else:
count = count + 1
if count == 3:
print("3次用戶名或者密碼均有誤!退出程序。")