一起玩Python程式:新手寫程式也可以這麼簡單!

Week 03: 資料型態與變數 - 掌握變數的藝術!

張傑帆

National Taiwan University

資料型態與變數 - 掌握變數的藝術!

目錄

Alt1

🎯 學習目標

今天我們要掌握Python變數的藝術!

🔧 技能解鎖清單:

  • 資料型態識別 - 數字、文字、布林值 🔢📝✅
  • 變數操作技巧 - 讓程式記住重要資訊 💾
  • 數學運算精通 - 計算機功能升級 ➕➖✖️➗
  • 字串格式化 - 讓文字變得更美觀 ✨
  • 溫度轉換器 - 實用工具創作 🌡️
  • 圖形介面設計 - Tkinter入門體驗 🖼️

準備好成為變數大師了嗎?

Let's code! 🐍🎨

什麼是資料型態?🤔

生活中的例子

想像你的大腦就像一個超級整理箱:

  • 📱 手機號碼 → 數字 (int)
  • 💰 零用錢 → 小數 (float)
  • 📝 姓名 → 文字 (str)
  • ☀️ 今天有太陽嗎? → 是/否 (bool)

Python的四大基本型態

age = 18           # 整數 (int)
height = 165.5     # 浮點數 (float)
name = "小明"      # 字串 (str)
is_student = True  # 布林值 (bool)

Python會自動判斷資料型態,超聰明!🧠

整數 (int) - 數字世界的基礎 🔢

基本使用

score = 85
age = 16
year = 2024

print("我的分數是:", score)
print("我今年", age, "歲")
print("現在是", year, "年")

浮點數 (float) - 精確的小數世界 🎯

基本使用

height = 165.7
weight = 55.2
price = 99.9

print(f"身高: {height} 公分")
print(f"體重: {weight} 公斤")  
print(f"價格: ${price}")

溫度範例

celsius = 25.5
print(f"今天溫度是 {celsius}°C")

# 小數運算
total = 10.5 + 20.3
print(f"總和: {total}")

💡 小提醒

浮點數運算可能有微小誤差,這是二進位的特性!

二進位的誤差

# 二進位浮點數的精度問題示範
print("二進位浮點數的精度問題示範")
print("=" * 60)
print(f"{'原始值':<10} {'實際儲存值':<25} {'四捨五入':<15}")
print("-" * 60)

for i in range(1, 10):
    original = i / 10  # 0.1, 0.2, 0.3, ..., 0.9
    actual = f"{original:.50f}"  # 顯示到小數點後16位
    rounded_diff = round(original) 
    print(f"{original:<10} {actual:<25} {rounded_diff:.16f}")
print()
for i in range(5, 50, 10):
    original = i / 10  # 0.1, 0.2, 0.3, ..., 0.9
    actual = f"{original:.50f}"  # 顯示到小數點後16位
    rounded_diff = round(original)     
    print(f"{original:<10} {actual:<25} {rounded_diff:.16f}")

print("\n💡 觀察重點:")
print("- 0.1、0.2、0.3 等看似簡單的小數")
print("- 在二進位系統中無法精確表示")
print("- 會產生微小的誤差")
print("- 這就是為什麼 0.1 + 0.2 ≠ 0.3 的原因!")

# 經典範例
print(f"\n經典例子:")
print(f"0.1 + 0.2 = {0.1 + 0.2}")
print(f"0.1 + 0.2 == 0.3 ? {0.1 + 0.2 == 0.3}")
print(f"正確比較方式:abs(0.1 + 0.2 - 0.3) < 1e-10 ? {abs(0.1 + 0.2 - 0.3) < 1e-10}")

🔬 為什麼會這樣?

  • 十進位二進位 轉換時,某些小數無法精確表示
  • 就像 1/3 在十進位中是 0.333... 無限循環
  • 0.1 在二進位中也是無限循環:0.0001100110011...

字串 (str) - 文字的魔法世界 ✨

建立字串的方法

name1 = "張三"          # 雙引號
name2 = '李四'          # 單引號  
message = """這是
多行字串"""             # 三引號

print(name1)
print(name2)
print(message)

字串基本操作

first_name = "小"
last_name = "明"
full_name = first_name + last_name  # 字串相加
print(full_name)  # 輸出: 小明

greeting = "哈囉" * 3  # 字串重複
print(greeting)  # 輸出: 哈囉哈囉哈囉

字串格式化 - 讓輸出更美觀 💅

三種格式化方法

方法1: f-string (推薦!)

name = "小美"
age = 17
print(f"我是{name},今年{age}歲")

方法2: .format()

print("我是{},今年{}歲".format(name, age))

方法3: % 格式化

print("我是%s,今年%d歲" % (name, age))

布林值 (bool) - 是非題的世界 ✅❌

基本概念

is_sunny = True      # 今天有太陽
is_raining = False   # 今天沒下雨
has_homework = True  # 有作業要寫

print("今天天氣好嗎?", is_sunny)
print("需要帶雨傘嗎?", is_raining)

比較運算產生布林值

age = 18
print("是成年人嗎?", age >= 18)  # True
print("還是學生嗎?", age < 25)   # True

score = 85
print("及格了嗎?", score >= 60)  # True

變數命名規則

程式設計師的藝術 🎨

🏷️ 變數命名的黃金法則

必須遵守的規則 (法律):

  • ✅ 只能包含字母、數字、底線 _
  • ✅ 不能以數字開頭
  • ✅ 不能使用Python關鍵字 (if, for, class 等)
  • ✅ 大小寫敏感 (Namename)

建議遵循的慣例 (禮貌):

  • 📝 使用有意義的名稱
  • 📝 變數用小寫 + 底線: student_name
  • 📝 常數用全大寫: MAX_SCORE = 100
  • 📝 布林值用 is_has_ 開頭: is_pass
  • 📝 避免使用 l, O, I (容易混淆)

✅ 好的命名方式

student_name = "小明"      # 使用底線分隔(snake_case)
total_score = 95           # 駝峰式命名(camelCase)
PI = 3.14159               # 常數用大寫
is_pass = True             # 布林值用is_開頭

❌ 避免的命名方式

1abc = "錯誤"            # 不能數字開頭
class = "錯誤"           # 不能使用關鍵字
a = "不明確"             # 名稱要有意義

💡 命名小技巧

  • 見名知意:temperaturet
  • 一致性:都用英文或都用中文拼音
  • 有意義:student_countnum 清楚

數學運算符號實戰 ➕➖✖️➗

基本運算

a = 10
b = 3

print("加法:", a + b)      # 13
print("減法:", a - b)      # 7  
print("乘法:", a * b)      # 30
print("除法:", a / b)      # 3.333...
print("整除:", a // b)     # 3
print("餘數:", a % b)      # 1
print("次方:", a ** b)     # 1000

範例

# 計算圓形面積
radius = 5
pi = 3.14159
area = pi * radius ** 2
print(f"半徑{radius}的圓形面積: {area}")

溫度轉換計算器 🌡️

攝氏轉華氏

def celsius_to_fahrenheit(celsius):
    fahrenheit = celsius * 9/5 + 32
    return fahrenheit

# 使用範例
temp_c = 25
temp_f = celsius_to_fahrenheit(temp_c)
print(f"{temp_c}°C = {temp_f}°F")

華氏轉攝氏

def fahrenheit_to_celsius(fahrenheit):
    celsius = (fahrenheit - 32) * 5/9
    return celsius

# 使用範例  
temp_f = 77
temp_c = fahrenheit_to_celsius(temp_f)
print(f"{temp_f}°F = {temp_c:.1f}°C")

互動式溫度轉換器 🔄

功能選擇

print("=== 溫度轉換計算器 ===")
print("1. 攝氏轉華氏")
print("2. 華氏轉攝氏")

choice = input("請選擇功能 (1/2): ")

if choice == "1":
    celsius = float(input("請輸入攝氏溫度: "))
    fahrenheit = celsius * 9/5 + 32
    print(f"{celsius}°C = {fahrenheit:.1f}°F")
    
elif choice == "2":
    fahrenheit = float(input("請輸入華氏溫度: "))
    celsius = (fahrenheit - 32) * 5/9
    print(f"{fahrenheit}°F = {celsius:.1f}°C")

小練習時間 📝

練習1: 個人資料卡

建立一個程式,輸入並顯示個人資料:

# 收集資料
name = input("請輸入姓名: ")
age = int(input("請輸入年齡: "))
height = float(input("請輸入身高(cm): "))
is_student = input("是學生嗎?(yes/no): ") == "yes"

# 美化輸出
print("=" * 30)
print(f"姓名: {name}")
print(f"年齡: {age} 歲")
print(f"身高: {height} 公分")
print(f"學生身份: {'是' if is_student else '否'}")
print("=" * 30)

BMI判斷標準表

BMI範圍 健康狀態 建議
< 18.5 體重過輕 建議增加營養攝取
18.5 - 23.9 正常範圍 維持健康生活習慣
24.0 - 26.9 過重 建議控制飲食與運動
≥ 27.0 肥胖 建議諮詢專業醫師

練習2: BMI計算器

print("=== BMI 健康計算器 ===")

# 輸入資料
weight = float(input("請輸入體重(kg): "))
height_cm = float(input("請輸入身高(cm): "))

# 計算BMI
height_m = height_cm / 100  # 轉換為公尺
bmi = weight / (height_m ** 2)

# 判斷健康狀態
if bmi < 18.5:
    status = "體重過輕"
elif bmi < 24:
    status = "正常範圍"  
# ...請試著完成

print(f"\n您的BMI值: {bmi:.1f}")
print(f"健康狀態: {status}")

進階:使用者友善的溫度轉換器 🎯 加入錯誤處理與迴圈

while True:
    try:
        print("\n=== 智慧溫度轉換器 ===")
        print("1. 攝氏 → 華氏")
        print("2. 華氏 → 攝氏") 
        print("3. 離開程式")
        
        choice = input("\n請選擇功能 (1-3): ")
        
        if choice == "3":
            print("謝謝使用!再見👋")
            break
            
        elif choice in ["1", "2"]:
            temp = float(input("請輸入溫度: "))
            
            if choice == "1":
                result = temp * 9/5 + 32
                print(f"🌡 {temp}°C = {result:.1f}°F")
            else:
                result = (temp - 32) * 5/9
                print(f"🌡 {temp}°F = {result:.1f}°C")
                
    except ValueError:
        print("❌ 請輸入有效的數字!")

Tkinter圖形介面入門 🖼️ 簡單的GUI溫度轉換器

import tkinter as tk
from tkinter import ttk

class TemperatureConverter:
    def __init__(self, root):
        self.root = root
        self.root.title("溫度轉換器")
        self.root.geometry("300x200")
        
        # 輸入框
        ttk.Label(root, text="溫度:").pack(pady=5)
        self.temp_entry = ttk.Entry(root)
        self.temp_entry.pack(pady=5)
        
        # 按鈕
        ttk.Button(root, text="攝氏→華氏", 
                  command=self.c_to_f).pack(pady=5)
        ttk.Button(root, text="華氏→攝氏", 
                  command=self.f_to_c).pack(pady=5)
        
        # 結果顯示
        self.result_label = ttk.Label(root, text="結果將顯示在這裡")
        self.result_label.pack(pady=10)

Tkinter轉換器完整版 ✨

    def c_to_f(self):
        try:
            celsius = float(self.temp_entry.get())
            fahrenheit = celsius * 9/5 + 32
            self.result_label.config(
                text=f"{celsius}°C = {fahrenheit:.1f}°F"
            )
        except ValueError:
            self.result_label.config(text="請輸入有效數字!")
    
    def f_to_c(self):
        try:
            fahrenheit = float(self.temp_entry.get())
            celsius = (fahrenheit - 32) * 5/9
            self.result_label.config(
                text=f"{fahrenheit}°F = {celsius:.1f}°C"
            )
        except ValueError:
            self.result_label.config(text="請輸入有效數字!")

# 執行程式
if __name__ == "__main__":
    root = tk.Tk()
    app = TemperatureConverter(root)
    root.mainloop()

本週總結 🎉

🏆 今天我們學會了:

  • ✅ 四大資料型態: int, float, str, bool
  • ✅ 變數命名藝術: 清楚、有意義、遵循規則
  • ✅ 數學運算精通: 七種運算符號的使用
  • ✅ 字串格式化: f-string讓輸出更美觀
  • ✅ 溫度轉換器: 從基礎到GUI的完整實作
  • ✅ 運算思維: 抽象化、模式識別、演算法設計

🎯 下週預告

下週我們將學習條件判斷與迴圈,讓程式變得更聰明,能做決定和重複工作!

準備好迎接更多挑戰了嗎?🚀

作業:個人化資料處理器 📋

作業要求:

🎯 三選一作業

  • 任選其一完成即可,選哪個不影響分數

📝 選項一:基礎練習 (適合初學者)

個人資料整理器

  • 使用 input() 輸入與顯示個人資料:
    • 姓名、年齡、身高、體重
  • 計算並顯示BMI值
  • 使用f-string美化輸出格式

🔧 選項二:進階應用 (有點挑戰性)

智慧生活助手

  • 整合多種功能:
    • 溫度轉換
    • BMI計算
    • 年齡計算 (輸入出生年份)
  • 加入選單系統讓使用者選擇功能 (if)
  • 包含錯誤處理機制 (try-except)
  • 能重複使用直到用戶選擇退出 (while)

🚀 選項三:創意發揮 (自由度高)

個人化專案

  • 主題:運用本週學到的資料型態和變數概念
  • 可能方向:學習進度追踪器、個人理財計算機、運動數據分析器
  • 必須包含:四種資料型態、數學運算、字串格式化
  • 鼓勵加入GUI介面或創新功能

-----------------------------------------

圖片放大特效

table樣式

![Alt1](image-1.png)

--- ### 小練習 📝 試著建立以下變數: - 你的年齡 - 你最喜歡的數字 - 今年是西元幾年 ```python my_age = ? # 填入你的年齡 lucky_number = ? # 填入你的幸運數字 current_year = ? # 填入今年年份 ```

### ✨ 十進位 0.1 在二進位的表示 - 讓我們看看為什麼 0.1 在二進位中會變成無限循環: - **十進位 0.1 = 1/10** - 要將 1/10 轉換成二進位,我們使用乘2取整法: --- ``` 0.1 × 2 = 0.2 → 取整數部分 0 0.2 × 2 = 0.4 → 取整數部分 0 0.4 × 2 = 0.8 → 取整數部分 0 0.8 × 2 = 1.6 → 取整數部分 1 0.6 × 2 = 1.2 → 取整數部分 1 0.2 × 2 = 0.4 → 取整數部分 0 ← 回到第二步! 0.4 × 2 = 0.8 → 取整數部分 0 0.8 × 2 = 1.6 → 取整數部分 1 ... 無限循環 ``` **結果**: 0.1(十進位) = 0.000110011001100...(二進位) ### 🔄 循環模式 - 二進位小數部分:**0011** 不斷重複 - 就像十進位的 1/3 = 0.333... 一樣 - 電腦只能儲存有限位數,必須截斷或四捨五入 - 這就造成了精度誤差!

--- ### 小練習 📝 使用f-string製作自我介紹!

## 小練習時間 📝

```python # BMI分類函式 def classify_bmi(bmi): if bmi < 18.5: return "體重過輕", "建議增加營養攝取" elif bmi < 24: return "正常範圍", "維持健康生活習慣" elif bmi < 27: return "過重", "建議控制飲食與運動" else: return "肥胖", "建議諮詢專業醫師" ```

elif bmi < 27: status = "過重" else: status = "肥胖"

--- ## 運算思維實踐 🧠 ### 🔍 抽象化 (Abstraction) - **變數概念**: 把複雜資料簡化成容器 - **型態分類**: 將現實世界分類成數字、文字、是非 - **函式封裝**: 把溫度轉換邏輯包裝成可重用函式 ### 🔎 模式識別 (Pattern Recognition) - **資料型態特性**: int整數、float小數、str文字、bool是非 - **命名規律**: snake_case、camelCase、CONSTANTS - **運算規則**: 數學運算、字串操作、比較運算 ### 🎯 演算法思維 (Algorithm Design) - **輸入→處理→輸出**: 收集資料→運算→顯示結果 - **條件判斷**: 根據選擇執行不同轉換 - **錯誤處理**: 預防無效輸入的問題

- 範例程式架構已在課堂中完整示範

**提交內容**:程式碼檔案 + 執行結果截圖 + 簡短心得 (100字內)

**提交格式**: `.py`檔案 + 執行截圖 + 心得分享