python常見循環練習


第一題:求5的階乘

 1 # 方法1,遞歸
 2 def jc(num):
 3     if num == 1:
 4         return 1
 5     else:
 6         return num*jc(num-1)
 7 print(jc(5))
 8 
 9 # 方法2,for遍歷
10 def func(num):
11     sum = 1
12     for i in range(1,num+1):
13         sum*=i
14     return sum
15 func(5)
16 print(func(5))

1 # 方法3,lambda表達式
2 # lambda不能調用數組,如列表。
3 #  這里需要借助一個函數去做(這個函數調用了lambda表達式作為參數,即需要使用高階函數reduce#使用高階函數,
4 # 需要調用一個模塊# 將階乘改成函數形式進行調用functools
5 from functools import reduce
6 print(reduce(lambda x,y:x*y,range(1,6)))
第二題:寫一個函數,求一個字符串的長度,在main函數中輸入字符串,並輸出其長度。
 1 if __name__ == '__main__':
 2     s = input('please input a string:\n')
 3     print ('the string has %d characters.' % len(s))
 4 
 5 def func(a):                             #定義一個求字符串長度的函數
 6     '求一個字符串的長度'
 7     len=0
 8     for i in a:
 9         len+=1
10     return len
11 if __name__=='__main__':                 #main函數, __name__=='__main__'將函數私有化了,外部調用不了main下面的內容。
12 
13     str_input=input('請輸出一個字符串')  #實現在main函數中輸入字符串
14     str_len=func(str_input)              #通過調用外部的函數func(a),並傳遞實際參數str_input,實現在main函數計算字符串長度。
15     print("輸入字符串長度:", str_len)
第三題:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少?
 1 i = 0
 2 for x in range(1,5):
 3     for y in range(1,5):
 4         for z in range(1,5):
 5                 if (x!=y) and (y!=z) and (z!=x):
 6                     i += 1
 7                     if i%4:
 8                         print("%d%d%d" % (x, y, z), end=" | ")
 9                     else:
10                         print("%d%d%d" % (x, y, z))
11 print ("合計個數:",i)
第四題:企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高於10萬元,低於20萬元時,低於10萬元的部分按10%提成,
高於10萬元的部分,可可提成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於40萬元的部分,
可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?
 1 i = int(input('凈利潤:'))
 2 arr = [1000000,600000,400000,200000,100000,0]#分成6段提成
 3 rat = [0.01,0.015,0.03,0.05,0.075,0.1]#每段提成對應的稅率
 4 r = 0
 5 for idx in range(0,6):#索引有6個數
 6     if i>arr[idx]:
 7         r+=(i-arr[idx])*rat[idx]
 8         # print (r)
 9         i=arr[idx]
10 print (r)
第五題:一個整數,它加上100后是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
 1 if __name__=="__main__":
 2     x=1
 3     i=1
 4     while x!=0:
 5         x = int((i+100)**0.5)
 6         y = int((i+100+168)**0.5)
 7         if x*x==(100+i) and y*y==(100+168+i):
 8             print(i)
 9             x = 0
10         i+=1
第六題:水仙花數是指一個 n 位數(n≥3 ),它的每個位上的數字的 n 次冪之和等於它本身。
例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。
 1 解法一:用a,b,c拼湊一個三位數
 2 for a in range(1,10):
 3     for b in range(0,10):
 4         for c in range(0,10):
 5             s1 = a*100+b*10+c
 6             s2 = pow(a,3)+pow(b,3)+pow(c,3)
 7             if s1==s2:
 8                 print('水仙花:%d'%s1)
 9 
10 解法二:直接定義i為水仙花數來求它的元素
11 for i in range(100,1000):
12     s = str(i)
13     if int(s[0])**3+int(s[1])**3+int(s[2])**3==i:
14         print('水仙花:',i)
15 
16 解法三:用divmod根據余數和商來求出三位數
17 for n in range(100,1000):
18     m = n
19     sumValue = 0
20     while(m>0):
21         (m,r) = divmod(m,10)
22         sumValue +=r**3
23     if n ==sumValue:
24         print('水仙花:',n)
第七題:將一個正整數分解質因數,例如:輸入90,打印出90=2*3*3*5
 1 import math
 2 number = int(input("Enter a number: "))
 3 list = []
 4 def getChildren(num):
 5     print('*' * 30)
 6     isZhishu = True
 7     i = 2
 8     square = int(math.sqrt(num)) + 1
 9     while i <= square:
10         if num % i == 0:
11             list.append(i)
12             isZhishu = False
13             getChildren(num / i)
14             i += 1
15             break
16         i += 1
17     if isZhishu:
18         list.append(num)
19 getChildren(number)
20 print(list)
第八題:有一個已經排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中。
 1 if __name__ == '__main__':
 2 
 3     a = [1,13,28,40,100,0]# 0 作為加入數字的占位符
 4     print('原始列表:')
 5     for i in range(len(a)):
 6         print (a[i],)
 7     number = int(input("插入一個數字:"))
 8     end = a[4]
 9     if number > end:
10         a[5] = number
11     else:
12         for i in range(5):
13             if a[i] > number:
14                 temp1 = a[i]
15                 a[i] = number
16                 for j in range(i + 1,6):
17                     temp2 = a[j]
18                     a[j] = temp1
19                     temp1 = temp2
20                 break
21     print ('排序后列表:')
22     for i in range(6):
23         print (a[i],)
第九題: 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加由鍵盤輸入
注意:第1個 for 循環,range()得從1開始計數,這樣子第2個 for 循環一開始才能至少循環一次(如果 i = 0,那么 range(i) 就循環不起來了。
1 # a = int(input('請輸入數字a:'))
2 # count = int(input('請輸入幾個數相加:'))
3 # res = 0#初始化最終求解
4 # for i in range(1,count+1):#循環次數與輸入的值一樣,但從1開始循環
5 #     t = 0#臨時用的變量
6 #     for j in range(i):
7 #         t = t + 10**j#先計算10**0+10**1+....+10**j
8 #     res  = res +(a*t)#再計算a*t
9 # print(res)
第十題:找出1000以內的所有完數。什么是“完數”:
一個數如果恰好等於它的因子之和,這個數就稱為”完數”。例如6=1+2+3.
 1 for i in range(2,1001):#遍歷1000以內的所有數,從2開始
 2     s = i     #把取出的數賦值給另一個變量s,用於與所有因子作差,如果減去所有因子后結果為0,這個數是完數
 3     for j in range(1,i):   #查找因子
 4         if i % j == 0:     #找出因子
 5             s -=j        #與因子作差
 6     if s == 0:          #判斷是否是完數
 7         print(i)
 8 
 9 完善寫法:
10 for i in range(2, 1001):
11     k = []  # 用於收集一個數的所有因子
12     n = -1  #
13     s = i
14     for j in range(1, i):
15         if i % j == 0:
16             n += 1
17             s -= j
18             k.append(j)  # 收集所有因子
19 
20     if s == 0:
21         print(i, ":")  # 打印完數
22         for j in range(n):  # 遍歷完數的所有因子
23             print(str(k[j]), end='+ ')  # 打印出所有的因子
24         print(k[n])  # 打印

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM