diff --git a/404.html b/404.html index e0fddb2..82ca3b1 100755 --- a/404.html +++ b/404.html @@ -427,6 +427,8 @@ + + @@ -491,6 +493,27 @@ + + + + + + +
  • + + + + + Operators + + + + +
  • + + + + diff --git a/about/index.html b/about/index.html index 44877e7..8c38979 100755 --- a/about/index.html +++ b/about/index.html @@ -435,6 +435,8 @@ + + @@ -499,6 +501,27 @@ + + + + + + +
  • + + + + + Operators + + + + +
  • + + + + diff --git a/fundamental/cpp/index.html b/fundamental/cpp/index.html index 376700b..316ce94 100755 --- a/fundamental/cpp/index.html +++ b/fundamental/cpp/index.html @@ -11,7 +11,7 @@ - + @@ -442,6 +442,8 @@ + + @@ -506,6 +508,27 @@ + + + + + + +
  • + + + + + Operators + + + + +
  • + + + + @@ -707,7 +730,7 @@

    C++

    diff --git a/fundamental/python/index.html b/fundamental/python/index.html index 378eac2..10a35a0 100755 --- a/fundamental/python/index.html +++ b/fundamental/python/index.html @@ -442,6 +442,8 @@ + + @@ -508,6 +510,27 @@ + + + + + + +
  • + + + + + Operators + + + + +
  • + + + + diff --git a/fundamental/python/media/cat2.jpg b/fundamental/python/media/cat_2.jpg similarity index 100% rename from fundamental/python/media/cat2.jpg rename to fundamental/python/media/cat_2.jpg diff --git a/fundamental/python/media/Variable_1.mp4 b/fundamental/python/media/variable_1.mp4 similarity index 100% rename from fundamental/python/media/Variable_1.mp4 rename to fundamental/python/media/variable_1.mp4 diff --git a/fundamental/python/operators/index.html b/fundamental/python/operators/index.html new file mode 100755 index 0000000..ee6f26f --- /dev/null +++ b/fundamental/python/operators/index.html @@ -0,0 +1,1286 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Operators - LMcps Book + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + 跳轉到 + + +
    +
    + +
    + + + + +
    + + +
    + +
    + + + + + + + + + +
    +
    + + + +
    +
    +
    + + + + + + + +
    +
    +
    + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + +

    Operators

    +

    Arithmetic Operators

    +

    我們已經會怎麼使用變數、自己輸入值、以及印出值,現在我們要來學習一些運算子,讓我們可以對變數做一些運算。

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    x, y = 10, 3
    +print(x + y)
    +print(x - y)
    +print(x * y)
    +print(x / y)
    +z = x // y
    +print(z)
    +print(type(z))
    +print(x % y)
    +print(x ** y)
    +
    +
    ouput
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    13
    +7
    +30
    +3.3333333333333335
    +3
    +<class 'int'>
    +1
    +1000
    +
    +

    我相信看完輸出後,你能大致明瞭各個運算子的作用,其中想請你留意 * 乘法運算子,請你不要打成 x,以及 /// 的差別,後者會將結果向下取整。還有比較特別的 % ,留意到 10 = 3 * 3 + 1,就是取餘數;而看起來最奇特的 ** ,他的作用是求冪。

    +

    我們來複習一下國小數學: +

     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    # Upper case for constant
    +PI = 3.14
    +r = 2
    +area = PI * (r ** 2)
    +perimeter = 2 * PI * r
    +print(f'Area: {area}, Perimeter: {perimeter}')
    +
    +# Sum of 1 to 100
    +total = (1 + 100) * 100 // 2
    +print(f'The sum of 1 to 100 is {total}')
    +

    +
    ouput
    1
    +2
    Area: 12.56, Perimeter: 12.56
    +The sum of 1 to 100 is 5050
    +
    +

    這邊要提醒你的是,運算子之間有優先順序,當你不確定結果的時候,請善用括號。

    +
    +

    Question

    +
      +
    1. 2 ** 3 ** 2 的結果是多少?
    2. +
    3. 2 ** (3 ** 2) 的結果是多少?
    4. +
    5. (2 ** 3) ** 2 的結果是多少?
    6. +
    +
    +

    Comparison Operators

    +

    比較運算子的結果會是 TrueFalse,這個結果我們稱為布林值。

    +

    我們來以直角三角形的性質來做一些比較運算子的練習。

    +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    a, b, c = 3, 4, 5
    +
    +print(a < b)
    +print(a > b)
    +print(a <= b)
    +print(a >= b)
    +print(a ** 2 + b ** 2 == c ** 2)
    +print(a ** 2 + b ** 2 != c ** 2)
    +print((a + b) > c)
    +
    +
    ouput
    1
    +2
    +3
    +4
    +5
    +6
    False
    +True
    +False
    +True
    +False
    +True
    +
    +

    這邊要提醒你, == 是比較運算子,而 = 是指派運算子,他們的意思是不一樣的。

    +

    最後來看一個例子: +

    1
    +2
    +3
    +4
    +5
    +6
    age = 14
    +print(12 <= age <= 18)
    +
    +x, y, z = 1, 2, 3
    +print(x < y < z)
    +print(x < y and y < z)
    +

    +
    ouput
    1
    +2
    +3
    True
    +True
    +True
    +
    +

    在Python中,我們可以將比較運算子連接起來,這樣的寫法可以讓我們的程式碼更簡潔。

    +
    +

    Question

    +
      +
    1. print(1 < 2 < 3 < 4 < 5) 會印出什麼?
    2. +
    3. print(1 < 2 < 3 < 4 > 5) 會印出什麼?
    4. +
    +
    +

    Logical Operators

    +

    我們繼續往下看,這邊我們要介紹邏輯運算子,他可以將多個布林值結合成一個布林值。

    +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    has_license = True
    +is_drunk = False
    +age = 18
    +
    +print(f"Can I drive a car? {has_license and not is_drunk and age >= 18}")
    +print(not has_license)
    +print(not is_drunk)
    +print(age >= 18 or is_drunk or not has_license)
    +
    +
    ouput
    1
    +2
    +3
    +4
    Can I drive a car? True
    +False
    +True
    +True
    +
    +

    這邊要提醒你的是, and 只有在所有布林值都是 True 的時候,結果才會是 True,而 or 只要有一個布林值是 True,結果就會是 True

    +

    因此有所謂的短路求值(Short-circuit Evaluation),當 and 的第一個布林值是 False,後面的布林值就不會被計算,因為結果一定是 False;而 or 的第一個布林值是 True,後面的布林值就不會被評估,因為結果一定是 True

    +

    not 是一元運算子,他只會將布林值反轉。

    +
    +

    Question

    +
      +
    1. print(not True and False) 會印出什麼?
    2. +
    3. print(not True or False) 會印出什麼?
    4. +
    5. print(not True and not False) 會印出什麼?
    6. +
    7. print(not True or not False) 會印出什麼?
    8. +
    +
    +

    Bitwise Operators

    +

    在這邊我們要介紹位元運算子,他是對二進位的運算,我們可以用 bin() 來觀察二進位的結果。

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    a, b = 2, 3
    +print(f"a={bin(a)}")
    +print(f"b={bin(b)}")
    +
    +print(a & b, bin(a & b))
    +print(a | b, bin(a | b))
    +print(a ^ b, bin(a ^ b))
    +print(~a, bin(~a))
    +
    +print(a << 1, bin(a << 1))
    +print(a >> 1, bin(a >> 1))
    +
    +
    ouput
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    a=0b10
    +b=0b11
    +2 0b10
    +3 0b11
    +1 0b1
    +-3 -0b11
    +4 0b100
    +1 0b1
    +
    +

    & 是位元的 and| 是位元的 or^ 是位元的 xor~ 是位元的 not<< 是位元的左移, >> 是位元的右移。

    +

    在往下之前,請你先想想我們該如何判斷一個數字是奇數還是偶數,我們可以用 % 來判斷,但是我們也可以用位元運算來判斷。

    +
    1
    +2
    +3
    a, b = 5678, 4843
    +print(f"Is a even? {a % 2 == 0}")
    +print(f"Is b odd? {b & 1 == 1}")
    +
    +
    ouput
    1
    +2
    Is a even? True
    +Is b odd? True
    +
    +
    +

    Question

    +
      +
    1. 如何判斷一個數字是 2 的冪?
    2. +
    3. 如何讓一個數字變成自己的 16 倍,但不能用 * 乘法運算子?
    4. +
    +
    +

    Assignment Operators

    +

    我們已經學會了一些運算子,現在我們要來學習一些指派運算子,他可以將運算結果指定給變數。

    +

    先來看看一個簡單的例子,我們可以用 += 來將變數加上某個值,這個運算子可以讓我們的程式碼更簡潔。

    +
    1
    +2
    +3
    +4
    +5
    x = 1
    +x = x + 2
    +y = 1
    +y += 2
    +print(x, y)
    +
    +
    ouput
    3 3
    +
    +

    再來看看其他的指派運算子。

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    x = 1
    +x += 2
    +print(x)
    +x -= 1
    +print(x)
    +x *= 3
    +print(x)
    +x //= 2
    +print(x)
    +x **= 2
    +print(x)
    +x <<= 1
    +print(x)
    +
    +
    ouput
    1
    +2
    +3
    +4
    +5
    +6
    3
    +2
    +6
    +3
    +9
    +18
    +
    +

    對了,請你別忘記 = 也是一個指派運算子。

    +
    1
    +2
    x = y = z = 1
    +print(x, y, z)
    +
    +
    ouput
    1 1 1
    +
    +

    希望這個例子可以讓你更熟悉指派運算子。

    +
    +

    Question

    +
      +
    1. 有沒有 and= 這個指派運算子?
    2. +
    3. &= 這個指派運算子的作用是什麼?
    4. +
    +
    +

    Bonus: f-string for float

    +

    為了能讓你練習一些題目,我先在這裡介紹如何印出浮點數到指定位數。

    +

    給你浮點數 x ,請你印出 x 的平方根與平方,並且只印出小數點後兩位。

    +
    1
    +2
    +3
    x = 3.1415926
    +print(f"The square root of {x} is {x ** 0.5:.2f}")
    +print(f"The square of {x} is {x ** 2:.2f}")
    +
    +
    ouput
    1
    +2
    The square root of 3.1415926 is 1.77
    +The square of 3.1415926 is 9.87
    +
    +

    @EditTime : 2024-01-27 11:52

    +

    Practice

    + + + + + + + + + + + + + +
    +
    + + + +
    + + + +
    + + + +
    +
    +
    +
    + + + + + + + + + + \ No newline at end of file diff --git a/fundamental/python/say_hello/index.html b/fundamental/python/say_hello/index.html index e630cc7..9cfbc78 100755 --- a/fundamental/python/say_hello/index.html +++ b/fundamental/python/say_hello/index.html @@ -14,7 +14,7 @@ - + @@ -442,6 +442,8 @@ + + @@ -599,6 +601,27 @@ + + + + + + +
  • + + + + + Operators + + + + +
  • + + + + @@ -909,16 +932,16 @@

    Variable

    Quote

    在Python中,一切都是物件。

    請觀看下面的動畫。

    - +

    VØJ, Narvent - Memory Reboot (4K Music Video)

    @@ -1013,7 +1036,7 @@

    Input

    f-string 是什麼東西呢?他是一種字串格式化(String Formatting)的方法,他會將括號內的東西轉換成字串,並將字串中的 {} 替換成括號內的東西。

    而執行完程式碼後,你會發現 bc 的類別不同,但他們的值卻相同,這是因為 int()float() 都是將括號內的東西轉換成整數與浮點數,而 int() 會將浮點數的小數點捨去,而 float() 則會將整數轉換成浮點數。

    -

    那麼 b == c 是什麼意思呢?他是一個比較運算子(Comparison Operator),他會比較等號左右兩邊的東西是否相等,如果相等,則回傳 True,否則回傳 False

    +

    那麼 b == c 是什麼意思呢?其中 ==比較運算子(Comparison Operator),他會比較等號左右兩邊的東西是否相等,如果相等,則回傳 True,否則回傳 False

    那如果我今天想要一次輸入好幾個字串,每一個字串以空格來隔開呢? 但在這之前,我們先來看一個小程式 :

    1
    @@ -1073,8 +1096,8 @@ 

    Input

    @EditTime : 2024-01-25 22:17

    Practice

    在這篇文章中,你學到了:

    -
    -

    Summary

    +
    +

    Info

    1. 如何使用 print()input()
    2. 知道變數的概念。
    3. @@ -1147,13 +1170,13 @@

      Practice +