第六章 Loop [迴圈]-習題
習題一
金字塔是世界七大奇景之一,請利用for迴圈寫出如下圖所示的4層金字塔圖形。
>>>
*
* *
* * *
* * * *
>>>
*
* *
* * *
* * * *
>>>
觀看解答
for i in range(4): # 總共有4層 for j in range(4 - i - 1): # 在第一個*號出現前,先印出空白 print(" ", end = "") for k in range(i + 1): # 印出該層所需要的*字數量 print("* ", end = "" ) print() # 換行習題二
請寫一支程式能夠輸入兩個數字,然後輸出這兩個數字的最大公因數。
請寫一支程式能夠輸入兩個數字,然後輸出這兩個數字的最大公因數。
觀看解答
first = int(input("第一個數字: ")) second = int(input("第二個數字: ")) while( first > 0 and second > 0 ): # 輾轉相除法,算到其中一個數為0為止 if( first > second ): # 大的整除小的,並取餘數 (輾轉相除法算法) first = first % second else: second = second % first if( first == 0 ): # 其中一個為0,則另一個數將會是原來這2個數的最大公因數 print("最大公因數為" + str(second)) else: print("最大公因數為" + str(first))習題三
讓使用者輸入一個正整數n,求出1! + 2! + 3! + … + n!之值並輸出。
讓使用者輸入一個正整數n,求出1! + 2! + 3! + … + n!之值並輸出。
觀看解答
num = int(input("請輸入一個正整數: ")) factorialSum = 0 for i in range(num): # 階層的和 factorial = 1 for j in range(i+1): # 階層 factorial *= (j+1) factorialSum += factorial print(factorialSum)習題4
請撰寫程式輸出500以內的完全數。其中,完全數代表一正整數,除其自身以外之所有因數的和恰好為該數。例如,6為第一個完全數,6除自身以外的因數有1、2、3,則6 = 1 + 2 + 3。
請撰寫程式輸出500以內的完全數。其中,完全數代表一正整數,除其自身以外之所有因數的和恰好為該數。例如,6為第一個完全數,6除自身以外的因數有1、2、3,則6 = 1 + 2 + 3。
觀看解答
for i in range(2, 501): # 檢驗2~500間的所有數 facSum = 1 # 變數「不包含自身的因數和」,因必有因數1所以預設為1 for j in range(2, int(i**0.5)+1): # 檢驗因數 if (i % j == 0): if(i / j == j): # 若i為平方數,則找到j 1個因數 facSum += j else: # 若i不為平方數,則找到j 及 i/j 2個因數 facSum += j + int(i/j) if (facSum == i): print(str(i), end=' ') print("為完全數")觀看解答
count = int(input("請輸入項數: ")) if(count >= 1): print(str(0), end = ' ') if(count >= 2): print(str(1), end = ' ') num_1 = 0 num_2 = 1 for i in range(2, count): print(str(num_1 + num_2), end = ' ') tm = num_1 num_1 = num_2 num_2 = tm + num_2習題6
《孫子算經》裡有個「物不知其數」的問題:「今有物,不知其數,三三數之賸二,五五數之賸三,七七數之賸二。問物幾何?(眼前有一堆物品,不知有多少個。每次取3個,最後剩下2個;每次取5個,最後剩下3個;每次取7個,最後剩下2個。問這堆物品到底有多少個?)」。請利用for迴圈求出該問題的最小解。
《孫子算經》裡有個「物不知其數」的問題:「今有物,不知其數,三三數之賸二,五五數之賸三,七七數之賸二。問物幾何?(眼前有一堆物品,不知有多少個。每次取3個,最後剩下2個;每次取5個,最後剩下3個;每次取7個,最後剩下2個。問這堆物品到底有多少個?)」。請利用for迴圈求出該問題的最小解。
觀看解答
num = 1 while(num%3 != 2 or num%5 != 3 or num%7 != 2): num += 1 print(num)習題7
請寫出一個能判定「猜數字」結果的程式碼,預設答案為1234。
例如:玩家輸入:0243,則輸出1A2B。(A前面的數字表示位置正確的數的個數,B前的數字表示數字正確而位置不對的數的個數。)
請寫出一個能判定「猜數字」結果的程式碼,預設答案為1234。
例如:玩家輸入:0243,則輸出1A2B。(A前面的數字表示位置正確的數的個數,B前的數字表示數字正確而位置不對的數的個數。)
觀看解答
(字串解) Answer = 1234 A = 0 B = 0 Number = input("請輸入你要猜的數字:") for i in range(4): #算出相同位置數字相等的數字有幾個 if (str(Answer)[i] == Number[i]): A += 1 for j in range(4): #算出數字相等的有幾個 for k in range(4): if (str(Answer)[j] == Number[k]): B += 1 B -= A # B 為數字相等位置不同的數量 print("%dA%dB" % (A, B)) (算術解) Answer = 1234 A = 0 B = 0 Number = input("請輸入你要猜的數字:") for i in range(4): #算出相同位置相等的數字有幾個 if ( (Answer//(10**i))%10 == (int(Number)//(10**i))%10 ): A += 1 for j in range(4): #算出數字相等的有幾個 for k in range(4): if ( (Answer//(10**j))%10 == (int(Number)//(10**k))%10 ): B += 1 B -= A # B 為數字相等位置不同的數量 print("%dA%dB" % (A, B))習題8
請撰寫一個程式,讓使用者輸入一正數N,再利用二分逼近法求N的平方根並輸出。
請撰寫一個程式,讓使用者輸入一正數N,再利用二分逼近法求N的平方根並輸出。
觀看解答
N = int(input("請輸入一個正數: ")) a = x = 0 b = N while(1): if(x == (a + b)/2): # 若x已無變化,已經趨近到精度極限 break else: x = (a + b)/2 # 新的x if(x**2)>N: # 重新設定邊界 b = x else: a = x print(str(N) + "的平方根為" + str(x))習題9
預設一個List = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0],利用氣泡排序法將其元素由小到大排列後輸出。氣泡排序法:(1) 比較相鄰的兩個元素,若前面的元素較大就進行交換。(2) 重複進行(1)的動作直到最後面,最後一個元素將會是最大值。(3) 重複進行(1)、(2)的動作,每次比較到上一輪的前一個元素。(4) 重複進行以上動作直到沒有元素需要比較。
預設一個List = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0],利用氣泡排序法將其元素由小到大排列後輸出。氣泡排序法:(1) 比較相鄰的兩個元素,若前面的元素較大就進行交換。(2) 重複進行(1)的動作直到最後面,最後一個元素將會是最大值。(3) 重複進行(1)、(2)的動作,每次比較到上一輪的前一個元素。(4) 重複進行以上動作直到沒有元素需要比較。
觀看解答
List = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] for j in range(len(List)-1,0,-1): for i in range(0,j): if (List[i]>List[i+1]): List[i], List[i+1] = List[i+1], List[i] print(List)習題10
讓使用者輸入一串數字,再倒序後輸出。例:輸入「123456」;輸出「654321」。
讓使用者輸入一串數字,再倒序後輸出。例:輸入「123456」;輸出「654321」。