課時6:Python之常用操作符

那是個好男孩發表於2018-07-26

目錄:

一、算術操作符

二、優先順序問題

三、比較操作符

四、邏輯操作符

五、課時06課後習題及答案

 

******************

一、算術操作符

******************

>>> a = b = c = d = 10
>>> a += 1
>>> b -= 3
>>> c *= 10
>>> d /= 8
>>> (a,b,c,d)
(11, 7, 100, 1.25)

在這裡我們發現,即使是進行整數間的除法,但是答案是自動返回一個浮點型的精確數值,也就是說Python用真正的除法代替了地板除法。                               地板除法的概念是:計算結果取比商小的最大整型,也就是捨棄小數的意思。(注:例如3 / 2等於1)

>>> 3 / 2
1.5
>>> 3 // 2
1
>>> 3.0 // 2
1.0
>>> 3.0 / 2
1.5

值得注意的一點是,無論是整數運算還是浮點數運算,都不會執行地板除法。需要用//。

>>> 5%2
1
>>> 4%2
0
>>> 520 % 14
2
>>> 

百分號(%)表示求餘數的意思。

 

******************

二、優先順序問題

******************

先乘除後加減,如有括號先算括號裡的。

>>> -3 * 2 + 5 / -2 -4
-12.5
>>> (-3) * 2 + 5 / (-2) -4
-12.5

Python中還有一個特殊的乘法,就是雙星號(**),也稱為冪運算操作符。例如3**2,雙星號左側的3稱為底數,右側的2稱為指數,把這樣的算式叫作3的2次冪,結果就是3*3==9.

在使用Python進行冪運算的時候,需要注意一點是優先順序問題,因為冪運算操作符和一元操作符(只有一個運算元)的優先順序關係比較特別:冪運算操作符比其左側的一元操作符優先順序高,比其右側的一元操作符優先順序低:

>>> -3 ** 2
-9
>>> - (3 ** 2)
-9
>>> 3 ** -2
0.1111111111111111
>>> 3 ** (-2)
0.1111111111111111

 

******************

三、比較操作符

******************

比較操作符包括:<    <=    >    >=    ==    !=

比較操作符根據表示式的值的真假返回布林型別的值。

******************

四、邏輯操作符

******************

 邏輯運算子包括: and    or    not

and :同真為真

or:同假為假

not :它的作用是得到一個和運算元相反的布林型別的值

>>> not True
False
>>> not 0
True
>>> not 4
False
>>> 3 < 4 <5
True
>>> 3 < 4 and 4 < 5
True

在Python中,0解釋為False,非0的數解釋為True。

Python操作符優先順序:

*******************************

五、課時06課後習題及答案

*******************************

 測試題:

0. Python 的 floor 除法現在使用 “//” 實現,那 3.0 // 2.0 您目測會顯示什麼內容呢?
1. a < b < c 事實上是等於?
2. 不使用 IDLE,你可以輕鬆說出 5 ** -2 的值嗎?
3. 如何簡單判斷一個數是奇數還是偶數?
4. 請用最快速度說出答案:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9
5. 還記得我們上節課那個求閏年的作業嗎?如果還沒有學到“求餘”操作,還記得用什麼方法可以“委曲求全”代替“%”的功能呢?

動動手:

0. 請寫一個程式列印出 0~100 所有的奇數。
1. 我們說過現在的 Python 可以計算很大很大的資料,但是......真正的大資料計算可是要靠剛剛的硬體滴,不妨寫一個小程式碼,讓你的計算機為之崩潰?
2.
愛因斯坦曾出過這樣一道有趣的數學題:有一個長階梯,若每步上2階,最後剩1階;若每步上3階,最後剩2階;若每步上5階,最後剩4階;若每步上6階,最後剩5階;只有每步上7階,最後剛好一階也不剩。

題目:請程式設計求解該階梯至少有多少階?

 

答案:

測試題答案:

0. Python 的 floor 除法現在使用 “//” 實現,那 3.0 // 2.0 您目測會顯示什麼內容呢

如果回答是 1.5 那麼很遺憾,您受到 C 語言的影響比較大,Python 這裡會義無反顧地執行 floor 除法原則,答案是:1.0

1. a < b < c 事實上是等於?

(a < b) and (b < c)

2. 不使用 IDLE,你可以輕鬆說出 5 ** -2 的值嗎?
0.04,也就是 1/25
冪運算操作符比其左側的一元操作符優先順序高,比其右側的一元操作符優先順序低。

3. 如何簡單判斷一個數是奇數還是偶數?
使用求餘可以簡單得到答案:能被 2 整除為偶數,所以 x % 2 == 0,否則為奇數。

4. 請用最快速度說出答案:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9
如果你的回答是 0,那麼小甲魚很開心你中招了!
答案是:4
not or and 的優先順序是不同的:not > and > or
我們按照優先順序給它們加上括號:(not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9)
== 0 or 0 or 4 or 6 or 9
== 4
為啥是 4?
大家還記得第四講作業提到的“短路邏輯”嗎?3 and 4 == 4,而 3 or 4 == 3。
所以答案是:4
溫馨提示:為了更好的表達你的程式,小甲魚再次呼籲有些括號還是不能省下的,畢竟不是所有程式設計師都跟你一樣都將優先順序爛透於心的。

5. 還記得我們上節課那個求閏年的作業嗎?如果還沒有學到“求餘”操作,還記得用什麼方法可以“委曲求全”代替“%”的功能呢?
因為上節課我們還沒有教大家“求餘”的操作,所以小甲魚使用了“if year/400 == int(year/400)”這樣的方式來“委曲求全”。

 

 

動動手答案:

 

0. 請寫一個程式列印出 0~100 所有的奇數。

 

i = 0
while i <= 100:
    if i % 2 != 0:
        print(i, end=' ')
        i += 1
    else:
        i += 1

 或者:

i = 0
while i <= 100:
      if i % 2 != 0:
            print(i,end=" ")
      i+=1

 

1. 我們說過現在的 Python 可以計算很大很大的資料,但是......真正的大資料計算可是要靠剛剛的硬體滴,不妨寫一個小程式碼,讓你的計算機為之崩潰?

print(2 ** 2 ** 32)
# 一般很多機子都會在一會兒之後:Memory Overflow,記憶體不夠用。
# 設計到冪操作,結果都是驚人滴。

 

2. 題目:請程式設計求解該階梯至少有多少階?

x = 7
i = 1
flag = 0
while i <= 100: if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5): flag = 1 else: x = 7 * (i+1) # 根據題意,x一定是7的整數倍,所以每次乘以7 i += 1 if flag == 1: print('階梯數是:', x) else: print('在程式限定的範圍內找不到答案!')

 

相關文章