python語句–條件語句

  • 2020 年 1 月 13 日
  • 筆記

一、print語句、import語句、賦值語句。

1.1、print語句:輸出

>>> print(2,3,4)    //python2.x (2, 3, 4) >>>

>>> print(1,2,3)    //python3.x 1 2 3 >>>

備註:print函數在輸出時會在每個參數之間都插入一個空格符

在python2.x中,print的參數會構成一個元組,但是在python3.x中,print參數會構成一個元組。

如果不想在各參數之間留有空格,用連接字符「+」(加號)。如:

>>> print(1+2+3)    //按整數進行相加操作 6 >>> print('1'+'2'+'3')    //字符連接操作。 123 >>>

1.2、import語句:把某件事作為另一件事導入

從模塊導入函數方法一:import somemodule

從模塊導入函數方法二:from somemodule import somefunction

從模塊導入函數方法三:from somemodule import somefunction,anotherfunction,yetanotherfunction

從模塊導入函數方法四:from somemodule import *

從模塊導入函數方法五:import math as foobar    //增加模塊別名,關鍵字as 後為模塊的別名

從模塊導入函數方法六:from math import sqrt as foobar    //增加函數別名,關鍵字as後為函數別名

如:from module1 import open as open1

                    from module2 import open as open2

只有確定自己想要從給定的模塊中導入所有功能時,才應該使用方法四。如果一個函數在兩個模塊中都有,如open函數,可以使用方法一導入,然後像下面這樣使用函數:

module1.open(…)

module2.open(…)

1.3、賦值語句

a)、序列解包:多個賦值同時進行(兩邊的變量需數量一致)

如:

python3.x中>>> x,y,z=1,2,3>>> x1>>> y2>>> z3>>> print(x,y,z)1 2 3>>>

python2.x中>>> x,y,z=1,2,3>>> x1>>> y2>>> z3>>> >>> print(x,y,z)(1, 2, 3)

>>> x,y,z=1,2,3     >>> print(x,y,z) (1, 2, 3) >>> x,y,z=z,x,y        //交換變量 >>> print(x,y,z) (3, 1, 2) >>>

備註:序列解包(或叫迭代解包)將多個值的序列解開,然後放到變量的序列中。更形象的表示方法如:

>>> values=1,2,3 >>> values (1, 2, 3) >>> x,y,z=values >>> print(x,z,y) (1, 3, 2) >>>

取字典中的鍵-值對:

>>> d={'name':'zhangsan','age':'30'} >>> d {'age': '30', 'name': 'zhangsan'} >>> key,value=d.popitem()    //用popitem方法(隨機取字典中的鍵-值對刪除)賦值給變量(key、value)。 >>> key 'age' >>> value '30' >>> print(key,value) ('age', '30') >>> d {'name': 'zhangsan'} >>>

b)、鏈式賦值:

鏈式賦值(chained assigment)是將同一個值賦給多個變量的捷徑。

如:

>>> x=y=1>>> x1>>> y1>>>

等同於:>>> y=1>>> x=y>>> x1>>>

c)、增量賦值(+=、-=、*=、=、%=)

x+=1: 即x=x+1,其他增量類似。

注意:對於其他數據類型同樣適用(只要二元運算符本身適用於這些數據類型即可):

如:

>>> a='love' >>> a+='u' >>> a 'loveu' >>> a*=3 >>> a 'loveuloveuloveu' >>> 二、語句塊

語句塊是在條件為真(條件語句)時執行或者執行多次(循環語句)的一組語句。在代碼前放置空格來縮進語句即可創建語句塊。當然tab字符也可以縮進語句塊,一個tab為8個空格,建議用空格縮進

很多編程語言使用特殊單詞或者字符(比如begin或{ )來表示一個語句塊的開始,用另外的單詞(end或者 })來表示語句塊的結束。在python中,冒號(:)用來標識語句塊的開始,塊中的每一個語句都是縮進的(縮進量相同)。當回退到和已經閉合的塊一樣的縮進量時,表示當前語句塊結束。

三、條件和條件語句:

1、 布爾值:真(True)、假(False)。//注意字符的大小寫 

在python中被看作布爾值-假(flase)的值:False、None、0、" "、( )、[ ] 、{ }。

bool函數可以用來轉換其他值為布爾值:

如:

>>> bool(12) True >>> 2、條件執行和if語句

a)、if語句:

格式:if 條件:語句     //如果if後面的條件為真,就執行後面的語句。

b)、else子句: else子句不能單獨使用,必須作為if的子句執行,且只有在if條件不滿足才執行。

格式:

if 條件:語句

else:語句

>>>name='123'

>>> if name=='1234':print("hello") … else:    //else後面沒有條件語句 …   print("hello world") … hello world >>>

c)、elif子句 (如果有else子句,一般把else子句放在最後) 如果要檢查多個條件,則使用elif,它是else if的縮寫。它是具有條件的else子句。

如:

>>> name='123' >>> if name=='1234':print("no true") … elif name==123:print("it's right")        //注意elif後面有條件 … else:print("fo 123") … fo 123 >>>

d)、條件:

d1)、條件運算(比較運算符)

表達式

描述

x==y

x等於y

x<y

x小於y

x>y

x大於y

x>=y

x大於等於y

x<=y

x小於等於y

x!=y

x不等於y

x is y

x和y是同一個對象

x is not y

x和y是不同的對象

x in y

x是容器(如序列、字典)y的成員

x not in y

x不是容器y的成員

注意:x和y應該是相同(相近)類型的數據類型,否則比較無實際意義。同時:不建議使用x<>y表達式,雖然它的意思是x!=y。

在python中比較運算和賦值運算一樣是可以連接的—-幾個運算符可以連在一起使用,比如: 0<age<100.

d2)、相等運算符(==)

之所以用兩個==來表示兩個值是否相等,是因為一個「=「表示賦值運算。

d3)、同一性運算符(is)

>>> x=y=[1,2,3]>>> z=[1,2,3]>>> x is yTrue>>> x is zFalse>>>

解釋:x、y、z是一樣的列表,x is y的值是True,x is z的值是false

d4)、成員資格運算(in)

>>> name='12345678' >>> if '4' in name: print("it's ok") … else:print("it's worng") … it's ok >>>

d5)、字符串和序列比較:(實際的順序可能會因為使用不同的locale有所不同)

字符串可以按照字母順序排列進行比較。

>>> "abc"<"abg" True >>> d6)、布爾運算符(and、or、not):布爾運算符可以結合使用。

布爾運算符可以連接兩個或多個布爾值

如:

>>> x=3 >>> if x<10 and x>0 :print("hello world") … else:print("no user num") … hello world >>>

注意:布爾運算符也被叫做短路運算符。如表達式x and y,如果x為假,表達式就會立刻返回false,而不管y的值。同樣在表達式x or y中,如果x為真,則會立刻返回x的值,而不管y的值;如果x的值為假,繼續執行y的運算。

例子:當用戶可以輸入用戶名也可以不輸入:

>>> name=input("enter ur name:") or "<unknown>"  enter ur name:>>> name'<unknown>'>>>

解釋:  python3.x中可以執行,在python2.x會報錯。它表示如果輸入名字的話,就不執行or後面的語句,並將值賦值給name,否則將<unkown>賦值給name.

d7)、斷言 (使用關鍵字assert)

作用:有時當程序在條件不滿足時,會導致程序崩潰。當使用assert關鍵字時,可以檢查出在條件不滿足時直接讓他崩潰,這樣可以作為程序初期測試和調試過程中的輔助條件。

如:

>>> age=10 >>> assert 0<age<100 >>> assert 0<age<10 Traceback (most recent call last):   File "<stdin>", line 1, in <module> AssertionError >>> >>> assert 0<age<10,'this age must be reallistic'    //使用assert條件時,可以添加字符串, Traceback (most recent call last):       File "<stdin>", line 1, in <module> AssertionError: this age must be reallistic >>>

3、循環:

a)、while循環    (用來在任何條件為真的情況下重複執行一個代碼塊。)

//需要注意的是語句塊的書寫,否則python編輯器不知道怎麼執行(哪裡開始,哪裡結束)

x=1 while x<=100: print (x) x+=1


name=''   //name被賦予空值(布爾值:假),注意:''兩個單引號之間沒有空格,有空格表示空格字符 while not name:     name=input("enter ur name:") print("hello %s" % name) 執行結果:

admin@open:~> python3.4 while1.py     //在python2.x中執行一次,就會報錯退出 enter ur name: enter ur name: enter ur name:zhangsan hello zhangsan admin@open:~>

如果空格作為名字,即name=『  『,python會認為name為空格字符,不會判定為假。

修改的辦法一:while not name or name.isspace()

修改的辦法二:while not name.strip()。


b)、for循環 (能使用for循環,就盡量不要使用while循環)

>>> words=[1,2,3,4] >>> for word in words : print (word) … 1 2 3 4 >>>

>>> for num in range(1,10):print(num)    //range函數包括下限,但不包括上限。 … 1 2 3 4 5 6 7 8 9 >>> >>> range(0,10) range(0, 10) >>> b1)、循環遍歷字典元素

for語句循環字典所有值:

反轉和排序迭代(reversed,sorted);sorted返回列表,而reversed返回一個對象(不能理解的對象)。

c)、跳出循環:提前結束循環,即使執行條件滿足為真。

c1)、break

>>> for n in range(99,0,-1): …     root=sqrt(n) …     if root==int(root):        //如果root和取整的root一樣 則輸出n。 …         print(n) …         break … 81 >>>

c2)、continue :結束當前剩餘循環體語句,但是不結束循環,跳到下一循環體並開始執行。

for x in seq:

    if condition1:continue

    if condition2:continue

    if condition3:continue

    do_something()

    do_something_else()

    do_another_thing()

    etc()

很多時候,只要使用if語句就可以:

for x in seq:

    if not (condition1 or condition2 or condition3):

        do_something()

        do_something_else()

        do_another_thing()

        etc()

c3)、while True/break習語:

while True:        //循環條件一直為真   word=str(input('enter a word:'))   if not word:break        //循環體語句,如果不滿足if條件則跳出循環,否則執行下一個語句。   print('the word is:'+word)

c4)、循環中的else子句:

from math import sqrt for n in range(99,80,-1):         root=sqrt(n)         if root==int(root):                 print(n)                 break         else:                 print("didn't find it!") d)、列表推導式(輕量級循環):

列表推導式(list comprehension)是利用其他列表創建新列表的一種方法,類似for循環。

如:

>>> [x*x for x in range(10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> >>> [pow(2,x) for x in range(16)] [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768]

>>> [(x,y) for x in range(3) for y in range(3)]        //增多的for語句部分,注意range()不包括右上限 [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)] >>> [pow(x,y) for x in range(3) for y in range(3)] [1, 0, 0, 1, 1, 1, 1, 2, 4] >>>

>>> result=[] >>> for x in range(3): …  for y in range(3): …   result.append((x,y)) … >>> result [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)] >>>

e)、pass :什麼都不做,一般用來作程序的站位語句。

f)、del:刪除,刪除不再使用的對象(如:列表、字典)。

g)、exec和eval執行和求值字符串。