【ChaoCode】 Swift 基礎篇 8:Tuple 作業

Tuple 裡面可以放什麼資料類型? 任何資料類型 關鍵字「typealias」是做什麼的? 替已經存在的類型取別名 在 Swift 中,通常看到底線代表什麼? 代表省略,像是在呼叫 Function 時省略參數名稱或是 Tuple 拆開時省略某些值 // 【ChaoCode】 Swift 基礎篇 8:Tuple 實作作業 import Foundation // 1. 下面已經建立兩位學生的名字和考試成績變數。請建立一個適合學生的 Tuple 資料類型並設定別名,接著把以下 Code 改成用你建立的 Tuple 資料類型的方式建立 學生A 和 學生B 各一個變數,然後檢查誰的考試成績比較好,並印出他的平均分數。 typealias StuInfo = (name: String, 數學分數: Decimal,英文分數 : Decimal,歷史分數 : Decimal,國文分數 : Decimal) let 學生A:StuInfo=("小鴨",93,68,77,72) let 學生B :StuInfo=("貝貝",84,89,59,72) let studentATotal = 學生A.數學分數 + 學生A.英文分數 + 學生A.歷史分數 + 學生A.國文分數 let studentBTotal = 學生B.數學分數 + 學生B.英文分數 + 學生B.歷史分數 + 學生B.國文分數 let (winner, average) = studentATotal > studentBTotal ? (學生A.name, studentATotal / 4) : (學生B.name, studentBTotal / 4) print("\(winner) 的平均分數較高,平均分數為 \(average) 分") // 2. 請跟著步驟印出今天花了多少錢和今天的發票有沒有中獎。 // ⚠️ 和上次的作業一樣,請不用在意我提供的 Function 中語法是怎麼寫的,只要會呼叫和使用回傳值就可以了。 // 1️⃣ 請閱讀定義的 Tuple 別名和 Function 的參數和回傳值 typealias 發票 = (號碼: String, 消費金額: Int) func 結帳(_ 商品價格: Int...) -> 發票 { let totalCost = 商品價格.reduce(0) { $0 + $1 } return 發票("RE" + Int.random(in: 100...999).description, totalCost) } func 檢查是否中獎(發票: 發票...) -> Bool { let win = 發票.first { $0.號碼.hasSuffix("8") } return !(win == nil) } // 2️⃣ 以下是今天的三筆花費,請印出今天的總花費。 let 早餐發票 = 結帳(59) let 午餐發票 = 結帳(129, 35, 50) let 晚餐發票 = 結帳(215, 90) let 總花費 = 早餐發票.消費金額 + 午餐發票.消費金額 + 晚餐發票.消費金額 print("今天吃飯總共花了 \(總花費)元") // 3️⃣ 請檢查今天的發票是否有中獎,並印出結果。 let 有中獎 = 檢查是否中獎(發票: 早餐發票, 午餐發票, 晚餐發票) print(有中獎 ? "發票中獎了!美好的一天" : "明天的發票會更好")

Jan 20, 2025 - 07:36
【ChaoCode】 Swift 基礎篇 8:Tuple 作業

Tuple 裡面可以放什麼資料類型?

任何資料類型
關鍵字「typealias」是做什麼的?
替已經存在的類型取別名
在 Swift 中,通常看到底線代表什麼?
代表省略,像是在呼叫 Function 時省略參數名稱或是 Tuple 拆開時省略某些值

// 【ChaoCode】 Swift 基礎篇 8:Tuple 實作作業
import Foundation

// 1. 下面已經建立兩位學生的名字和考試成績變數。請建立一個適合學生的 Tuple 資料類型並設定別名,接著把以下 Code 改成用你建立的 Tuple 資料類型的方式建立 學生A 和 學生B 各一個變數,然後檢查誰的考試成績比較好,並印出他的平均分數。
typealias StuInfo = (name: String, 數學分數: Decimal,英文分數 : Decimal,歷史分數 : Decimal,國文分數 : Decimal)

let 學生A:StuInfo=("小鴨",93,68,77,72)
let 學生B :StuInfo=("貝貝",84,89,59,72)


let studentATotal = 學生A.數學分數 + 學生A.英文分數 + 學生A.歷史分數 + 學生A.國文分數
let studentBTotal = 學生B.數學分數 + 學生B.英文分數 + 學生B.歷史分數 + 學生B.國文分數
let (winner, average) = studentATotal > studentBTotal ? (學生A.name, studentATotal / 4) : (學生B.name, studentBTotal / 4)
print("\(winner) 的平均分數較高,平均分數為 \(average)  分")
// 2. 請跟著步驟印出今天花了多少錢和今天的發票有沒有中獎。
// ⚠️ 和上次的作業一樣,請不用在意我提供的 Function 中語法是怎麼寫的,只要會呼叫和使用回傳值就可以了。

// 1️⃣ 請閱讀定義的 Tuple 別名和 Function 的參數和回傳值

typealias 發票 = (號碼: String, 消費金額: Int)

func 結帳(_ 商品價格: Int...) -> 發票
{
    let totalCost = 商品價格.reduce(0) { $0 + $1 }
    return 發票("RE" + Int.random(in: 100...999).description,
              totalCost)
}

func 檢查是否中獎(發票: 發票...) -> Bool
{
    let win = 發票.first { $0.號碼.hasSuffix("8") }
    return !(win == nil)
}





// 2️⃣ 以下是今天的三筆花費,請印出今天的總花費。
let 早餐發票 = 結帳(59)
let 午餐發票 = 結帳(129, 35, 50)
let 晚餐發票 = 結帳(215, 90)
let 總花費 = 早餐發票.消費金額 + 午餐發票.消費金額 + 晚餐發票.消費金額
print("今天吃飯總共花了 \(總花費)元")

// 3️⃣ 請檢查今天的發票是否有中獎,並印出結果。
let 有中獎 = 檢查是否中獎(發票: 早餐發票, 午餐發票, 晚餐發票)
print(有中獎 ? "發票中獎了!美好的一天" : "明天的發票會更好")