天天看點

7天入門Python 4 — 運算符、條件及循環

專欄自述:随着這幾年機器學習火爆,樓主寫了Java好多年,python其實也會寫,但是缺乏系統性梳理,是以搞一個python欄目,系統性梳理的同時也把python的知識做一些梳理,歡迎查閱,歡迎一起學習python

傳送門:

  • 7天入門Python 1 — Python本地安裝
  • 7天入門Python 2 — Python認識
  • 7天入門Python 3 — Python對象屬性及核心資料類型
  • 7天入門Python 4 — 運算符、條件及循環
  • 7天入門Python 5 — 函數、子產品及異常
  • 7天入門Python 6 — 輸入輸出、檔案及OS

運算符

算術運算符

運算符 描述 執行個體
+ 加 - 兩個對象相加 a + b 輸出結果 30
- 減 - 得到負數或是一個數減去另一個數 a - b 輸出結果 -10
* 乘 - 兩個數相乘或是傳回一個被重複若幹次的字元串 a * b 輸出結果 200
/ 除 - x除以y b / a 輸出結果 2
% 取模 - 傳回除法的餘數 b % a 輸出結果 0
** 幂 - 傳回x的y次幂 a**b 為10的20次方, 輸出結果 100000000000000000000
// 取整除 - 傳回商的整數部分(向下取整)
>>> 9//2
4
>>> -9//2
-5
           

比較運算符

運算符 描述 執行個體
== 等于 - 比較對象是否相等 (a == b) 傳回 False。
!= 不等于 - 比較兩個對象是否不相等 (a != b) 傳回 true.
<> 不等于 - 比較兩個對象是否不相等 (a <> b) 傳回 true。這個運算符類似 != 。
> 大于 - 傳回x是否大于y (a > b) 傳回 False。
< 小于 - 傳回x是否小于y。所有比較運算符傳回1表示真,傳回0表示假。這分别與特殊的變量True和False等價。 (a < b) 傳回 true。
>= 大于等于 - 傳回x是否大于等于y。 (a >= b) 傳回 False。
<= 小于等于 - 傳回x是否小于等于y。 (a <= b) 傳回 true。

指派運算符

運算符 描述 執行個體
= 簡單的指派運算符 c = a + b 将 a + b 的運算結果指派為 c
+= 加法指派運算符 c += a 等效于 c = c + a
-= 減法指派運算符 c -= a 等效于 c = c - a
*= 乘法指派運算符 c *= a 等效于 c = c * a
/= 除法指派運算符 c /= a 等效于 c = c / a
%= 取模指派運算符 c %= a 等效于 c = c % a
**= 幂指派運算符 c **= a 等效于 c = c ** a
//= 取整除指派運算符 c //= a 等效于 c = c // a

位運算符

運算符 描述 執行個體
& 按位與運算符:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0 (a & b) 輸出結果 12 ,二進制解釋: 0000 1100
| 按位或運算符:隻要對應的二個二進位有一個為1時,結果位就為1。 (a | b) 輸出結果 61 ,二進制解釋: 0011 1101
^ 按位異或運算符:當兩對應的二進位相異時,結果為1 (a ^ b) 輸出結果 49 ,二進制解釋: 0011 0001
~ 按位取反運算符:對資料的每個二進制位取反,即把1變為0,把0變為1 。~x 類似于 -x-1 (~a ) 輸出結果 -61 ,二進制解釋: 1100 0011,在一個有符号二進制數的補碼形式。
<< 左移動運算符:運算數的各二進位全部左移若幹位,由 << 右邊的數字指定了移動的位數,高位丢棄,低位補0。 a << 2 輸出結果 240 ,二進制解釋: 1111 0000
>> 右移動運算符:把">>"左邊的運算數的各二進位全部右移若幹位,>> 右邊的數字指定了移動的位數 a >> 2 輸出結果 15 ,二進制解釋: 0000 1111

邏輯運算符

運算符 邏輯表達式 描述 執行個體
and x and y 布爾"與" - 如果 x 為 False,x and y 傳回 False,否則它傳回 y 的計算值。 (a and b) 傳回 20。
or x or y 布爾"或" - 如果 x 是非 0,它傳回 x 的值,否則它傳回 y 的計算值。 (a or b) 傳回 10。
not not x 布爾"非" - 如果 x 為 True,傳回 False 。如果 x 為 False,它傳回 True。 not(a and b) 傳回 False

成員運算符

運算符 描述 執行個體
in 如果在指定的序列中找到值傳回 True,否則傳回 False。 x 在 y 序列中 , 如果 x 在 y 序列中傳回 True。
not in 如果在指定的序列中沒有找到值傳回 True,否則傳回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中傳回 True。

身份運算符

運算符 描述 執行個體
is is 是判斷兩個辨別符是不是引用自一個對象 x is y, 類似 id(x) == id(y) , 如果引用的是同一個對象則傳回 True,否則傳回 False
is not is not 是判斷兩個辨別符是不是引用自不同對象 x is not y , 類似 id(a) != id(b)。如果引用的不是同一個對象則傳回結果 True,否則傳回 False。

運算符優先級

運算符 描述
** 指數 (最高優先級)
~ + - 按位翻轉, 一進制加号和減号 (最後兩個的方法名為 [email protected] 和 [email protected])
* / % // 乘,除,取模和取整除
+ - 加法減法
>> << 右移,左移運算符
& 位 'AND'
^ | 位運算符
<= < > >= 比較運算符
<> == != 等于運算符
= %= /= //= -= += *= **= 指派運算符
is is not 身份運算符
in not in 成員運算符
not and or 邏輯運算符

執行個體:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
a = 20
b = 10
c = 15
d = 5
e = 0
 
e = (a + b) * c / d       #( 30 * 15 ) / 5
print "(a + b) * c / d 運算結果為:",  e
 
e = ((a + b) * c) / d     # (30 * 15 ) / 5
print "((a + b) * c) / d 運算結果為:",  e
 
e = (a + b) * (c / d);    # (30) * (15/5)
print "(a + b) * (c / d) 運算結果為:",  e
 
e = a + (b * c) / d;      #  20 + (150/5)
print "a + (b * c) / d 運算結果為:",  e
           

輸出結果:

(a + b) * c / d 運算結果為: 90
((a + b) * c) / d 運算結果為: 90
(a + b) * (c / d) 運算結果為: 90
a + (b * c) / d 運算結果為: 50
           

條件語句

文法

if 判斷條件:
    執行語句……
else:
    執行語句……
           

或者

if 判斷條件1:
    執行語句1……
elif 判斷條件2:
    執行語句2……
elif 判斷條件3:
    執行語句3……
else:
    執行語句4……
           

執行個體:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

 
num = 5     
if num == 3:            # 判斷num的值
    print 'boss'        
elif num == 2:
    print 'user'
elif num == 1:
    print 'worker'
elif num < 0:           # 值小于零時輸出
    print 'error'
else:
    print 'roadman'     # 條件均不成立時輸出
           

輸出結果:

roadman        # 輸出結果
           

循環語句

循環類型

Python提供了for循環和while循環(在Python中沒有do..while循環):

循環類型 描述
while 循環 在給定的判斷條件為 true 時執行循環體,否則退出循環體。
for 循環 重複執行語句

循環控制語句

循環控制語句可以更改語句執行的順序。Python支援以下循環控制語句:

控制語句 描述
break 語句 在語句塊執行過程中終止循環,并且跳出整個循環
continue 語句 在語句塊執行過程中終止目前循環,跳出該次循環,執行下一次循環。
pass 語句 pass是空語句,是為了保持程式結構的完整性。

執行個體:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# break 執行個體
for letter in 'Python':     
   if letter == 'h':
      break
   print 'break執行個體: 目前字母 :', letter

# continue 執行個體   
for letter in 'Python':     
   if letter == 'h':
      continue
   print 'continue執行個體: 目前字母 :', letter   
   
# pass 執行個體
for letter in 'Python':
   if letter == 'h':
      pass
      print '這是 pass 塊'
   print 'pass執行個體: 目前字母 :', letter
 
print "Good bye!"   
           

輸出結果:

break執行個體: 目前字母 : P
break執行個體: 目前字母 : y
break執行個體: 目前字母 : t
continue執行個體: 目前字母 : P
continue執行個體: 目前字母 : y
continue執行個體: 目前字母 : t
continue執行個體: 目前字母 : o
continue執行個體: 目前字母 : n
pass執行個體: 目前字母 : P
pass執行個體: 目前字母 : y
pass執行個體: 目前字母 : t
這是 pass 塊
pass執行個體: 目前字母 : h
pass執行個體: 目前字母 : o
pass執行個體: 目前字母 : n
Good bye!
           

while 循環

文法:

while 判斷條件:
    執行語句……
           

執行個體:

#!/usr/bin/python
 
count = 0
while (count < 9):
   print 'The count is:', count
   count = count + 1
 
print "Good bye!"
           

輸出結果:

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!
           

循環使用 else 語句

在 python 中,while … else 在循環條件為 false 時執行 else 語句塊:

執行個體

#!/usr/bin/python
 
count = 0
while count < 5:
   print count, " is  less than 5"
   count = count + 1
else:
   print count, " is not less than 5"
           

輸出結果:

0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5
           

for 循環

文法:

for iterating_var in sequence:
   statements(s)
           

執行個體:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
for letter in 'Python':     # 第一個執行個體
   print '目前字母 :', letter
 
fruits = ['banana', 'apple',  'mango']
for fruit in fruits:        # 第二個執行個體
   print '目前水果 :', fruit
 
print "Good bye!"
           

輸出結果:

目前字母 : P
目前字母 : y
目前字母 : t
目前字母 : h
目前字母 : o
目前字母 : n
目前水果 : banana
目前水果 : apple
目前水果 : mango
Good bye!
           

序列索引疊代

另外一種執行循環的周遊方式是通過索引,如下執行個體:

執行個體:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
fruits = ['banana', 'apple',  'mango']
for index in range(len(fruits)):
   print '目前水果 :', fruits[index]
 
print "Good bye!"
           

輸出結果:

目前水果 : banana
目前水果 : apple
目前水果 : mango
Good bye!
           

循環使用 else 語句

在 python 中,for … else 表示這樣的意思,for 中的語句和普通的沒有差別,else 中的語句會在循環正常執行完(即 for 不是通過 break 跳出而中斷的)的情況下執行,while … else 也是一樣。

執行個體:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
for num in range(10,20):  # 疊代 10 到 20 之間的數字
   for i in range(2,num): # 根據因子疊代
      if num%i == 0:      # 确定第一個因子
         j=num/i          # 計算第二個因子
         print '%d 等于 %d * %d' % (num,i,j)
         break            # 跳出目前循環
   else:                  # 循環的 else 部分
      print num, '是一個質數'
           

輸出結果:

10 等于 2 * 5
11 是一個質數
12 等于 2 * 6
13 是一個質數
14 等于 2 * 7
15 等于 3 * 5
16 等于 2 * 8
17 是一個質數
18 等于 2 * 9
19 是一個質數
           

循環嵌套

文法:

Python for 循環嵌套文法:

for iterating_var in sequence:
   for iterating_var in sequence:
      statements(s)
   statements(s)
           

Python while 循環嵌套文法:

while expression:
   while expression:
      statement(s)
   statement(s)
           

執行個體:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
i = 2
while(i < 100):
   j = 2
   while(j <= (i/j)):
      if not(i%j): break
      j = j + 1
   if (j > i/j) : print i, " 是素數"
   i = i + 1
 
print "Good bye!"
           

輸出結果:

2 是素數
3 是素數
5 是素數
7 是素數
11 是素數
13 是素數
17 是素數
19 是素數
23 是素數
29 是素數
31 是素數
37 是素數
41 是素數
43 是素數
47 是素數
53 是素數
59 是素數
61 是素數
67 是素數
71 是素數
73 是素數
79 是素數
83 是素數
89 是素數
97 是素數
Good bye!
           

疊代器

疊代器對象從集合的第一個元素開始通路,直到所有的元素被通路完結束。疊代器隻能往前不會後退。

疊代器有兩個基本的方法:iter() 和 next()。字元串,清單或元組對象都可用于建立疊代器

執行個體1:

#!/usr/bin/python

list = [1, 2, 3, 4]
it = iter(list)  # 建立疊代器對象
for x in it:
    print(x)
           

執行個體2:

#!/usr/bin/python

import sys  # 引入 sys 子產品

list = [1, 2, 3, 4]
it = iter(list)  # 建立疊代器對象

while True:
    try:
        print(next(it))
    except StopIteration:             #StopIteration 異常用于辨別疊代的完成,防止出現無限循環的情況
        sys.exit()
           

自定義疊代器

把一個類作為一個疊代器使用需要在類中實作兩個方法 __iter__() 與 __next__() 。

執行個體:

class MyIterator:
    def __iter__(self):
        self.a = 1
        return self

    def __next__(self):
        x = self.a
        self.a += 1
        return x


myclass = MyIterator()
myiter = iter(myclass)

print(next(myiter))
print(next(myiter))
print(next(myiter))
           

生成器

在 Python 中,使用了 yield 的函數被稱為生成器(generator)。跟普通函數不同的是,生成器是一個傳回疊代器的函數,隻能用于疊代操作,更簡單點了解生成器就是一個疊代器。在調用生成器運作的過程中,每次遇到 yield 時函數會暫停并儲存目前所有的運作資訊,傳回 yield 的值, 并在下一次執行 next() 方法時從目前位置繼續運作。

#!/usr/bin/python3

import sys


def fibonacci(n):  # 生成器函數 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n):
            return
        yield a
        a, b = b, a + b
        counter += 1


f = fibonacci(10)  # f 是一個疊代器,由生成器傳回生成

while True:
    try:
        print(next(f))
    except StopIteration:
        sys.exit()
           

下一節:7天入門Python 5 — 函數、子產品及異常

感興趣的同學可以點關注哦,持續更新~