一,while迴圈:
1,功能:重複執行同一段程式碼
語法:
while 條件表示式:
# 迴圈體
當條件表示式的返回值為真時,則執行迴圈體中的語句,
執行完畢後,重新判斷條件表示式的返回值,
如果表示式返回的結果為假,則退出迴圈體
2,流程圖:
3,列印從1到10
1
2
3
4
5
|
# 列印從1到10 n = 1 while n < = 10 : print (n, end = " " ) n + = 1 |
執行結果:
1 2 3 4 5 6 7 8 9 10
說明:劉宏締的架構森林—專注it技術的部落格,
網址:https://imgtouch.com
本文: https://blog.imgtouch.com/index.php/2024/03/22/python-suan-fa-fen-tang-guo/
程式碼: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
說明:作者:劉宏締 郵箱: 371125307@qq.com
二,分糖果的題目與解析
1,題目:
10個小孩圍成一圈分糖果,老師分給第1個小孩10塊,
第2個小孩2塊,
第3個小孩8塊,
第4個小孩22塊,
第5個小孩16塊,
第6個小孩4塊,
第7個小孩10塊,
第8個小孩6塊,
第9個小孩14塊,
第10個小孩20塊。
然後所有糖塊數為偶數的小孩將手中的糖分一半給右邊的小孩;所有糖塊數為奇數的人可向老師要一塊再分一半給右邊小孩。
問:經過這樣幾次後大家手中的糖一樣多?每人各有多少塊糖?
2,解析:
思路:
10個小孩開始時所擁有的糖果數是不同的,但分糖的動作卻是相同的,
即“所有的小孩同時將手中的糖分一半給右邊的小孩;糖塊數為奇數的人可向老師要一塊”。
所以是一個典型的可使用迴圈結構來解決的問題。
將老師開始給每個小孩分配的糖果數作為迴圈的初始條件,
以“所有的小孩同時將手中的糖分一半給右邊的小孩;糖塊數為奇數的人可向老師要一塊”這個重複的動作作為迴圈體,
迴圈的結束條件為所有小孩手中的糖塊數一樣多。
三,編寫程式碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# 函式:判斷列表中各成員是否相等 # candy:儲存糖果數量的列表 def judge(candy): for i in range ( 0 , 10 ): if candy[ 0 ] ! = candy[i]: return 1 # 不相同返回1 return 0 # 相同返回0 # 輸出列表中每個元素的值 # s: 要列印的列表 # j: 需要列印的次數計數器 def print_result(s, j): print ( "%4d" % j, end = " " ) for k in range ( 10 ): # 列印列表 print ( "%4d" % s[k], end = " " ) print () # 換行 # 分糖的函式 # sweet: 儲存糖果數量的列表 # j: 計數器,記錄分糖的次數 def giveSweets(sweet, j): t = [ 0 ] * 10 # 臨時表,儲存每次分出去的一半糖 while (judge(sweet)): # 若不滿足要求則繼續迴圈 # 將每個孩子手中的糖果數平分為兩份,放到t列表中 for i in range ( 0 , 10 ): if sweet[i] % 2 = = 0 : # 若為偶數則直接分出一半 sweet[i] = sweet[i] / / 2 t[i] = sweet[i] else : # 若為奇數則加1後再分出一半 sweet[i] = (sweet[i] + 1 ) / / 2 t[i] = sweet[i] # 將分出的一半糖果t[n] 給右邊的孩子 sweet[n + 1] for n in range ( 0 , 9 ): sweet[n + 1 ] = sweet[n + 1 ] + t[n] sweet[ 0 ] + = t[ 9 ] # 第10個分出去的一個t[9],給第一個孩子:sweet[0] j + = 1 # 計數器加1 print_result(sweet, j) # 列印本次分糖後的結果 # 定義列表sweet,儲存老師給每個孩子分配的糖果數 # sweet[0]=10表示第一個小孩的糖果數為10,以此類推 sweet = [ 10 , 2 , 8 , 22 , 16 , 4 , 10 , 6 , 14 , 20 ] print ( "次數 各人糖果數" ) j = 0 # 計數器,儲存分糖的次數 # 輸出每個孩子手中的糖果數 print ( "%4d" % j, end = " " ) for i in range ( len (sweet)): print ( "%4d" % sweet[i], end = " " ) print () # 開始分糖 giveSweets(sweet, j) # 呼叫分糖果函式 |
執行結果:
次數 各人糖果數
0 10 2 8 22 16 4 10 6 14 20
1 15 6 5 15 19 10 7 8 10 17
2 17 11 6 11 18 15 9 8 9 14
3 16 15 9 9 15 17 13 9 9 12
4 14 16 13 10 13 17 16 12 10 11
5 13 15 15 12 12 16 17 14 11 11
6 13 15 16 14 12 14 17 16 13 12
7 13 15 16 15 13 13 16 17 15 13
8 14 15 16 16 15 14 15 17 17 15
9 15 15 16 16 16 15 15 17 18 17
10 17 16 16 16 16 16 16 17 18 18
11 18 17 16 16 16 16 16 17 18 18
12 18 18 17 16 16 16 16 17 18 18
13 18 18 18 17 16 16 16 17 18 18
14 18 18 18 18 17 16 16 17 18 18
15 18 18 18 18 18 17 16 17 18 18
16 18 18 18 18 18 18 17 17 18 18
17 18 18 18 18 18 18 18 18 18 18