目錄

格式化

%格式化(傳統方法)

format()方法(Python 2.6+)

f-string(Python 3.6+ 推薦)

簡單數據類型轉換

顯式類型轉換

隱式類型轉換

進制轉換

二進制轉十進制

十進制轉二進制

二進制轉八進制

八進制轉二進制

二進制轉十六進制

十六進制到二進制

八進制到十六進制

十六進制到八進制

不同進製表示

進制轉換函數

格式化輸出不同進制

運算符

算術運算符

比較運算符

邏輯運算符

位運算符

基礎位運算符

1. 按位與(AND) - &

2. 按位或(OR) - |

3. 按位異或(XOR) - ^

4. 按位取反(NOT) - ~

5. 左移(Left Shift) - <<

6. 右移(Right Shift) - >>

實際應用場景

實戰演示

實戰演示1:學生成績單生成器

實戰演示2:進制轉換計算器

實戰演示3:數學運算演示

實戰演示4:位運算實際應用

實戰演示5:綜合應用 - 簡單計算器

每日一題

總結


格式化

最後一個常見的問題是如何輸出格式化的字符串。我們經常會輸出類似'親愛的xxx你好!你xx月的話費是xx,餘額是xx'之類的字符串,而xxx的內容都是根據變量變化的,所以,需要一種簡便的格式化字符串的方式。

%格式化(傳統方法)

在Python中,採用的格式化方式和C語言是一致的,用%實現,舉例如下:

>>> 'Hello, %s' % 'world'  # 一個佔位符可以不寫括號
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'

你可能猜到了,%運算符就是用來格式化字符串的。在字符串內部,%s表示用字符串替換,%d表示用整數替換,有幾個%?佔位符,後面就跟幾個變量或者值,順序要對應好。如果只有一個%?,括號可以省略。

常見的佔位符有:

佔位符

替換內容

%d

整數

%f

浮點數

%s

字符串

%x

十六進制整數

# 基本用法
name = "張三"
age = 25
print("我叫%s,今年%d歲" % (name, age))

# 常用格式符
# %s - 字符串
# %d - 十進制整數
# %f - 浮點數
# %x - 十六進制數

# 示例
price = 15.8
quantity = 3
total = price * quantity
print("單價:%.2f元,數量:%d個,總計:%.2f元" % (price, quantity, total))

其中,格式化整數和浮點數還可以指定是否補0和整數與小數的位數:

# 第一個%2d表示佔2個位置,如果只有一個數字就補空格
# 第二個%02d表示佔2個位置,如果只有一個數字就補0
print('%2d-%02d' % (3, 1))  
# 表示保留2位小數
print('%.2f' % 3.1415926)  
"""
輸出結果:
 3-01
3.14
"""
# 注意:第一個結果前面有控格

如果你不太確定應該用什麼,%s永遠起作用,它會把任何數據類型轉換為字符串:

>>> 'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'

有些時候,字符串裏面的%是一個普通字符怎麼辦?這個時候就需要轉義,用%%來表示一個%

>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'

注意:這裏不要使用\符號進行轉義

format()方法(Python 2.6+)

另一種格式化字符串的方法是使用字符串的format()方法,它會用傳入的參數依次替換字符串內的佔位符{0}{1}……,不過這種方式寫起來比%要麻煩得多:

>>> 'Hello, {0}, 成績提升了 {1:.1f}%'.format('小明', 17.125)
'Hello, 小明, 成績提升了 17.1%'
# 基本用法
name = "李四"
age = 30
print("我叫{},今年{}歲".format(name, age))

# 位置參數
print("{0}喜歡{1},{1}也喜歡{0}".format("小明", "小紅"))

# 關鍵字參數
print("姓名:{name},年齡:{age},城市:{city}".format(
    name="王五", age=28, city="北京"))

# 數字格式化
pi = 3.1415926
print("圓周率:{:.2f}".format(pi))           # 保留2位小數
print("數字:{:06d}".format(42))            # 寬度6,不足補0

f-string(Python 3.6+ 推薦)

最後一種格式化字符串的方法是使用以f開頭的字符串,稱之為f-string,它和普通字符串不同之處在於,字符串如果包含{xxx},就會以對應的變量替換:

>>> r = 2.5
>>> s = 3.14 * r ** 2
>>> print(f'The area of a circle with radius {r} is {s:.2f}')
The area of a circle with radius 2.5 is 19.62

上述代碼中,{r}被變量r的值替換,{s:.2f}被變量s的值替換,並且:後面的.2f指定了格式化參數(即保留兩位小數),因此,{s:.2f}的替換結果是19.62

# 基本用法
name = "趙六"
age = 35
print(f"我叫{name},今年{age}歲")

# 表達式計算
a = 10
b = 20
print(f"{a} + {b} = {a + b}")

# 數字格式化
price = 99.99
count = 5
print(f"單價:{price:.2f}元")
print(f"總計:{price * count:.2f}元")

簡單數據類型轉換

數據類型轉換是將一個數據類型轉換為另一個數據類型的過程。

顯式類型轉換

函數

作用

int()

將數字轉換為整數

str()

將數字轉換為字符串

float()

將數字轉換為浮點數

bool()

將原類型轉換為布爾型

# 字符串轉數字
str_num = "123"
int_num = int(str_num)        # 轉整數
float_num = float("3.14")     # 轉浮點數
print(f"字符串'{str_num}'轉整數:{int_num}")

# 數字轉字符串
num = 456
str_result = str(num)
print(f"數字{num}轉字符串:'{str_result}'")

# 布爾值轉換
bool_true = bool(1)           # True
bool_false = bool(0)          # False
bool_str = bool("Hello")      # True
bool_empty = bool("")         # False

print(f"bool(1) = {bool_true}")
print(f"bool(0) = {bool_false}")
print(f"bool('Hello') = {bool_str}")
print(f"bool('') = {bool_empty}")

隱式類型轉換

# 整數和浮點數運算
result1 = 10 + 3.14          # 整數自動轉為浮點數
print(f"10 + 3.14 = {result1}")

# 布爾值參與運算
result2 = True + 5           # True轉為1
result3 = False * 10         # False轉為0
print(f"True + 5 = {result2}")
print(f"False * 10 = {result3}")

# 字符串拼接時的轉換
name = "小明"
age = 18
# 需要顯式轉換,否則會報錯
message = name + "今年" + str(age) + "歲"
print(message)

進制轉換

二進制轉十進制

原理:二進制數使用基數為2,每個位上的數字乘以2的冪次(從右向左,冪次從0開始),然後求和。步驟

  1. 寫出二進制數的每個位。
  2. 從右向左,給每個位分配權重:2^0, 2^1, 2^2, ...。
  3. 將每個位乘以對應的權重。
  4. 將所有乘積相加,得到十進制數。

例子:將二進制數1011轉換為十進制。

  • 最右邊位(最低位):1 × 2^0 = 1 × 1 = 1
  • 下一位:1 × 2^1 = 1 × 2 = 2
  • 下一位:0 × 2^2 = 0 × 4 = 0
  • 最左邊位(最高位):1 × 2^3 = 1 × 8 = 8
  • 求和:1 + 2 + 0 + 8 = 11所以,1011₂ = 11₁₀。

十進制轉二進制

原理:通過連續除以2,記錄餘數,直到商為0,然後從下往上讀取餘數。步驟

  1. 將十進制數除以2,記錄商和餘數。
  2. 用商繼續除以2,記錄餘數,重複直到商為0。
  3. 將餘數從下往上(最後一次除法的餘數在最左邊)排列,得到二進制數。

例子:將十進制數11轉換為二進制。

  • 11 ÷ 2 = 5 ... 餘1
  • 5 ÷ 2 = 2 ... 餘1
  • 2 ÷ 2 = 1 ... 餘0
  • 1 ÷ 2 = 0 ... 餘1從下往上讀取餘數:1011所以,11₁₀ = 1011₂。

二進制轉八進制

原理:八進制基數為8,每個八進制位對應3個二進制位(因為2^3=8)。從二進制數的小數點開始,向左和向右分組,每3位一組(不足3位時補零),然後將每組轉換為八進制數。步驟

  1. 從二進制數的小數點位置開始,向左(整數部分)和向右(小數部分)分組,每3位一組。
  2. 如果最左邊或最右邊一組不足3位,補零。
  3. 將每組二進制數轉換為八進制數(使用二進制到十進制的原理,但只處理3位)。

例子:將二進制數1011101轉換為八進制。

  • 二進制數:1011101(沒有小數點,視為整數)。
  • 從右向左分組:101(最右邊3位)、011(中間3位)、001(最左邊只有1位,補零成001)。
  • 轉換每組:
  • 001₂ = 1₈
  • 011₂ = 3₈
  • 101₂ = 5₈
  • 組合:135所以,1011101₂ = 135₈。

八進制轉二進制

原理:將每個八進制位轉換為3位二進制數。步驟

  1. 將八進制數的每個位單獨處理。
  2. 將每個八進制位轉換為3位二進制數(使用十進制到二進制的原理,但只處理0-7)。
  3. 組合所有二進制組,忽略前導零。

例子:將八進制數135轉換為二進制。

  • 1₈ = 001₂
  • 3₈ = 011₂
  • 5₈ = 101₂
  • 組合:001011101,省略前導零後為1011101₂。所以,135₈ = 1011101₂。

二進制轉十六進制

原理:十六進制基數為16,每個十六進制位對應4個二進制位(因為2^4=16)。從二進制數的小數點開始,向左和向右分組,每4位一組(不足4位時補零),然後將每組轉換為十六進制數(0-9和A-F)。步驟

  1. 從二進制數的小數點位置開始,向左和向右分組,每4位一組。
  2. 如果最左邊或最右邊一組不足4位,補零。
  3. 將每組二進制數轉換為十六進制數。

例子:將二進制數1011101轉換為十六進制。

  • 二進制數:1011101。
  • 從右向左分組:1101(最右邊4位)、0101(最左邊4位,補零成0101)。
  • 轉換每組:
  • 0101₂ = 5₁₆
  • 1101₂ = D₁₆(13十進制)
  • 組合:5D所以,1011101₂ = 5D₁₆。

十六進制到二進制

原理:將每個十六進制位轉換為4位二進制數。步驟

  1. 將十六進制數的每個位單獨處理。
  2. 將每個十六進制位轉換為4位二進制數。
  3. 組合所有二進制組,忽略前導零。

例子:將十六進制數5D轉換為二進制。

  • 5₁₆ = 0101₂
  • D₁₆ = 1101₂
  • 組合:01011101,省略前導零後為1011101₂。所以,5D₁₆ = 1011101₂。

八進制到十六進制

原理:通常以二進制作為中介。先將八進制轉換為二進制,然後將二進制轉換為十六進制。步驟

  1. 將八進制數轉換為二進制(每個八進制位轉3位二進制)。
  2. 將得到的二進制數轉換為十六進制(每4位一組)。

例子:將八進制數135轉換為十六進制。

  • 首先,135₈ 轉換為二進制:
  • 1₈ = 001₂
  • 3₈ = 011₂
  • 5₈ = 101₂
  • 組合:001011101₂ = 1011101₂(省略前導零)。
  • 然後將1011101₂ 轉換為十六進制:
  • 分組:0101(左邊補零)、1101。
  • 0101₂ = 5₁₆
  • 1101₂ = D₁₆
  • 組合:5D所以,135₈ = 5D₁₆。

十六進制到八進制

原理:以二進制作為中介。先將十六進制轉換為二進制,然後將二進制轉換為八進制。步驟

  1. 將十六進制數轉換為二進制(每個十六進制位轉4位二進制)。
  2. 將得到的二進制數轉換為八進制(每3位一組)。

例子:將十六進制數5D轉換為八進制。

  • 首先,5D₁₆ 轉換為二進制:
  • 5₁₆ = 0101₂
  • D₁₆ = 1101₂
  • 組合:01011101₂ = 1011101₂(省略前導零)。
  • 然後將1011101₂ 轉換為八進制:
  • 分組:001(左邊補零)、011、101。
  • 001₂ = 1₈
  • 011₂ = 3₈
  • 101₂ = 5₈
  • 組合:135所以,5D₁₆ = 135₈。

不同進製表示

# 不同進制的字面量表示
decimal = 100                # 十進制
binary = 0b1100100           # 二進制(前綴0b)
octal = 0o144                # 八進制(前綴0o)
hexadecimal = 0x64           # 十六進制(前綴0x)

print(f"十進制:{decimal}")
print(f"二進制:{binary}")
print(f"八進制:{octal}")
print(f"十六進制:{hexadecimal}")

進制轉換函數

# 十進制轉其他進制
num = 255

# 轉二進制
bin_str = bin(num)
print(f"{num} 的二進制:{bin_str}")

# 轉八進制
oct_str = oct(num)
print(f"{num} 的八進制:{oct_str}")

# 轉十六進制
hex_str = hex(num)
print(f"{num} 的十六進制:{hex_str}")

# 其他進制轉十進制
# 使用int()函數,第二個參數指定進制
binary_num = "11111111"
decimal_from_bin = int(binary_num, 2)
print(f"二進制{binary_num}轉十進制:{decimal_from_bin}")

octal_num = "377"
decimal_from_oct = int(octal_num, 8)
print(f"八進制{octal_num}轉十進制:{decimal_from_oct}")

hex_num = "FF"
decimal_from_hex = int(hex_num, 16)
print(f"十六進制{hex_num}轉十進制:{decimal_from_hex}")

格式化輸出不同進制

基於前面學習的f-string格式化

代碼

意義

{變量:d}

表示十進制輸出

{變量:b}

表示二進制輸出

{變量:o}

表示八進制輸出

{變量:x}

表示十六進制輸出,字母小寫

{變量:X}

表示十六進制輸出,字母大寫

{變量:#b}

表示帶前綴的二進制輸出,例如0b101010

{變量:#o}

表示帶前綴的八進制輸出,例如0o52

{變量:#x}

表示帶前綴的十六進制輸出,例如0x2a

num = 42

# 使用格式化輸出不同進制
print(f"十進制:{num:d}")      # 42
print(f"二進制:{num:b}")      # 101010
print(f"八進制:{num:o}")      # 52
print(f"十六進制:{num:x}")    # 2a(小寫)
print(f"十六進制:{num:X}")    # 2A(大寫)

# 帶前綴的格式化
print(f"二進制:{num:#b}")     # 0b101010
print(f"八進制:{num:#o}")     # 0o52
print(f"十六進制:{num:#x}")   # 0x2a

運算符

算術運算符

符號

意義

+

表示加法運算

-

表示減法運算

*

表示乘法運算

/

表示除法運算

%

表示餘運算

**

表示冪運算

a = 10
b = 3

print(f"a = {a}, b = {b}")
print(f"加法:a + b = {a + b}")      # 13
print(f"減法:a - b = {a - b}")      # 7
print(f"乘法:a * b = {a * b}")      # 30
print(f"除法:a / b = {a / b}")      # 3.333...
print(f"取整:a // b = {a // b}")    # 3
print(f"取餘:a % b = {a % b}")      # 1
print(f"冪運算:a ** b = {a ** b}")  # 1000

# 特殊用法
print(f"字符串重複:{'hi' * 3}")     # hihihi

比較運算符

符號

意義

>

大於運算

<

小於運算

==

等於運算

!=

不等於運算

x = 10
y = 20

print(f"x = {x}, y = {y}")
print(f"等於:x == y -> {x == y}")      # False
print(f"不等於:x != y -> {x != y}")    # True
print(f"大於:x > y -> {x > y}")        # False
print(f"小於:x < y -> {x < y}")        # True
print(f"大於等於:x >= y -> {x >= y}")  # False
print(f"小於等於:x <= y -> {x <= y}")  # True

# 字符串比較(按編碼序)
print(f"字符串比較:'apple' < 'banana' -> {'apple' < 'banana'}")  # True

邏輯運算符

符號

意義

and

同時滿足

or

其中一個滿足

not

取反

a = True
b = False

print(f"a = {a}, b = {b}")
print(f"與:a and b -> {a and b}")    # False
print(f"或:a or b -> {a or b}")      # True
print(f"非:not a -> {not a}")        # False

# 實際應用
age = 20
has_license = True

can_drive = age >= 18 and has_license
print(f"年齡{age}歲,有駕照:{has_license},可以開車:{can_drive}")

位運算符

符號

意義

&

與運算,兩位都為1則為1

|

或運算,其中一位為1則為1

^

異或運算,兩位不相同則為1

~

按位取反(NOT),0變1,1變0

<<

左移,所有位向左移動,低位補0

>>

右移, 所有位向右移動,高位補0(邏輯右移)

位運算是直接對整數在內存中的二進制位進行操作的一種運算。它們在底層編程、算法優化、加密等領域有廣泛應用。下面我將詳細講解各種位運算符及其應用。

基礎位運算符

1. 按位與(AND) - &

規則:兩個位都為1時,結果才為1

0 & 0 = 0
0 & 1 = 0  
1 & 0 = 0
1 & 1 = 1

例子

a = 5    # 二進制: 0101
b = 3    # 二進制: 0011
result = a & b  # 0101 & 0011 = 0001 = 1
print(result)  # 輸出: 1

應用

  • 判斷奇偶:n & 1 (為1是奇數,為0是偶數)
  • 清零特定位
  • 取指定位

2. 按位或(OR) - |

規則:兩個位有一個為1時,結果就為1

0 | 0 = 0
0 | 1 = 1
1 | 0 = 1  
1 | 1 = 1

例子

a = 5    # 0101
b = 3    # 0011
result = a | b  # 0101 | 0011 = 0111 = 7
print(result)  # 輸出: 7

應用

  • 設置特定位為1
  • 合併標誌位

3. 按位異或(XOR) - ^

規則:兩個位不同時結果為1,相同時結果為0

0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0

例子

a = 5    # 0101
b = 3    # 0011
result = a ^ b  # 0101 ^ 0011 = 0110 = 6
print(result)  # 輸出: 6

重要性質

  • 交換律:a ^ b = b ^ a
  • 結合律:(a ^ b) ^ c = a ^ (b ^ c)
  • 自反性:a ^ a = 0
  • 與0異或:a ^ 0 = a

應用

  • 交換兩個數(不用臨時變量)
  • 找出現奇數次的數字
  • 簡單加密

4. 按位取反(NOT) - ~

規則:0變1,1變0


~0 = 1 ~1 = 0


例子

a = 5    # 0101
result = ~a  # 在Python中,~5 = -6
print(result)  # 輸出: -6

注意:在大多數編程語言中,整數用補碼錶示,所以 ~n = -n - 1

5. 左移(Left Shift) - <<

規則:所有位向左移動,低位補0


a << n # 將a的二進制位左移n位


例子

a = 5    # 0101
result = a << 2  # 0101 << 2 = 010100 = 20
print(result)  # 輸出: 20

數學意義a << n = a × 2ⁿ

  • 5 << 1 = 10 (5×2=10)
  • 5 << 2 = 20 (5×4=20)
  • 5 << 3 = 40 (5×8=40)

6. 右移(Right Shift) - >>

規則:所有位向右移動,高位補0(邏輯右移)或補符號位(算術右移)

例子

a = 20   # 10100
result = a >> 2  # 10100 >> 2 = 00101 = 5
print(result)  # 輸出: 5

數學意義a >> n = a ÷ 2ⁿ(向下取整)

  • 20 >> 1 = 10 (20÷2=10)
  • 20 >> 2 = 5 (20÷4=5)
  • 20 >> 3 = 2 (20÷8=2.5→2)

實際應用場景

  1. 算法優化:在動態規劃、搜索算法中用於狀態壓縮
  2. 系統編程:操作系統、網絡協議中的標誌位處理
  3. 圖形學:顏色操作、圖像處理
  4. 加密算法:異或運算用於簡單加密
  5. 遊戲開發:碰撞檢測、狀態管理
  6. 數據庫:位圖索引

位運算的強大之處在於它的高效性,這些操作通常在單個CPU週期內完成,比相應的算術運算快得多。掌握位運算可以讓你寫出更高效、更優雅的代碼。

實戰演示

實戰演示1:學生成績單生成器

# 實戰演示1:學生成績單生成器
print("=" * 50)
print("           學生成績單生成器")
print("=" * 50)

# 學生基本信息
student_name = "張三"
student_id = "2023001"
chinese_score = 85.5
math_score = 92.0
english_score = 78.5

# 計算總分和平均分
total_score = chinese_score + math_score + english_score
average_score = total_score / 3

# 使用不同的字符串格式化方法輸出
print("\n【使用%格式化輸出】")
print("學生姓名:%s" % student_name)
print("學號:%s" % student_id)
print("語文:%.1f分,數學:%.1f分,英語:%.1f分" % (chinese_score, math_score, english_score))
print("總分:%.1f分,平均分:%.1f分" % (total_score, average_score))

print("\n【使用format方法輸出】")
print("學生姓名:{}".format(student_name))
print("學號:{}".format(student_id))
print("語文:{:.1f}分,數學:{:.1f}分,英語:{:.1f}分".format(chinese_score, math_score, english_score))
print("總分:{:.1f}分,平均分:{:.1f}分".format(total_score, average_score))

print("\n【使用f-string輸出】")
print(f"學生姓名:{student_name}")
print(f"學號:{student_id}")
print(f"語文:{chinese_score:.1f}分,數學:{math_score:.1f}分,英語:{english_score:.1f}分")
print(f"總分:{total_score:.1f}分,平均分:{average_score:.1f}分")

# 數據類型轉換演示
print("\n" + "=" * 50)
print("          數據類型轉換演示")
print("=" * 50)

# 字符串轉數字
score_str = "95.5"
converted_score = float(score_str)
print(f"字符串 '{score_str}' 轉換為浮點數:{converted_score}")

# 數字轉字符串
age = 18
age_str = str(age)
print(f"數字 {age} 轉換為字符串:'{age_str}'")

# 布爾值轉換
has_scholarship = True
print(f"是否有獎學金:{has_scholarship},轉換為整數:{int(has_scholarship)}")

實戰演示2:進制轉換計算器

# 實戰演示2:進制轉換計算器
print("\n" + "=" * 50)
print("          進制轉換計算器")
print("=" * 50)

# 定義一個十進制數
decimal_number = 42

print(f"原始十進制數:{decimal_number}")

# 轉換為其他進制
binary_number = bin(decimal_number)
octal_number = oct(decimal_number)
hexadecimal_number = hex(decimal_number)

print(f"二進制:{binary_number}")
print(f"八進制:{octal_number}")
print(f"十六進制:{hexadecimal_number}")

# 使用格式化輸出不同進制
print("\n【使用格式化輸出進制】")
print(f"十進制:{decimal_number:d}")
print(f"二進制:{decimal_number:b}")
print(f"八進制:{decimal_number:o}")
print(f"十六進制(小寫):{decimal_number:x}")
print(f"十六進制(大寫):{decimal_number:X}")

print("\n【帶前綴的格式化輸出】")
print(f"二進制:{decimal_number:#b}")
print(f"八進制:{decimal_number:#o}")
print(f"十六進制:{decimal_number:#x}")

# 其他進制轉十進制
print("\n" + "=" * 50)
print("          其他進制轉十進制")
print("=" * 50)

binary_str = "101010"
octal_str = "52"
hex_str = "2A"

decimal_from_binary = int(binary_str, 2)
decimal_from_octal = int(octal_str, 8)
decimal_from_hex = int(hex_str, 16)

print(f"二進制 '{binary_str}' 轉十進制:{decimal_from_binary}")
print(f"八進制 '{octal_str}' 轉十進制:{decimal_from_octal}")
print(f"十六進制 '{hex_str}' 轉十進制:{decimal_from_hex}")

實戰演示3:數學運算演示

# 實戰演示3:數學運算演示
print("\n" + "=" * 50)
print("          數學運算演示")
print("=" * 50)

# 定義兩個數字
a = 15
b = 4

print(f"a = {a}, b = {b}")

# 算術運算
print("\n【算術運算】")
print(f"加法:{a} + {b} = {a + b}")
print(f"減法:{a} - {b} = {a - b}")
print(f"乘法:{a} × {b} = {a * b}")
print(f"除法:{a} ÷ {b} = {a / b}")
print(f"取整除法:{a} ÷ {b} = {a // b}")
print(f"取餘:{a} % {b} = {a % b}")
print(f"冪運算:{a} 的 {b} 次方 = {a ** b}")

# 比較運算
print("\n【比較運算】")
print(f"{a} > {b}  -> {a > b}")
print(f"{a} < {b}  -> {a < b}")
print(f"{a} == {b} -> {a == b}")
print(f"{a} != {b} -> {a != b}")
print(f"{a} >= {b} -> {a >= b}")
print(f"{a} <= {b} -> {a <= b}")

# 邏輯運算
print("\n【邏輯運算】")
x = True
y = False
print(f"x = {x}, y = {y}")
print(f"x and y -> {x and y}")
print(f"x or y  -> {x or y}")
print(f"not x   -> {not x}")
print(f"not y   -> {not y}")

# 實際應用場景
print("\n【實際應用場景】")
age = 20
has_id_card = True
has_money = False

can_enter_bar = age >= 18 and has_id_card
can_buy_drink = age >= 18 or has_money

print(f"年齡:{age}歲,有身份證:{has_id_card},有錢:{has_money}")
print(f"可以進入酒吧:{can_enter_bar}")
print(f"可以買飲料:{can_buy_drink}")

實戰演示4:位運算實際應用

# 實戰演示4:位運算實際應用
print("\n" + "=" * 50)
print("          位運算實際應用")
print("=" * 50)

# 定義兩個數字
num1 = 12  # 二進制:1100
num2 = 10  # 二進制:1010

print(f"num1 = {num2:b} ({num1})")
print(f"num2 = {num2:b} ({num2})")

# 位運算
print("\n【位運算】")
print(f"按位與:{num1:b} & {num2:b} = {num1 & num2:b} ({num1 & num2})")
print(f"按位或:{num1:b} | {num2:b} = {num1 | num2:b} ({num1 | num2})")
print(f"按位異或:{num1:b} ^ {num2:b} = {num1 ^ num2:b} ({num1 ^ num2})")
print(f"按位取反:~{num1:b} = {~num1 & 0b1111:b} ({~num1 & 0b1111})")
print(f"左移:{num1:b} << 1 = {num1 << 1:b} ({num1 << 1})")
print(f"右移:{num1:b} >> 1 = {num1 >> 1:b} ({num1 >> 1})")

# 實際應用:權限系統(簡化版)
print("\n【權限系統應用】")
# 定義權限常量
READ_PERMISSION = 0b001   # 1
WRITE_PERMISSION = 0b010  # 2
EXECUTE_PERMISSION = 0b100 # 4

# 用户權限
user_permissions = READ_PERMISSION | WRITE_PERMISSION  # 有讀和寫權限

print(f"用户權限:{user_permissions:03b}")

# 檢查權限
has_read = (user_permissions & READ_PERMISSION) == READ_PERMISSION
has_write = (user_permissions & WRITE_PERMISSION) == WRITE_PERMISSION
has_execute = (user_permissions & EXECUTE_PERMISSION) == EXECUTE_PERMISSION

print(f"有讀權限:{has_read}")
print(f"有寫權限:{has_write}")
print(f"有執行權限:{has_execute}")

實戰演示5:綜合應用 - 簡單計算器

# 實戰演示5:綜合應用 - 簡單計算器
print("\n" + "=" * 50)
print("          綜合應用 - 簡單計算器")
print("=" * 50)

# 定義計算數據
number1 = 25
number2 = 7
number3 = 3.14

print(f"數字1:{number1}")
print(f"數字2:{number2}")
print(f"數字3:{number3}")

# 綜合運算
print("\n【綜合運算結果】")

# 算術運算
addition = number1 + number2
subtraction = number1 - number2
multiplication = number1 * number2
division = number1 / number2
modulo = number1 % number2
power = number1 ** number3

print(f"加法:{number1} + {number2} = {addition}")
print(f"減法:{number1} - {number2} = {subtraction}")
print(f"乘法:{number1} × {number2} = {multiplication}")
print(f"除法:{number1} ÷ {number2} = {division:.2f}")
print(f"取餘:{number1} % {number2} = {modulo}")
print(f"冪運算:{number1} 的 {number3} 次方 = {power:.2f}")

# 數據類型轉換
print("\n【數據類型轉換】")
str_number = "100"
int_from_str = int(str_number)
float_from_str = float(str_number)

print(f"字符串 '{str_number}' 轉整數:{int_from_str}")
print(f"字符串 '{str_number}' 轉浮點數:{float_from_str}")

# 進制轉換
print("\n【進制轉換】")
print(f"十進制 {number1} 的二進制:{bin(number1)}")
print(f"十進制 {number1} 的八進制:{oct(number1)}")
print(f"十進制 {number1} 的十六進制:{hex(number1)}")

# 格式化輸出
print("\n【格式化輸出展示】")
print("使用%格式化:數字1=%d,數字2=%d,結果=%.2f" % (number1, number2, division))
print("使用format:數字1={},數字2={},結果={:.2f}".format(number1, number2, division))
print(f"使用f-string:數字1={number1},數字2={number2},結果={division:.2f}")

# 綜合表達式
print("\n【綜合表達式計算】")
complex_result = (number1 + number2) * number3 - (number1 % number2)
print(f"({number1} + {number2}) × {number3} - ({number1} % {number2}) = {complex_result:.2f}")

每日一題

題目要求:綜合運用今天學習的所有知識,創建一個個人數字名片程序。

名片包含信息:

  • 基本信息:姓名、年齡、職業
  • 聯繫方式:電話(數字)、郵箱
  • 技能評分:編程能力(0-100)、英語水平(0-100)
  • 特殊編碼:個人ID(用二進制、八進制、十六進制表示年齡)

功能要求:

  1. 使用三種字符串格式化方法分別展示不同部分的信息
  2. 計算技能平均分
  3. 將年齡轉換為不同進制顯示
  4. 使用各種運算符進行簡單的數據分析
  5. 格式化輸出美觀的名片

輸出示例:

text

================================
        個人數字名片
================================
姓名:張偉
年齡:28歲(二進制:11100,八進制:34,十六進制:1C)
職業:軟件工程師
電話:13800138000
郵箱:zhangwei@email.com
編程能力:85分,英語水平:78分
技能平均分:81.5分
================================

請編寫完整的個人數字名片程序。

總結

今天的所有實戰演示都嚴格基於已學知識:

  1. 字符串格式化:使用了%格式化、format()方法和f-string
  2. 數據類型轉換:演示了int()、float()、str()、bool()的用法
  3. 進制轉換:展示了bin()、oct()、hex()和int()的進制轉換功能
  4. 運算符:涵蓋了算術、比較、邏輯、位運算符的使用

每個實戰演示都聚焦於一個具體的應用場景,通過實際的代碼示例幫助你鞏固所學知識。建議你親自運行這些代碼,並嘗試修改其中的數值和變量,觀察不同的輸出結果,這樣可以更好地理解和掌握今天的內容。