一,for迴圈:
1,功能:重複執行同一段程式碼
語法:
for index in range(n):
# 迴圈體程式碼
index : 用來依次接收可迭代物件中的元素的變數名
range()函式:負責返回整數序列
流程圖:
2,應用
range可以同時指定start 和stop,用for遍歷並列印
1
2
3
4
|
# 指定 start和stop # print的引數 end=" " 用來使列印不換行 for num in range ( 3 , 9 ): print (num, end = " " ) |
執行結果:
3 4 5 6 7 8
說明:劉宏締的架構森林—專注it技術的部落格,
網址:https://imgtouch.com
本文: https://blog.imgtouch.com/index.php/2024/03/29/python-suan-fa-huan-ying-bi/
程式碼: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
說明:作者:劉宏締 郵箱: 371125307@qq.com
二,換硬幣的題目與分析
1,題目:
將5元的人民幣兌換成1元、5角和1角的硬幣,
共有多少種不同的兌換方法?
2,分析:
設變數x、y和z分別代表兌換的1元、5角和1角的硬幣的個數
根據題目的要求,可得到如下的方程:以1角為單位:
10X+5y+z=50
根據題意可知x、y和z的取值範圍:
1元硬幣,從0個到5個
5角硬幣, 從0個到10個
1角硬幣, 從0個到50個
為實現該功能,需要使用三個巢狀的for迴圈語句,
根據三個取值範圍迴圈即可
三,編寫程式碼:
1,第一版:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 變數x、y和z分別代表兌換的1元、5角和1角的硬幣所具有的錢數(角) count = 0 # 計數器 print ( "可能的兌換方法如下:" ) for x in range ( 0 , 5 + 1 ): # 1元硬幣,從0個到5個 for y in range ( 0 , 10 + 1 ): # 5角硬幣,最多10個 for z in range ( 0 , 50 + 1 ): # 1角硬幣,最多50個 if x * 10 + y * 5 + z = = 50 : count + = 1 if count % 3 = = 0 : # 每3列一行 print (count, end = " " ) print (f "1元:{x} 5角:{y} 1角:{z} \t" ) else : print (count, end = " " ) print (f "1元:{x} 5角:{y} 1角:{z} \t" , end = " " ) |
執行結果:
可能的兌換方法如下:
1 1元:0 5角:0 1角:50 2 1元:0 5角:1 1角:45 3 1元:0 5角:2 1角:40
4 1元:0 5角:3 1角:35 5 1元:0 5角:4 1角:30 6 1元:0 5角:5 1角:25
7 1元:0 5角:6 1角:20 8 1元:0 5角:7 1角:15 9 1元:0 5角:8 1角:10
10 1元:0 5角:9 1角:5 11 1元:0 5角:10 1角:0 12 1元:1 5角:0 1角:40
13 1元:1 5角:1 1角:35 14 1元:1 5角:2 1角:30 15 1元:1 5角:3 1角:25
16 1元:1 5角:4 1角:20 17 1元:1 5角:5 1角:15 18 1元:1 5角:6 1角:10
19 1元:1 5角:7 1角:5 20 1元:1 5角:8 1角:0 21 1元:2 5角:0 1角:30
22 1元:2 5角:1 1角:25 23 1元:2 5角:2 1角:20 24 1元:2 5角:3 1角:15
25 1元:2 5角:4 1角:10 26 1元:2 5角:5 1角:5 27 1元:2 5角:6 1角:0
28 1元:3 5角:0 1角:20 29 1元:3 5角:1 1角:15 30 1元:3 5角:2 1角:10
31 1元:3 5角:3 1角:5 32 1元:3 5角:4 1角:0 33 1元:4 5角:0 1角:10
34 1元:4 5角:1 1角:5 35 1元:4 5角:2 1角:0 36 1元:5 5角:0 1角:0
2,最佳化迴圈的範圍:
已知1元硬幣的數量時,5角和1角硬幣不需要迴圈全部範圍
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 變數x、y和z分別代表兌換的1元、5角和1角的硬幣所具有的錢數(角) count = 0 # 計數器 print ( "可能的兌換方法如下:" ) for x in range ( 0 , 5 + 1 ): # 1元硬幣,從0個到5個 j5end = int (( 10 * 5 - x * 10 ) / 5 ) # 5角硬幣,最多10個 for y in range ( 0 , j5end + 1 ): j1end = 50 - x * 10 - y * 5 # 1角硬幣,最多50個 for z in range ( 0 , j1end + 1 ): if (x * 10 + y * 5 + z = = 50 ): count + = 1 if count % 3 = = 0 : # 每3列一行 print (count, end = " " ) print (f "1元:{x} 5角:{y} 1角:{z} \t" ) else : print (count, end = " " ) print (f "1元:{x} 5角:{y} 1角:{z} \t" , end = " " ) |
執行結果同上
3,最佳化迴圈的層數:
已知1元硬幣和5角硬幣的數量時,1角硬幣的數量已可以確定,無需再迴圈一層
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 變數x、y和z分別代表兌換的1元、5角和1角的硬幣所具有的錢數(角) count = 0 # 計數器 print ( "可能的兌換方法如下:" ) for x in range ( 0 , 5 + 1 ): # 1元硬幣,從0個到5個 j5end = int (( 10 * 5 - x * 10 ) / 5 ) # 5角硬幣,最多10個 for y in range ( 0 , j5end + 1 ): # 5角硬幣,最多10個 z = 50 - x * 10 - y * 5 if z > = 0 : count + = 1 if count % 3 = = 0 : # 每3列一行 print (count, end = " " ) print (f "1元:{x} 5角:{y} 1角:{z} \t" ) else : print (count, end = " " ) print (f "1元:{x} 5角:{y} 1角:{z} \t" , end = " " ) |
執行結果同上