1. 程式人生 > >【Python】05、python程序結構控制語句

【Python】05、python程序結構控制語句

python


一、程序結構

程序結構:語句和表達式按照什麽樣的順序執行

所有語言無非就三種程序結構:

順序:默認結構

語句從上到下依次一行一行的執行,

分支:選擇一個分支執行,永遠最多只執行一個分支

循環


、分支結構語句

1、Python的比較操作

所有的Python對象都支持比較操作,可用於測試相等性、相對大小等

如果是復合對象,Python會檢查其所有部分,包括自動遍歷各級嵌套對象,直到可以得出最終結果


測試操作符:

==”操作符測試值的相等性

is”表達式測試對象的一致性

還有很多比如: <,>,=,


Python中不同類型的比較方法:

數字:通過相對大小進行比較

字符串:按照字典次序逐字符進行比較

列表和元組:自左至右比較各部分內容

字典:對排序之後的(鍵、值)列表進行比較


Python中真和假的含義

非零數字為真,否則為假

非空對象為真,否則為假

None則始終為假


組合條件測試

and

or

not 非運算:返回True或False


註意Python中,and和or運算會返回真或假的對象,而不是True或False,

and和or是短路操作符


2、分支結構

if boolean_expression1: # boolean_expression 布爾表達式可為真可為假

suite1

elif boolean_expression2:

suite2

else:

else_suite


elif 語句是可選的,else語句也是可選的

僅用於占位,而後再填充相關語句時,可以使用pass

In [168]: a = 5            # 主幹

In [169]: if a < 10:       # 分支結構
     ...:     print("a less than 10")      # 分支結構
     ...: print(a)         # 主幹
     ...: 
a less than 10
5

In [41]: x=3
 
In [42]: y=4
 
In [45]: if x<y:            # 單分支
    print y
   ....:     
4
 
 
In [48]: if x<y:              # 雙分支
   ....:     print "the max number is: %d" %y
   ....: else:
   ....:     print "the max number is: %d" %x
   ....:     
the max number is: 4
 
 
In [51]: if x<y:             # 多分支
   ....:    print y
   ....:elif x>y:
   ....:    print x
   ....:else:    
   ....:   print x,y
   ....:     
4


3、if/else三元表達式

通常在為某變量設定默認值時通常用到的如下格式

if X:

A = Y

else:

A = Z


可以改寫為如下簡短格式:

A = Y if X else Z # 如果X是True則,A=Y,否則A=Z


其通用條件表達式語法格式為:

expression1 if boolean_expressionelse expression2

表達式1 條件(布爾表達式) 表達式2

如果boolean_expression的值為True,則條件表達式的結果為expression1,否則為expression2


三、循環結構語句

1、循環機制及應用場景

while循環

用於編寫通用叠代結構

頂端測試為真即會執行循環體,並會重復多次測試直到為假後執行循環後的其它語句


for循環

一個通用的序列叠代器,用於遍歷任何有序的序列對象內的元素

可用於字符串、元組、列表和其它的內置可叠代對象,以及通過類所創建的新對象


2、while

語法格式:

while boolean_expression:

while_suite

else:

else_suite


else分支為可選部分

只要boolean_expression的結果為True,循環就會執行;

boolean_expression的結果為False時終止循環,此時如果有else分支,則會執行一次。

一定要有某種機制來退出循環,通常是在需循環體裏修改條件

In [183]: i = 0

In [184]: while i < 10:
     ...:     print(i)
     ...:     i += 1
     ...:     
0
1
2
3
4
5
6
7
8
9


3、for/in

語法格式:

for expression1 in iterable: # interable為可叠代對象

for_suite

else:

else_suite

通常,expression或是一個單獨的變量,或是一個變量序列,一般以元組的形式給出

如果以元組或列表用於expression,則其中的每個數據項都會拆分到表達式的項,

In [191]: for i in range(10):
     ...:     print(i)
     ...:     
0
1
2
3
4
5
6
7
8
9

for/in循環中永遠不要修改可叠代對象


3、break、continue 、pass 和else

break

跳出所處的最近層循環

continue

跳過循環題剩下的部分,跳到所處的最近層循環的開始處;

break,continue 只能出現在循環結構中

In [200]: for i in range(10):
     ...:     if i == 5:
     ...:         continue
     ...:     print(i)
     ...:     
0
1
2
3
4
6
7
8
9

In [201]: for i in range(10):
     ...:     if i == 5:
     ...:         break
     ...:     print(i)
     ...:     
0
1
2
3
4


pass

占位語句

當語法需要語句但還沒有任何實用語句可寫時使用

else代碼塊

只要循環是正常終止,else分支就會執行

在由於break語句、或由於返回語句(如果循環在函數或方法內)、或由於發生異常導致跳出循環,則else分支不會執行


4、循環語法格式擴展

語法格式:

while boolean_expression1:

while_suite

if boolean_expression2:

break

if boolean_expression3:

continue

else:

else_suite


for expressionin1 iterable:

for_suite

if boolean_expression2:

break

if boolean_expression3:

continue

else:

else_suite

In [85]: url="www.magedu.com";x=0
 
In [86]: while url:
   ....:     print url
   ....:     url=url[:-1]
   ....:     x +=1
   ....:     if x>7:
   ....:         break
   ....: else:
   ....:     print "game over"
   ....:     
www.magedu.com
www.magedu.co
www.magedu.c
www.magedu.
www.magedu
www.maged
www.mage
www.mag
 
In [87]:


死循環

while True:

shile_suite

沒有退出條件,一直執行循環體



練習:

1、求100萬以內的所有素數

假如a*b=c(a、b、c都是整數),那麽我們稱a和b就是c的因數。

質數:又稱素數,除了1和它本身以外不再有其他因數的數稱為質數。

0和1都既不是質數也不是合數

為什麽質數檢驗到N的開方就可以結束了?

因為所有N的除數都是以根號N為軸對稱的

假如一個數N是合數,它有一個約數a,a×b=N,則a、b兩個數中必有一個大於或等於根號N,一個小於或等於根號N因此,只要小於或等於根號N的數(1除外)不能整除N,則N一定是素數.

所以判斷一個數為質數與否的復雜度為O(根號N)


判斷一個數是否素數的方法:

In [6]: x = 10

In [7]: for i in range(2, x):
   ...:     if x % i == 0:
   ...:         break
   ...: else:
   ...:     print(x)
   ...:     

In [8]: x = 7

In [9]: for i in range(2, x):
   ...:     if x % i == 0:
   ...:         break
   ...: else:
   ...:     print(x)
   ...:     
7

100以內的素數及其總個數:

In [25]: c = 0

In [26]: for x in range(2, 100):
    ...:     for i in range(2, x):
    ...:         if x % i == 0:
    ...:             break
    ...:     else:
    ...:         print(x)
    ...:         c += 1
    ...: print("sum is: ",c)
    ...: 
    ...: 
    ...: 
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
sum is:  25

100W以內的素數個數:

In [41]: c = 0
In [42]: for x in range(2, 1000000):
    ...:     for i in range(2, int(x ** 0.5) + 1):
    ...:         if x % i == 0:
    ...:             break
    ...:     else:
    ...:         c += 1
    ...: print(c)
    ...: 
78498


2、求任意整數的級數和

無窮級數中,幾何級數又稱為等比級數

幾何級數(即等比級數)的和為:當︱q︱<1 時a+aq+aq^2+……+aq^n+……=a/(1-q)

           sum = 0
In [44]: for n in range(11):
    ...:     sum += 3 * 2**n
    ...:     print(sum)
    ...:     
3
9
21
45
93
189
381
765
1533
3069
6141
 
In [45]


3、求菲波那切數列的第101位

斐波那契數列指的是這樣一個數列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........

這個數列從第3項開始,每一項都等於前兩項之和

In [52]: for i in range(0, 102):
    ...:     if i == 0:
    ...:         y = 1
    ...:     elif i == 1:
    ...:         x = 1
    ...:         y = 1
    ...:     else:
    ...:         tmp = y
    ...:         y = x + y
    ...:         x = tmp
    ...: print(y)
    ...: 
927372692193078999176
 
 
In [21]: a=0
 
In [22]: b=1
 
In [23]: i=0
 
In [24]: while i <= 101:
    ...:     print(b)
    ...:     a, b, i= b, a+b, i+1
    ...:     
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903
2971215073
4807526976
7778742049
12586269025
20365011074
32951280099
53316291173
86267571272
139583862445
225851433717
365435296162
591286729879
956722026041
1548008755920
2504730781961
4052739537881
6557470319842
10610209857723
17167680177565
27777890035288
44945570212853
72723460248141
117669030460994
190392490709135
308061521170129
498454011879264
806515533049393
1304969544928657
2111485077978050
3416454622906707
5527939700884757
8944394323791464
14472334024676221
23416728348467685
37889062373143906
61305790721611591
99194853094755497
160500643816367088
259695496911122585
420196140727489673
679891637638612258
1100087778366101931
1779979416004714189
2880067194370816120
4660046610375530309
7540113804746346429
12200160415121876738
19740274219868223167
31940434634990099905
51680708854858323072
83621143489848422977
135301852344706746049
218922995834555169026
354224848179261915075
573147844013817084101
927372692193078999176
 
In [25]:


【Python】05、python程序結構控制語句