五天學會Python基礎02(上)

循環結構

應用場景

如果在程序中我們需要重複的執行某條或某些指令,例如用程序控制機器人踢足球,如果機器人持球而且還沒有進入射門範圍,那麼我們就要一直髮出讓機器人向球門方向奔跑的指令。

當然你可能已經注意到了,剛才的描述中不僅僅有需要重複的動作,還需要用到上一章講的分支結構。

再舉一個簡單的例子,我們要實現一個每隔1秒中在屏幕上打印一次"hello, world"並持續打印一個小時的程序,我們肯定不能夠直接把print('hello, world')這句代碼寫3600遍,如果真的要這樣做,那麼編程的工作就太無聊乏味了。

因此,我們還需要了解一下循環結構,有了循環結構我們就可以輕鬆的控制某件事或者某些事重複、重複、再重複的去執行。

在Python中構造循環結構有兩種做法,一種是for-in循環,一種是while循環。

for-in循環

如果明確的知道循環執行的次數或者要對一個容器進行迭代(後面會講到),那麼我們推薦使用for-in循環,例如下面代碼中計算1~100求和的結果。

<code> 

""" 用for循環實現1~100求和 """

sum =

0

for

x

in

range(

101

): sum += x print(sum) /<code>

需要說明的是上面代碼中的range(101)可以用來構造一個從0到100的取值範圍,這樣就可以構造出一個整數的序列並用於循環中,例如:

  • range(101)可以產生一個0到100的整數序列。
  • range(1, 100)可以產生一個1到99的整數序列。
  • range(1, 100, 2)可以產生一個1到99的奇數序列,其中2是步長,即數值序列的增量。

知道了這一點,我們可以用下面的代碼來實現1~100之間的偶數求和。

<code>

""" 用for循環實現1~100之間的偶數求和 """

sum =

0

for

x

in

range(

2

,

101

,

2

): sum += x print(sum) /<code>

也可以通過在循環中使用分支結構的方式來實現相同的功能,代碼如下所示。

<code>

""" 用for循環實現1~100之間的偶數求和 """

sum =

0

for

x

in

range(

1

,

101

):

if

x %

2

==

0

: sum += x print(sum) /<code>

while循環

如果要構造不知道具體循環次數的循環結構,我們推薦使用while循環。

while循環通過一個能夠產生或轉換出bool值的表達式來控制循環,表達式的值為True循環繼續,表達式的值為False循環結束。

下面我們通過一個“猜數字”的小遊戲(計算機出一個1~100之間的隨機數,人輸入自己猜的數字,計算機給出對應的提示信息,直到人猜出計算機出的數字)來看看如何使用while循環。

<code>

""" 猜數字遊戲 計算機出一個1~100之間的隨機數由人來猜 計算機根據人猜的數字分別給出提示大一點/小一點/猜對了 """

import

random answer = random.randint(

1

,

100

) counter =

0

while

True

: counter +=

1

number = int(input(

'請輸入: '

))

if

number < answer: print(

'大一點'

)

elif

number > answer: print(

'小一點'

)

else

: print(

'恭喜你猜對了!'

)

break

print(

'你總共猜了%d次'

% counter)

if

counter >

7

: print(

'你的智商餘額明顯不足'

) /<code>

上面的代碼中使用了break關鍵字來提前終止循環,需要注意的是break只能終止它所在的那個循環,這一點在使用嵌套的循環結構(下面會講到)需要引起注意。

除了break之外,還有另一個關鍵字是continue,它可以用來放棄本次循環後續的代碼直接讓循環進入下一輪。

和分支結構一樣,循環結構也是可以嵌套的,也就是說在循環中還可以構造循環結構。

下面的例子演示瞭如何通過嵌套的循環來輸出一個九九乘法表。

<code>

""" 輸出乘法口訣表(九九表) """

for

i

in

range(

1

,

10

):

for

j

in

range(

1

, i +

1

): print(

'%d*%d=%d'

% (i, j, i * j), end=

'\t'

) print() /<code>

練習

練習1:輸入一個正整數判斷是不是素數。

提示:素數指的是隻能被1和自身整除的大於1的整數。

參考答案:

<code>

""" 輸入一個正整數判斷它是不是素數 """

from

math

import

sqrt num = int(input(

'請輸入一個正整數: '

)) end = int(sqrt(num)) is_prime =

True

for

x

in

range(

2

, end +

1

):

if

num % x ==

0

: is_prime =

False

break

if

is_prime

and

num !=

1

: print(

'%d是素數'

% num)

else

: print(

'%d不是素數'

% num) /<code>

練習2:輸入兩個正整數,計算它們的最大公約數和最小公倍數。

參考答案:

<code>

""" 輸入兩個正整數計算它們的最大公約數和最小公倍數 """

x = int(input(

'x = '

)) y = int(input(

'y = '

))

if

x > y: x, y = y, x

for

factor

in

range(x,

0

,

-1

):

if

x % factor ==

0

and

y % factor ==

0

: print(

'%d和%d的最大公約數是%d'

% (x, y, factor)) print(

'%d和%d的最小公倍數是%d'

% (x, y, x * y // factor))

break

/<code>

練習3:打印如下所示的三角形圖案。

<code>

*

**

***

***

*

*****

/<code>
<code>

*

**

***

***

*

*****

/<code>
<code>

*

***

*****

*****

**

*****

***

* /<code>

參考答案:

<code>

""" 打印三角形圖案 """

row = int(input(

'請輸入行數: '

))

for

i

in

range(row):

for

_

in

range(i +

1

): print(

'*'

, end=

''

) print()

for

i

in

range(row):

for

j

in

range(row):

if

j < row - i -

1

: print(

' '

, end=

''

)

else

: print(

'*'

, end=

''

) print()

for

i

in

range(row):

for

_

in

range(row - i -

1

): print(

' '

, end=

''

)

for

_

in

range(

2

* i +

1

): print(

'*'

, end=

''

) print()/<code>


分享到:


相關文章: