第一題:求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]) # 打印