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