temp = a
a = b
b = temp
a, b = b, a
這種寫法的原理是:
Python 會先把右邊的值打包成一個元組 (b, a)
然後將該元組解包並賦值給左邊的變數 a 和 b
你可以試試看這個挑戰:
# 將三個變數循環交換
a, b, c = 1, 2, 3
a, b, c = c, a, b
print(a, b, c) # 預計輸出?
你覺得結果會是什麼? 😊
a, b, c = eval(input("input: ")) 確實可以讓你一次輸入 3 個變數值,不過這種方法有一些潛在的風險,因為 eval() 會執行輸入的內容,可能導致安全問題。
比較安全的做法是使用 split() 和 map():
# 輸入 3 個值並賦值給 a, b, c
a, b, c = map(int, input("input: ").split())
# 測試輸出
print(a, b, c)
input("input: ") 讓使用者輸入字串
split() 會將輸入的字串依空格分割成列表
map(int, ...) 將每個輸入轉換成 int 型別
這樣就可以安全地將 3 個數字一次賦值給 a, b, c
input: 10 20 30
10 20 30
eval() 會直接執行任何輸入的代碼,例如:
a, b, c = eval(input("input: "))
# 如果用戶輸入 __import__('os').system('rm -rf /'),就可能刪除系統檔案!
使用 eval() 處理未經驗證的用戶輸入是 危險的,所以盡量避免在輸入處理中使用它。
使用 split() 和 map() 是更安全的選擇!😊
split() 和 map() 是 Python 中處理輸入數據時非常有用的工具。以下是一些常見範例,說明如何使用這兩個函數來處理不同情況的輸入。
# 一次輸入 3 個整數
a, b, c = map(int, input("輸入 3 個整數: ").split())
print(a, b, c)
輸入 3 個整數: 10 20 30
10 20 30
# 一次輸入 3 個浮點數
x, y, z = map(float, input("輸入 3 個浮點數: ").split())
print(x, y, z)
輸入 3 個浮點數: 1.5 2.3 3.9
1.5 2.3 3.9
# 一次輸入 3 個字串
name1, name2, name3 = input("輸入 3 個名字: ").split()
print(name1, name2, name3)
輸入 3 個名字: Tom Jerry Spike
Tom Jerry Spike
# 輸入不確定數量的整數,存入列表
numbers = list(map(int, input("輸入多個整數: ").split()))
print(numbers)
輸入多個整數: 5 12 45 89 100
[5, 12, 45, 89, 100]
# 自訂分隔符號(例如用逗號分隔)
a, b, c = map(int, input("請輸入 3 個整數(用逗號分隔): ").split(','))
print(a, b, c)
請輸入 3 個整數(用逗號分隔): 5,10,15
5 10 15
split():將字串轉換成列表,預設以 空格 作為分隔符,也可以指定其他符號。
map(func, iterable):對 iterable 中的每個元素應用 func(如 int 或 float),返回一個 map 物件。
試試看這個練習:
# 輸入多個成績(浮點數),計算平均值
scores = list(map(float, input("輸入多個成績: ").split()))
average = sum(scores) / len(scores)
print(f"平均成績: {average:.2f}")
✅ 你可以試試看,然後看看結果是什麼!
使用了Try:execpt:跟map,.split()
輸入時全部都當字串,看判斷運算符號,再將str轉換int後運算
try:
a,b,c=map(str,input(" a op c ").split())
match b:
case "+":
print(a,"+",c,'=',int(a)+int(c))
case "-":
print(a,"-",c,'=',int(a)-int(c))
case "*":
print(a,"*",c,'=',int(a)*int(c))
case "/":
print(a,"/",c,'=',int(a)/int(c))
case _:
print("op Error")
except:
print("error")