• 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:
    ')
     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])  # 打印
  • 相关阅读:
    gbk与utf-8转换
    gdb注意事项
    Ubuntu导入证书
    Ubuntu 修改hosts
    GDB配置与.gdbinit的编写
    linux中用户的主目录~
    关于C++构造函数初始化顺序
    C++中的static关键字的总结
    Flutter移动电商实战 --(2)建立项目和编写入口文件
    Flutter移动电商实战 --(1)项目学习记录
  • 原文地址:https://www.cnblogs.com/Estate-47/p/9952439.html
Copyright © 2020-2023  润新知