# 查詢模組列表
!pip list
# 安裝模組 -U 代表可進行更新
!pip install -U pytube
# 查詢模組詳細資料
!pip show pytube
# 移除模組
!pip uninstall pytube
x = 0 ; y=1
a = b = c = 20
age, name = 18, "王大明"
print(x, y)
print(a, b, c)
print(age, name)
age = 32
justdoit = False
name = "David"
weight = 123.5
zipcode = "545"
# 測試資料型態
print(type(age))
print(type(justdoit))
print(type(weight))
print(type(zipcode))
# 錯誤==> 整數、字串無法加法運算
num1=23 + "67"
# 正確寫法
num1 = 23 + int("67")
# 錯誤==> 數字無法自動轉字串
score =60
print("小明成績="+score)
# 正確
score =60
print("小明成績=" + str(score) )
print(100, "多吃水果", True)
# print(str(100) + "多吃水果" + str(True))
# print(100, "多吃水果", True, sep="&", end=".")
print(項目 % (參數列))
參數格式化(%)--預設「靠右對齊」
print("%s的成績是%d分" % ("王小明",80))
# 預設靠右對齊
print("%5s的成績是%3d分" % ("王小明",90))
# 指定靠左對齊
print("%-5s的成績是%-3d分" % ("王小明",90))
# 浮點數格式
print("我的BMI:%.2f" % (18))
print("我的BMI:%6.2f" % (18))
以一對大括號{ }表示參數的位置。
語法為:
print(字串.format(參數列))
print("{}成績為{}".format("王大明", 75))
print("{1}是{0}的成績".format("王大明", 75))
print("{0:5s}成績為{1:.2f}".format("王大明", 75))
name = "王大明"
score = 75
print(f"{name} 的成績為 {score}")
score = input("國文成績:")
print(score)
print("國文分數=" + score)
#資料型態錯誤
scoreA = input("國文成績= ")
scoreB = input("英文成績= ")
scoreC = input("數學成績= ")
total = scoreA + scoreB + scoreC
print(total)
print("你的總分= " + total)
#使用 int(), str()
scoreA = int(input("國文成績= "))
scoreB = int(input("英文成績= "))
scoreC = int(input("數學成績= "))
total = str(scoreA + scoreB + scoreC)
print(total)
print("你的總分= " + total)
2+3中「2」,「3」是運算元,而「+」是運算子;運算式由運算元和運算子所組成
# 算數運算(數值運算)
# 注意「 /, %, // 」三者和除法相關
a=7
b=2
print(a / b) #除
print(a % b) #餘數
print(a // b) #商數
print(a ** b) #指數
# 比較運算(關係運算子)
# 比較正確傳回True, 錯誤傳回False
a = 7
b = 5
print(a==b)
print(a!=b)
print(a>=b)
print(a<=b)
# 邏輯運算
print( not(3>5))
print( not(5>3))
print((5>3) and (9<6))
i =1
i +=3 # 即 i=i+3
print(i)
# 字串運算
s="abcdefg"
print(s*2)
print(s[0])
print(s[1:5])
print(s[:])
print(s[1:])
print(s[:1])
# 綜合運算
x1 = "a"
y1 = 3
a = x1*y1
x2 = 6
y2 = 3
b = x2**y2
x3 = 5
y3 = 2
c = x3/y3
x4 = 7
y4 = 5
d = x4<y4
print("a 的值為", a, "資料型態是", type(a))
print("b 的值為", b, "資料型態是", type(b))
print("c 的值為", c, "資料型態是", type(c))
print("d 的值為", d, "資料型態是", type(d))
Python語言以冒號「:」及縮排來表示程式區塊,縮排為1個Tab鍵或4個空白
score = int(input("輸入分數:"))
if score >= 60:
print("及格!")
if 條件式:
程式區塊1
else:
程式區塊2
score = int(input("輸入分數:"))
if score >= 60:
print("及格!")
else:
print("不及格!")
score = int(input("輸入分數:"))
if score >= 90:
print("甲等")
elif score >= 80:
print("乙等")
elif score >= 70:
print("丙等")
elif score >= 60:
print("丁等")
else:
print("不及格了!")
請輸入金額,若10萬以上打8折、5萬以上打85折、3萬以上打9折、1萬以上打95折。
# 請實作練習
迴圈主要用來執行重複的事情。
list1 = [1, 2, 3, 4, 5] #元素皆為整數
list2 = ["香蕉", "蘋果", "橘子"] #元素皆為字串
list3 = [1, "香蕉", True] #包含不同資料型態元素
#list1
元素值 = 串列名稱[索引值]
元素值 = 串列名稱[起始索引值:終止索引值]
*索引值是從 0 開始計數,索引值不可超出串列的範圍。用「:」取得的串列範圍是由起始索引值到「終止索引值-1」。
list1 = [1, 2, 3, 4, 5]
print(list1[0])
print(list1[1:4]) #元素值範圍
print(list1[:]) #由頭到尾
print(list1[-2]) #負責表示由後向前取出元素值
串列的元素可以是另一個串列,形成多維串列,多維串列元素使用多個中括號[ ]
list5 = [["joe",1234], ["Mary",5678], ["David",9876]]
print(list5[1])
print(list5[1][1])
range()是建立整數循序串列
range(終止值)
range(起始值, 終止值, 間隔值)
list1 = range(5) #[0,1,2,3,4]
list2 = range(3, 8) #[3,4,5,6,7]
list3 = range(3, 8, 2) #[3,5,7] 元素值每次增加2
list4 = range(8, 3, -1) #[8,7,6,5,4] 間隔值可以是負值
#list(list1)
#顯示串列元素
list1 = ["香蕉", "蘋果", "橘子"]
for s in list1:
print(s)
#計算 1+2+…+10 之和
sum = 0
for i in range(1, 11):
sum += i
print(sum)
#利用二層迴圈列印九九乘法
for i in range(1,10):
for j in range(1,10):
prod = i * j
print("%2d*%2d=%2d" % (i,j,prod),end="")
print()
# break 及 continue demo
for i in range(1,11):
if (i == 6):
break
#continue
print(i,end=",")
#break範例
for i in range(1,11):
if(i==4):
break
print(i, end=",")
print()
#continue範例
for i in range(1,11):
if(i==4):
continue
print(i, end=",")
print()
for...else迴圈通常會和if及break函數配合使用
語法為:
# 此內容會顯示為程式碼
for 變數n in range(串列):
程式甲
if(條件式):
程式乙
break
else:
程式丙
for 迴圈
使用者輸入一個大於1的整數,判斷該數是否為質數?
# 質數判斷
n = int(input("輸入大於1的整數=?"))
if (n == 2): # 質數2要單獨處理
print("2是質數!")
else:
for i in range(2,n):
if (n%i == 0):
print("%d不是質數!" % n)
break
else:
print("%d是質數!" % n)
while 迴圈用於執行次數不固定的迴圈。
若是造成無窮迴圈時,要用Ctrl+C鍵中斷程式執行
while 條件式:
程式區塊
#計算 1+2+…+10 之和
total = n = 0
while(n < 10):
n += 1
total += n
print(total)
逐一輸入學生成績, 若輸入「-1」表示結束輸入,請計算班上總成績及平均
# 班級成績輸入
total = score = n = 0
while (score != -1):
n += 1
total += score
score = int(input("請輸入第%d位成績=" % n )) # 先加後再輸入成績
ave = total / (n-1)
print("總成績為%3d, 平均為%5.2f" % (total,ave))
串列在Python應用很廣泛,有多種方法可以進行操作
# 串列操作法方法
L=[1,2,3,4]
X=[5,6]
print(len(L)) # 取得串列長度(元素數目)
print(max(L)) # 取得元素最大值
print(min(L)) # 取得元素最小值
L.insert(3,8) # 在L的位置3插入8
print(L)
L.reverse() # 反轉串列元素順序
print(L)
L.sort() # 串列由小到大排序
print(L)
L.pop() # 回傳最後1元素並移除
#print(L)
L.pop(2) # 回傳指定元素並移除
#print(L)
二者都可以把資料加在串列的最後面
# append()
list1 = [1,2,3,4]
list1.append(7)
list1.append([5,6])
print(list1)
# extend()
list1 = [1,2,3,4]
#list1.extend(7) # 執行此行會錯誤
list1.extend([5,6])
print(list1)
元組的結構和串列相同,但元組的元素個數及元素值都不能改變(串列是可以改變的)
元組是使用小括號, 如:tuple1=(1,2,3,4)
元組的優點:
有時為了程式執行相互轉換需求,Python提供
#
tuple1 = (1,2,3,4)
print(len(tuple1))
#tuple1.append(5) #元組不能改變
print(tuple1)
# 字典
dict1 = {"香蕉":25, "芭樂":15, "蘋果":40 }
print(dict1["蘋果"]) # 以鍵取值, 用中括號[ ]
dict1["芭樂"]=20 #修改元素值
dict1["橘子"]=35 #增加元素
print(dict1)
# 刪除字典3種方法
del dict1["芭樂"] #刪除指定元素
print(dict1)
dict1.clear() #刪除所有元素
del dict1 #刪除del字典
# 字典的操作
dict2={"joe":10, "Marry":20, "Eric":30}
len(dict2) # 元素個數
"Marry" in dict2 # 檢查「鍵」是否存在
通常將key()及values()取得的資料以list()函數轉換為串列,將二者組合就可以列印字典全部內容
# 使用keys()及values()
dict1 = {"王小明":95, "李大華":80, "陳中明":90, "張大頭":85 }
listkey = list(dict1.keys())
print(listkey)
listvalue = list(dict1.values())
print(listvalues)
for i in range(len(listkey)):
print("%s 的成績為 %d分" % (listkey[i],listvalue[i]))
print()
# 使用items()顯示字典內容更為方便
listitem = list(dict1.items())
for name, score in listitem: # 注意此處的寫法,很特別
print("%s 的成績為 %d分" % (name ,score))
get()可取得「鍵」對應的「值」,不會改變元素
setdefault()使用方法與get()相同,
# get()
dict1 = {"香蕉":25, "芭樂":15, "蘋果":40 }
n = dict1.get("蘋果") # 有蘋果,所以 n=40
n = dict1.get("橘子",100) # 沒有橘子, 所以n=100(預設備)
n = dict1.get("橘子") # 沒有橘子, 沒有預設值, 所以n=None
print(n)
# setdefault()
n = dict1.setdefault("蘋果")
n = dict1.setdefault("橘子", 100) # 找不到, 故新增元素
print(dict1)
將具有特定功能或經常重複使用的程式,撰寫成函式,需要時直接呼叫執行
# 建立名稱為 SayHello() 的函式,無回傳值
def SayHello():
print( "歡迎光臨!")
SayHello()
輸入攝氏溫度,求華氏溫度
#
def ctof(c):
f = c *(9/5) +32
return f
inputc = int(input("輸入攝氏溫度="))
print("華氏溫度為 %4.1f " % ctof(inputc) )
# 建立名稱為 GetArea() 的函式,以參數傳入矩形的寬及高,計算矩形面積後將面積值傳回。
def GetArea(width, height):
area = width * height
return area
print(GetArea(5, 4))
def GetArea2(width, height=12): # 可以指定參數的預設值,但有預設值的參數要放在參數最後面
area = width * height
return area
print(GetArea2(6))
print(GetArea2(6,9))
設定不定數目參數的時候,程式會以元組的方式將參數存在設定的參數中
# 多值加法器--不定數參數
def calsum( *para ):
total = 0
for par in para:
total += par
return total
print("2個參數: calsum(4,5)= %3d" % calsum(4,5))
print("3個參數: calsum(4,5,6)= %3d" % calsum(4,5,6))
print("4個參數: calsum(4,5,6,7)= %3d" % calsum(4,5,6,7))
變數依其有效範圍分為:
若有相同名稱的全域變數與區域變數時,在函式內以區域變數優先。
如果要在函式內使用全域變數時,要在函式內以global宣告
#
def sco1():
var1 =1
return var1,var2
def sco2():
global var1
var1 = 1
return var1,var2
var1 = 10
var2 = 20
print(sco1())
print(var1, var2) # 全域變數var1, 沒有改變
print(sco2())
print(var1, var2) # 全域變數var1, 有改變
Python內建了許函式,可直接使用。
# 內建函式
x=-5
y = [8,7,6,5]
print(abs(x)) # 絕對值
print(chr(65)) # 取ASCII碼
print(int(12.34)) #轉換成整數
print(pow(2,3)) #2的3次方
print(round(3.75,1)) # 四捨六入五奇數(5前方奇數進位,偶數不進位)
print(round(3.65,1)) # 四捨六入五奇數(5前方奇數進位,偶數不進位)
print(str(23)) # 數字轉文字
print(sorted(y)) # 由小到大排序
print(sum(y)) # 串列元素的總和
請輸入若干正整數,求最大數、最小數、總和及排序。
# 求值
num = 0
list1 = []
while (num != -1):
num = int(input("輸入正整數(-1結束)= "))
list1.append( num )
list1.pop() # 刪除最後的-1
print("共輸入 %d 個數" % len(list1))
print("最大值= %d" % max(list1))
print("最小值= %d" % min(list1))
print("輸入總和= %d" % sum(list1))
print("排序(由小到大)為",sorted(list1))
print("排序(由大到小)為",sorted(list1,reverse=True))
import random
print(random.randint(1,10)) # 由1到10隨機
import random as r # r是別名
print(r.randint(1,10))
from random import randint # 把函式代入
print(randint(1,10))
from random import randint as rt # 用rt替代randint函數
print(rt(1,10))
from random import randint,randrange # 區域取偶數
print(randrange(2,11,2))
print(randint(1,10))
from random import * #將所有函數都匯入
print(randrange(2,11,2))
print(randint(1,10))
# 亂數模組
import random as r
str1 = "abcdefg"
list1 = ["ab", "cd", "ef"]
# randint(a,b)--指定範圍(a到b)取一整數亂數
for i in range(1,5):
print(r.randint(1,10), end=",")
print()
# randrange(a,b,c)--指定範圍(a到b,遞增c)取一整數亂數
for i in range(1,5):
print(r.randrange(1,10,2), end=",")
print()
# random()--產生0~1的浮點數亂數
print(r.random())
# uniform(a,b)--產生a~b的浮點數亂數
print(r.uniform(3,10))
# 電子骰子
import random as r
while True:
inkey = input("任意鍵丟骰,Enter鍵停止")
if len(inkey) > 0:
num = r.randint(1,6)
print("點數為 %d 點" % num )
else:
print("結束")
break
sample()最重要的是可以取得指定數量且不重複的元素,常應用於樂透開獎
#
import random as r
x = "abcdefg"
y = [1,2,3,4,5,6,7]
# choice()用法-單一隨機取數
for i in range(5):
print(r.choice(x),end=",")
print()
for i in range(5):
print(r.choice(y),end=",")
print()
# sample()用法-多數隨機取數
print(r.sample(x,2)) # 取3個值
print(r.sample(y,3))
from random import sample # sample隨機取數
list1 = [1,2,3,4,5]
print(sample(list1,2))
import random # sample隨機取數,注意差別
list1 = [1,2,3,4,5]
print(random.sample(list1,2)) # 注意差別
大樂透中獎號碼為由1到49,取6個數字+1個特別號,撰寫大樂透中獎號碼,並由小到大顯示。
# 大樂透中獎號碼49取6, 特別號1
import random as r
list1 = r.sample(range(1,50),7)
spec = list1.pop() # 取最後1號作特別號
list1.sort() #串列由小到大排序
print("本期中獎號碼=",end="")
for i in range(6):
if i == 5 : #如果最後1個號碼就跳行
print(str(list1[i]))
else:
print(str(list1[i]),end=", ") #不是最後1號則以「,」分隔中獎號碼
print("特別號=",spec)
# 大樂透取號46取6+1特別號
# 另一解法
from random import sample
list1 = range(1,47)
ltno = sample(list1,7)
print(ltno)
special = ltno.pop()
# 號碼排序
# print("開出順序:=", end=" ")
# for lt in ltno:
# print(lt, end=",")
# print()
# print("大小排序:=", end=" ")
# ltno.sort()
# for lt in ltno:
# print(lt, end=",")
# print()
print(ltno)
print("特別號",special)
常用的時間模組函數:
time.ctime([時間數值])
#
import time
print(time.time()) # 自1970.1.1 零時開始
print(time.ctime())
print(time.ctime(time.time()))
localtime([時間數值]):傳入時間數值來取得時間元組資訊
取得單一項目值的方式有二種:
# 此內容會顯示為程式碼
import time
print(time.localtime())
print(time.localtime(time.time())) # 傳入時間參數, 結果和前方相同
time1 = time.localtime()
print(time1.tm_year) # 物件.名稱
print(time1[0]) # 元組[索引]
設計一個看板,顯示以中華民國年份的現在時間
# 時間看板
import time as t
week = ["一","二","三","四","五","六","日"]
dst = ["無日光節約時間", "有日光節約時間"]
time1 = t.localtime()
#print(time1) #找出物件.名稱用
show = "現在時刻: 中華民國"+ str(int(time1.tm_year)-1911) +"年"
show += str(time1.tm_mon) +"月"
show += str(time1.tm_mday) +"日"
show += str(time1.tm_hour) +"時"
show += str(time1.tm_min)+ "分"
show += str(time1.tm_sec)+ "秒" +"\n"
show += "星期" +week[time1.tm_wday]
print(show)
# 時間看板
import time as t
week = ["一","二","三","四","五","六","日"]
dst = ["無日光節約時間", "有日光節約時間"]
def showtime():
time1 = t.localtime()
#print(time1) #找出物件.名稱用
show = "現在時刻: 中華民國"+ str(int(time1.tm_year)-1911) +"年"
show += str(time1.tm_mon) +"月"
show += str(time1.tm_mday) +"日"
show += str(time1.tm_hour) +"時"
show += str(time1.tm_min)+ "分"
show += str(time1.tm_sec)+ "秒" +"\n"
show += "星期" +week[time1.tm_wday]
print(show)
for i in range(5):
t.sleep(1)
showtime()
Python直譯器當執行程式發生錯誤時,會引發例外(except)並中斷程式執行,這時可以進行例外的處理動作,避免僅中止程式。
try:
程式碼A
except[例外狀況]:
程式碼B
...
else:
程式碼C
finally:
程式碼D
a = 11
b = 5 # 可更改為 0 或 "5" 來觀察
try: # 執行的程式區塊
print(a / b)
except ZeroDivisionError: #處理「指定」例外的程式區塊==>除以0
print("except:指定例外,除數為0")
# 錯誤也可以另名處理
# except Exception as e:
# print(e)
except: # 處理其他所有例外的程式區塊
print("except:其他例外")
else: # 沒有發生例外時的程式區塊
print("else:沒有發生例外")
finally: # 一定會執行的程式區塊
print("finally:一定發生")
os提供取得工作目錄、建立目錄、刪除目錄、刪除檔案、執行作業系統命令等功能。
#
import os
# 取得目前的工作目錄
print(os.getcwd())
# remove()--刪除指定檔案
file1 = "myFile.txt"
if os.path.exists(file1):
os.remove(file1)
else:
print("檔案未建立!")
# mkdir()--建立指定目錄
dir = "myDir"
if not os.path.exists(dir):
os.mkdir(dir)
print(dir+"不存在,剛建立!")
else:
print(dir+ "已存在!")
# rmdir()--移除指定目錄
if os.path.exists(dir):
os.rmdir(dir)
print(dir+ "已移除")
else:
print(dir+ "不存在")
# system()--執行系統指令
import os
cur_path = os.getcwd() # 取得目前路徑
os.system("cls") #清除螢幕
os.system("mkdir dir2") #建立目錄
#os.system("rmdir dir2") #移除目錄
os.path用以處理檔案路徑和名稱
# 在Spyder執行ospath.py程式檔
import os.path
cur_path=os.path.dirname(__file__) # 取得目前目錄路徑
print("現在目錄路徑:"+cur_path)
filename=os.path.abspath("ospath.py")
if os.path.exists(filename):
print("完整路徑名稱:" + filename)
print("檔案大小:" , os.path.getsize(filename))
basename=os.path.basename(filename)
print("最後的檔案或路徑名稱:" + basename)
dirname=os.path.dirname(filename)
print("目前檔案目錄路徑:" + dirname)
print("是否為目錄:",os.path.isdir(filename))
fullpath,fname=os.path.split(filename)
print("目錄路徑:" + fullpath)
print("檔名:" + fname)
Drive,fpath=os.path.splitdrive(filename)
print("磁碟機:" + Drive)
print("路徑名稱:" + fpath)
fullpath = os.path.join(fullpath + "\\" + fname)
print("組合路徑= " + fullpath)