回顧之一:變數 資料型別 流程控制
Last updated: 2021/9/23
https://cdn-images-1.medium.com/max/2600/1*cWW2X0SCMeft-bmYjWcvMA.jpeg
指標:網路教學文件多寡
指標:網路教學文件多寡
指標:網路教學文件/ 程式高手 / 協力廠商
指標:網路教學文件/ 程式高手 / 協力廠商
https://fatemasaifee.files.wordpress.com/2014/08/2-2.png?w=676
程式碼
可執行碼
執行環境
編輯器
編譯器
直譯器
虛擬機器
整合開發環境 (IDE)
IDE較為方便!
整合開發環境:Anaconda
目前最新版本 3.10.6
找X86-64版本
勾選「加入路徑」
4
開啟命令提示字元,輸入python
quit(): 退出python環境
或是執行python內建工具: IDLE
VS Code
❶中文化
開啟VSCode後,前往下列網址,點選Install
https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-zh-hant
❷切換中文語系
照這篇 https://oranwind.org/vs-code-lang/ 可以切換語系
開啟VS Code,點選下列Python模組連結
❶ 開啟專案
檔案總管
❷ 儲存工作區
延伸模組
編輯器中按滑鼠右鍵
終端機: 出現執行結果
# coding: utf-8
name = input('姓名?')
print('妳好,', name)
name = 100
print(name)
發音: Al-go-ri-thm
演算法: 完成一件工作的一系列步驟
發音: Pro-gram
程式: 編程完成的演算法(可執行)
演算法(步驟)
向右移動一格
塗滿空格
向右移動一格
向下移動一格
塗滿空格
有5個程式指令:
上 下 左 右
填滿
程式
右
填滿
右
下
填滿
由星號出發
輸入方式: 鍵盤格式: 文字
Python程式
輸出方式: 螢幕格式: 文字 圖表
變數 = input('自訂提示訊息')
python鍵盤輸入函式: input()
python螢幕輸出函式: print()
print('印出的內容', 變數, '其他內容')
括弧內參數: 1個以上,逗點分隔
寫一個程式做「基本資料調查」:
如何用python輸出文字? 使用print() 函式
如何讓使用者輸入姓名等? 使用input() 函式
# coding: utf-8
name = input('請問貴姓大名?')
print('你好,', name)
y = int(input('請問年紀?'))
print('原來你', y, '歲')
w = float(input('請問體重?'))
print('體重為', w)
重點:
y = int(input('請問年紀?'))
print('原來你', y, '歲')
str1 = input('請問年紀?') # 字串
y = int(str1) # 字串轉整數
print('原來你', y, '歲') # y自動轉字串
name = input('請問貴姓大名?')
# ... 省略
name = '小明' # 重新指定內容
print(name) # 重複使用變數
註解: 程式說明
單行註解: 使用#字號
多行註解: 前後各3個單引號 或 3個雙引號
# 作業一: 在螢幕印出使用者的姓名,年紀,體重
# 作者: 王小明
# 版本與日期: 1.0, 2019/2/2
name = input('請問貴姓大名?')
print('你好,', name)
y = int(input('請問年紀?'))
print('原來你', y, '歲')
w = float(input('請問體重?'))
print('體重為', w)
"""
作業一: 在螢幕印出使用者的姓名,年紀,體重
作者: 王小明
版本與日期: 1.0, 2019/2/2
"""
name = input('請問貴姓大名?')
print('你好,', name)
# .... 略
發音: Va-ri-able
變數: 資料內容(可改變) 的存放空間
發音: Da-ta Type
資料型別: 資料存放空間的類型
x = 5
y = input('請輸入數值')
指定
半徑 = int(input('輸入:')) // 字串轉整數
面積 = 3.14 * 半徑**2; // 平方, 乘法
運算
半徑字串 = input('輸入:') // 字串
半徑數值 = int(半徑字串) // 字串轉整數
面積 = 3.14 * 半徑數值**2; // 平方, 乘法
#轉換函式: int(), float(), str(), chr()
型別轉換
什麼是變數(variable?)
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
zip = 2
woop = "hi"
便條紙有兩類(資料型別):數字(Number)與字串(String)
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
這些便條紙是變數嗎?
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
zip = 2
#如果後續多了這一行,會發生什麼事?
zip = 2 + 3
2+3必須先算出,產生便條紙5
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
zip = 2
zip = 2 + 3
5先算出來
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
zip = 2
zip = 2 + 3
再放入夾鏈袋
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
另外寫一張便條紙5, 不要從夾鏈袋拿出來
便條紙8會取代夾鏈袋內的便條紙
zip = 2 + 3
zip = 3 + zip
print(zip)
便條紙5 ,8 存在記憶體內
變數用於等號右邊的運算式?
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
zip = 2 + 3
bop = "hi"
bop = bop + zip # 錯誤:不同型別
bop = bop + str(zip) # 強制轉換
# bop 會變什麼?
變數相加?
文字與數字相加?
新便條紙"hi5"會取代夾鏈袋內的便條紙
文字與數字相加? 文字串接!
"5"
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
練習: 根據下圖右側便利貼,寫出正確的Python程式
'王小明'
name ➞
記憶體空間
37
y ➞
2.35
w ➞
變數
資料的[標籤]
字串 string: 一串文字
整數 int: 正負整數
浮點數 float: 正負實數
資料型別
文字類
數字類
命名規則
姓名 = '姓名'
Id = 'AA123456'
_score = 100
7eleven = '超商'
M&M = '巧克力'
Bruce Lee = '李小龍'
name = input('請輸入:') # 建立變數
print(name) # 已建立, 故可使用
pi = 3.14 # 建立變數, 設定初值為3.14
area = pi * 3 * 3 # pi已建立, 故可使用
pi
3.14
name
area
28.26
如果從鍵盤輸入hi
# 宣告變數
a = 10 # 整數
b = 3.5 # 浮點數
# 使用四則運算子進行計算
sum_result = a + b # 加法
diff_result = a - b # 減法
product_result = a * b # 乘法
quotient_result = a / b # 除法
# 印出結果
print("a + b =", sum_result)
print("a - b =", diff_result)
print("a * b =", product_result)
print("a / b =", quotient_result)
範例一:如何使用變數、不同的資料型別(整數和浮點數),基本運算子來進行數學運算。
# 宣告變數
a = 10 # 整數
b = 3.5 # 浮點數
# 使用四則運算子進行計算
sum_result = a + b # 加法
diff_result = a - b # 減法
product_result = a * b # 乘法
quotient_result = a / b # 除法
# 使用 f-string 印出結果
print(f"a + b = {sum_result}")
print(f"a - b = {diff_result}")
print(f"a * b = {product_result}")
print(f"a / b = {quotient_result}")
同樣的範例,輸出(print)改用f-string寫法
# 字串變數
first_name = "John"
last_name = "Doe"
# 使用加法運算子串接字串
full_name = first_name + " " + last_name
# 使用 len() 函數計算字串長度
name_length = len(full_name)
# 使用 f-string 印出結果
print(f"Full name: {full_name}")
print(f"Name length: {name_length}")
範例 二:字串的操作。使用變數來儲存字串資料,加法運算子進行字串串接。
# 輸入商品價格和數量
price_per_item = float(input("請輸入商品單價:")) # 轉換輸入為浮點數
quantity = int(input("請輸入購買數量:")) # 轉換輸入為整數
# 計算總金額
total_amount = price_per_item * quantity
# 使用 f-string 輸出結果
print(f"單價: {price_per_item} 元,數量: {quantity} 件")
print(f"總金額為: {total_amount} 元")
範例 三:購物金額計算器。輸入每個商品的價格和數量,最後程式會計算總金額並輸出。
練習
輸入函式是?用法?
輸出函式是?用法?
數值的資料型別有哪些?
計算(運算式):加法運算子?平方和怎寫?
print()與input()
book = "程式設計"
print("書名: %s 價格: %5d" % (book, 350))
print(項目 % (參數列))
1.
2. 字串的format()方法
3. f-string (建議使用)
book = "程式設計"
price = 350
print("書名: {} 價格: {}".format(book, price))
# 書名: 程式設計 價格: 350
print(格式字串.format(參數列))
Python 3.6版以後,增加f-string的輸出方式
book = "程式設計"
price = 350
print(f"書名: {book:5s} 價格: {price:8.2f}")
# 書名: 程式設計 價格: 350.00
f後面接著雙引號"",此為輸出字串
{}內直接放變數或數值
若要設定格式,則加冒號後,直接設定
print(項目1, 項目2...., sep=分隔字元, end=結束字元)
# 項目1 後都可省略
# sep: 列印項目後的區隔字元, 預設值為一個空格(空白字元)
# end: 列印完畢後自動加上的字元,預設為換行(\n)
# sep, end都是另外補上的字元
print("學期成績如下:")
print(1, "程式設計成績:", 80)
print(1, "程式設計成績:", 80, sep="%")
print("小考成績", 60, sep="&", end="")
print("期中成績", 80)
學期成績如下:
1 程式設計成績: 80
1%程式設計成績:%80
小考成績&60期中成績 80
輸出函式
book = "程式設計"
print("書名: %s 價格: %5d" % (book, 350))
參數 | 作用 |
---|---|
%% | 在字串內顯示%號 |
%d | 以整數型別輸出 |
%f | 以浮點數輸出 |
%s | 以字串輸出 |
%e 或 %E | 以科學記號方式輸出 |
print(項目 % (參數列))
項目
運算子
參數列: 變數或數值
輸出函式
book = "程式設計"
print("書名: %10s 價格: %5d" % (book, 350))
# 5d: 整數共佔5位, 不足5位前面補空白, 超過則全數印出
# 10s: 字串共佔10位, 不足前面補空白, 超過則全數印出
price = 56.6
print('價格為 %8.2f元' % price)
# 8.2f:含小數點共8位,小數點後兩位
書名: 程式設計 價格: 350
股價為 56.60元
前有3個空格
前有6個空格
前有2個空格
輸出函式
book = "程式設計"
price = 350
print("書名: {} 價格: {}".format(book, price))
# 書名: 程式設計 價格: 350
print(格式字串.format(參數列))
格式字串
.format()
參數列: 變數或數值
輸出函式
空的{} 依序對應參數列的數值
book = "程式設計"
price = 350
print("書名: {0:5s} 價格: {1:8.2f}".format(book, price))
# print("書名: %s 價格: %5d" % (book, price))
0 是 book的編號
:5s 字串格式,佔5個字元
參數列: 編號從0算起
1 是 price的編號
:8.2f 浮點數,8個字元,2位小數
輸出函式
# 宣告變數
item_name = "Laptop" # 字串
quantity = 3 # 整數
unit_price = 599.99 # 浮點數
# 計算總價
total_price = quantity * unit_price
# 使用 f-string 進行格式化並輸出
# 1. 字串:item_name
# 2. 整數:quantity 格式化為至少兩位數,前面補零
# 3. 浮點數:unit_price 和 total_price 保留兩位小數
print(f"商品: {item_name}")
print(f"數量: {quantity:02d}") # 數量格式化為至少兩位,若不足補零
print(f"單價: ${unit_price:.2f}") # 單價保留兩位小數
print(f"總金額: ${total_price:.2f}") # 總金額保留兩位小數
範例 :使用 f-string 進行參數格式化的範例,涵蓋了整數、浮點數
輸出函式
變數 = input(提示字串) # 提示字串可有可無
執行input(), 暫停等待輸入
輸入,按下Enter後,繼續執行
print() 印出輸入的字串
作用: 從「標準輸入」裝置輸入資料標準輸入: 預設為鍵盤
輸入函式
score = input('輸入數學成績:')
print(score + 10) # 調整分數: 加分10分
# 但 score 為字串,無法與10相加
input() 數入型態為: 字串
score = input('輸入數學成績:')
print(int(score) + 10) # 調整分數: 加分10分
輸入函式
int(): 強制轉型,字串轉整數
score = input('輸入數學成績:')
print(int(score) + 10) # 調整分數: 加分10分
score = int(input('輸入數學成績:')) # 也可輸入後立即轉換
print(score + 10) # 調整分數: 加分10分
問: ❶❷兩者有何差別?
❶
❷
輸入函式
輸入函式
運算式expression
score = input('輸入數學成績:')
print(int(score) + 10)
變數
函式
運算子
變數
函式
運算子
函式
常數
常數
程式的運算
非僅指四則運算,其他如變數管理、邏輯判斷也都屬於運算
運算子
# 範例 2-5-3 攝氏轉華氏
r = float(input('輸入半徑(浮點數)'))
area = 3.14 * r * r
print('面積是 %8.2f' % area)
c = int(input('輸入攝氏溫度(整數)'))
f = c * 1.8 + 32
print('攝氏%3d度,相當於華氏%3d度' % (c,f))
指定運算子
算術運算子
m = int(input('請輸入本金?'))
i = float(input('請輸入年利率(%)?'))
y2 = m * (1+ i/100) ** 2 # 使用次方
print('第二年本利和為 %8.2f'% y2)
y2 = m * (1 + i/100) * (1 + i/100)
使用連乘
次方運算 **
範例問題:金額分攤
算術運算子
程式
執行結果
指定運算子
發音: loop
迴圈: 重複做的動作
發音: Con-di-shun-uls
條件判斷: 在某些情況才會執行的動作
for i in range(1,10,2):
print(i, end=',')
# 印出 2,4,6,8
total = n = 0
while(n < 10): # 條件式: n < 10
n += 1 # 自行改變 n值
total += n
# 加總1~10
for迴圈
while迴圈
if score<60:
print('不及格')
elif score<=80:
print('甲等')
else:
print('超出範圍')
選擇結構
重複結構
循序結構
選擇結構
依序執行
二選一
多選一, 視情況而定
依序逐行執行
重複執行, 視情況而定
重複執行
book = "程式設計"
print(f"書名: {book:10s} 價格: {350:5d}")
price = 56.6
print(f'價格為 {price:8.2f}元')
top = float(input('輸入梯形上底:'))
bottom = float(input('輸入梯形下底:'))
height = float(input('輸入梯形高度:'))
area = (top + bottom) * height / 2 # 先乘除後加減
print(f'面積是: {area:10.1f}')
一行一行依序執行
一行一行依序執行
選擇結構分成:
if(條件判斷): # 注意結尾的冒號
程式碼1 # 需縮排
程式碼2 # 同樣縮排距離:同一區塊
....
後續程式碼
if(條件判斷): # 注意結尾的冒號
程式區塊1 # 需縮排,區塊可以不止一行
else:
程式區塊2 # 需縮排,區塊可以不止一行
後續程式碼
後續章節
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
變數名稱
「基本資料型別」: int、float、str、布林值
goToMovie
True
條件成立
條件不成立
條件(是非題):點數小於7嗎?
point = int(input('輸入點數?'))
if point<7:
print('小於7點')
else:
print('大於等於7點')
如有需要,也可以用變數儲存
goToMovie
Python使用True、False代表成立、不成立(布林值)
True
比較運算子
邏輯運算子
(6+9 == 2+13) # 是否相等? True
not(5 > 3) # 非 5>3? False
條件運算經常使用下列運算子
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
True
如有運算式,要先算出結果
False
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
True
True
False
False
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
參考來源: code.org CSP '21-22 Unit 4 - Variables, Conditionals, and Functions
False
成立的清況
條件判斷
一種流程
總分 = 0
英文分數 = int(input('輸入英文分數:'))
if(英文分數>=60):
print(f"英文科:{英文分數:4d}分,等第:{'及格':>10}") # >10置右對齊佔10格
總分 += 英文分數
# 其他程式碼...
成立的清況
不成立的清況
二種流程
條件判斷
money_str = input('銀行餘額:') # 輸入字串
money = int(money_str) # 轉成整數
gotomovie = money >= 1000 # True or False
if gotomovie:
print(f"銀行餘額{money:6d}大於等於1000,可以去看電影!")
else:
print(f"銀行餘額{money:6d},不足1000,不能看電影!")
條件判斷
成立的清況
繼續縮小條件判斷
縮小條件成立的清況
縮小條件不成立的清況
三種以上流程
成績 = int(input('輸入成績:'))
等第 = "" # 預設等第
if 成績>=80:
等第="A"
elif 成績>=60:
等第="B"
else:
等第="F"
print(f"成績:{成績:5d},等第:{等第:>3}")
: 加上 「縮排」代表一組「程式區塊」
if(分數>=60):
grade = "及格"
總分 += 分數
程式區塊
冒號
縮排
下一行程式
grade = "不及格"
if(英文>=60):
grade = "及格"
print("英文科: %d分,等第:%s" % (英文, grade))
print("英文科: %d分,等第:%s" % (英文, grade))
總分 += 英文
程式區塊範例
程式區塊
if(條件式):
程式區塊1
else:
程式區塊2
後續程式碼
雙向選擇: if-else語法
# 輸入購買金額
purchase_amount = float(input("請輸入購買金額:"))
# 設定免運門檻
free_shipping_threshold = 1000
# 判斷是否達到免運條件
if purchase_amount >= free_shipping_threshold:
print(f"您的消費金額是 {purchase_amount:.2f} 元,符合免運條件!")
else:
print(f"您的消費金額是 {purchase_amount:.2f} 元,未達免運門檻,需支付運費。")
範例:判斷是否符合購物免運條件
...
if(字串變數=="比對內容"):
...
字串比對提示
當輸入正確的通關密碼"aB#12345"時,印出 "歡迎光臨!"
否則印出"密碼錯誤!"
注意: 大小寫字母不同
# 輸入年收入
income = float(input("請輸入您的年收入:"))
# 根據收入區間計算稅率
if income <= 20000:
tax_rate = 0.05 # 5% 稅率
elif income <= 50000:
tax_rate = 0.1 # 10% 稅率
elif income <= 100000:
tax_rate = 0.2 # 20% 稅率
else:
tax_rate = 0.3 # 30% 稅率
# 計算應繳稅額
tax = income * tax_rate
# 使用 f-string 輸出結果
print(f"年收入為 {income:.2f} 元,稅率 {tax_rate*100}%,應繳稅額 {tax:.2f} 元。")
多向選擇
score = int(input('輸入成績:'))
if score<60:
print('不及格')
elif score<=80:
print('甲等')
elif score<=100:
print('優等')
else:
print('超出範圍')
# 輸入月份
month = int(input("請輸入月份(1-12):"))
# 根據月份判斷季節
if month in [12, 1, 2]:
season = "冬季"
elif month in [3, 4, 5]:
season = "春季"
elif month in [6, 7, 8]:
season = "夏季"
elif month in [9, 10, 11]:
season = "秋季"
else:
season = "無效的月份"
# 使用 f-string 輸出結果
print(f"您輸入的月份是 {month} 月,所屬季節是 {season}")
範例:判斷季節
麥噹噹打工每週領一次薪資,工作基本時薪是183元,其他規則如下:
請輸入工作時數後,計算出週薪為多少。