【Python】Python 100题 分类入门练习题 - 新手友好

06-01 1512阅读

Python 100题 分类入门练习题 - 新手友好篇 - 整合篇

  • 一、数学问题
    • 题目1:组合数字
    • 题目2:利润计算
    • 题目3:完全平方数
    • 题目4:日期天数计算
    • 题目11:兔子繁殖问题
    • 题目18:数列求和
    • 题目19:完数判断
    • 题目21:猴子吃桃
    • 题目24:分数序列求和
    • 题目25:阶乘累加
    • 题目26:阶乘递归
    • 题目28:年龄推理
    • 题目80:猴子分桃问题
    • 题目83:奇数组合数
    • 题目85:9的倍数验证
    • 题目81:数学等式验证
    • 二、字符串操作
      • 题目13:水仙花数
      • 题目17:字符统计
      • 题目33:列表转字符串
      • 题目62:子串查找
      • 题目89:加密算法
      • 题目96:子串计数
      • 题目98:大小写转换
      • 题目60:字符串长度
      • 题目86:字符串连接
      • 题目31:星期判断
      • 三、列表与字典操作
        • 题目5:三数排序
        • 题目38:矩阵对角线
        • 题目44:矩阵相加
        • 题目68:数组循环移位
        • 题目69:约瑟夫环问题
        • 题目72:创建链表
        • 题目73:反向链表
        • 题目100:列表转字典
        • 题目39:数组插入排序
        • 题目67:数组极值交换
        • 题目79:字符串排序
        • 题目66:数组逆序输出
        • 题目40:数组逆序
        • 四、文件操作
          • 题目97:写入文件
          • 题目98:文件保存
          • 题目99:文件合并排序
          • 五、日期时间处理
            • 题目10:格式化时间
            • 题目16:日期输出
            • 题目95:日期解析
            • 题目91:时间函数示例1
            • 题目92:时间函数示例2
            • 题目93:时间函数示例3
            • 题目94:反应速度测试
            • 六、图形绘制
              • 题目56:圆形绘制
              • 题目57:直线绘制
              • 题目58:方形绘制
              • 题目59:综合图形
              • 题目63:椭圆绘制
              • 题目64:图形组合
              • 题目65:艺术图案
              • 题目23:菱形打印
              • 七、算法与数据结构
                • 题目6:斐波那契数列
                • 题目12:素数筛选
                • 题目20:小球弹跳计算
                • 题目22:比赛名单排列
                • 题目61:杨辉三角生成
                • 题目76:分段函数计算
                • 题目77:循环输出列表
                • 题目78:最大年龄查找
                • 题目84:列表极值交换
                • 题目8:九九乘法表
                • 题目9:延时输出
                • 题目14:质因数分解
                • 题目15:成绩分级
                • 八、位运算
                  • 题目51:按位与
                  • 题目52:按位或
                  • 题目53:按位异或
                  • 题目54:位截取
                  • 题目55:按位取反
                  • 题目82:八进制转十进制
                  • 九、其他编程问题
                    • 题目27:递归逆序
                    • 题目29:数字拆分统计
                    • 题目30:回文数判断
                    • 题目32:列表逆序输出
                    • 题目34:三次输出函数
                    • 题目35:文本颜色设置
                    • 题目36:素数筛选
                    • 题目37:十数排序
                    • 题目41:静态变量
                    • 题目42:自动变量
                    • 题目43:静态变量案例
                    • 题目45:数字累加
                    • 题目46:平方阈值判断
                    • 题目47:变量交换
                    • 题目48:数字比较
                    • 题目49:匿名函数
                    • 题目50:随机数生成
                    • 题目71:学生数据IO
                    • 题目87:结构体变量传递
                    • 题目88:星号打印

                      一、数学问题

                      题目1:组合数字

                      题目1: 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
                      # 正常 
                      num =[]
                      for a in range(1,5):
                          for b in range(1,5):
                              for c in range(1,5):
                                  if (a != b and a!= c and b!=c) :  # if a != b != c  只判断了a不等于b,b不等于c,没有判断a和c的关系 
                                      num.append(a*100 + b*10 + c)
                      print(num) 
                      # 简写: 
                      x = [1,2,3,4]
                      num  = [i*100 + j*10 + k for i in x for j in x for k in x if (j != i and k != j and k != i)]
                      # itertools ,结果需处理 
                      import itertools
                      num = [] 
                      x=[1,2,3,4]
                      for i in itertools.permutations(x,3):
                          num.append(i)
                      print(num) 
                      

                      题目2:利润计算

                      题目2:企业发放的奖金根据利润提成。
                      利润(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,求应发放奖金总数?
                      """
                      # 比较简单,直接上答案 
                      def get_bonus(profit):
                          bonus = 0
                          if profit  1:
                          if i % 3 == 0:
                              n.pop(0)
                          else:
                              n.insert(len(n),n.pop(0))   # 同68 考验逻辑
                          i += 1
                      print(n) 
                      

                      题目72:创建链表

                      题目72:创建一个链表。
                      """ 
                      l=[ input("please input a number:\n") for i in range(5)]
                      print(l)
                      

                      题目73:反向链表

                      题目73:反向输出一个链表。
                      """ 
                      l=[ input("please input a number:\n") for i in range(5)]
                      l.reverse()
                      print(l)
                      

                      题目100:列表转字典

                      题目100:列表转换为字典。
                      """ 
                      # 从列表创建字典
                      i = ['a','b','c']
                      l = [1,2,3]
                      b=dict(zip(i,l))
                      print(b)
                      

                      题目39:数组插入排序

                      题目39:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
                      """ 
                      分析: 题目其实说的不太明确,所以要挖掘隐藏条件: 
                           已经排好序则代表按顺序大小排, 新输入的数,也需要从小到大排;
                           所以思路整体上就是循环比大小; 
                      a = [1,2,3,5,6,7]
                      插入数字 4 
                      a.append(4)
                      sorted(a)
                      但显然题目考察的是希望自己能写这个逻辑,纯循环遇上数字较多的效率会比较低,所以可以折半选取再循环; 
                      a = [1,2,3,5,6,7]
                      b = 4
                      for i in range(len(a)-1):
                          if b >= a[i] and b  i:
                                      print('please input a little smaller')
                                      guess = int(input('input your guess:\n'))
                                  else:
                                      print('please input a little bigger')
                                      guess = int(input('input your guess:\n'))
                              end = time.clock()
                              b = time.time()
                              var = (end - start) / 18.2
                              print (var)
                              # print 'It took you %6.3 seconds' % time.difftime(b,a))
                              if var  
                      

                      六、图形绘制

                      题目56:圆形绘制

                      题目56:画图,学用circle画圆形。  
                      """ 
                      分析: 主要为turtle包的使用 
                      import turtle
                      turtle.title("打开画图软件")
                      turtle.setup(800,600,0,0)
                      pen=turtle.Turtle()
                      pen.color("blue")
                      pen.width(5)
                      pen.shape("turtle")
                      pen.speed(10)
                      pen.circle(100)
                      

                      题目57:直线绘制

                      题目57:画图,学用line画直线。
                      """ 
                      分析: 主要为turtle包的使用 
                      import turtle
                      def drawline(n):
                          t=turtle.Pen()
                          t.color(0.3,0.8,0.6)  #设置颜色,在0--1之间
                          t.begin_fill()   #开始填充颜色
                          for i in range(n): #任意边形
                              t.forward(50)
                              t.left(360/n)
                          t.end_fill()    #结束填充颜色
                      drawline(4)
                      

                      题目58:方形绘制

                      题目58:画图,学用rectangle画方形。   
                      """ 
                      分析: 考察tkinter包的使用
                      from tkinter import *
                      root = Tk()
                      root.title('Canvas')
                      canvas = Canvas(root,width = 400,height = 400,bg = 'yellow')
                      x0 = 263
                      y0 = 263
                      y1 = 275
                      x1 = 275
                      for i in range(19):
                          canvas.create_rectangle(x0,y0,x1,y1)
                          x0 -= 5
                          y0 -= 5
                          x1 += 5
                          y1 += 5
                      canvas.pack()
                      root.mainloop()
                      

                      题目59:综合图形

                      题目59:画图,综合例子。  
                      """ 
                      分析: 考察tkinter包的使用
                      if __name__  == '__main__':
                          from Tkinter import *
                          canvas = Canvas(width = 300,height = 300,bg = 'green')
                          canvas.pack(expand = YES,fill = BOTH)
                          x0 = 150
                          y0 = 100
                          canvas.create_oval(x0 - 10,y0 - 10,x0 + 10,y0 + 10)
                          canvas.create_oval(x0 - 20,y0 - 20,x0 + 20,y0 + 20)
                          canvas.create_oval(x0 - 50,y0 - 50,x0 + 50,y0 + 50)
                          import math
                          B = 0.809
                          for i in range(16):
                              a = 2 * math.pi / 16 * i
                              x = math.ceil(x0 + 48 * math.cos(a))
                              y = math.ceil(y0 + 48 * math.sin(a) * B)
                              canvas.create_line(x0,y0,x,y,fill = 'red')
                          canvas.create_oval(x0 - 60,y0 - 60,x0 + 60,y0 + 60)
                          
                          for k in range(501):
                              for i in range(17):
                                  a = (2 * math.pi / 16) * i + (2 * math.pi / 180) * k
                                  x = math.ceil(x0 + 48 * math.cos(a))
                                  y = math.ceil(y0 + 48 + math.sin(a) * B)
                                  canvas.create_line(x0,y0,x,y,fill = 'red')
                              for j in range(51):
                                  a = (2 * math.pi / 16) * i + (2* math.pi / 180) * k - 1
                                  x = math.ceil(x0 + 48 * math.cos(a))
                                  y = math.ceil(y0 + 48 * math.sin(a) * B)
                                  canvas.create_line(x0,y0,x,y,fill = 'red')
                          mainloop()
                      

                      题目63:椭圆绘制

                      题目63:画椭圆。 
                      """ 
                      分析: 考察tkinter包的使用
                      if __name__ == '__main__':
                          from Tkinter import *
                          x = 360
                          y = 160
                          top = y - 30
                          bottom = y - 30
                          
                          canvas = Canvas(width = 400,height = 600,bg = 'white')
                          for i in range(20):
                              canvas.create_oval(250 - top,250 - bottom,250 + top,250 + bottom)
                              top -= 5
                              bottom += 5
                          canvas.pack()
                          mainloop()
                      

                      题目64:图形组合

                      """
                      题目64:利用ellipse 和 rectangle 画图。。 
                      """ 
                      if __name__ == '__main__':
                          from Tkinter import *
                          canvas = Canvas(width = 400,height = 600,bg = 'white')
                          left = 20
                          right = 50
                          top = 50
                          num = 15
                          for i in range(num):
                              canvas.create_oval(250 - right,250 - left,250 + right,250 + left)
                              canvas.create_oval(250 - 20,250 - top,250 + 20,250 + top)
                              canvas.create_rectangle(20 - 2 * i,20 - 2 * i,10 * (i + 2),10 * ( i + 2))
                              right += 5
                              left += 5
                              top += 10
                          canvas.pack()
                          mainloop()
                      

                      题目65:艺术图案

                      题目65:一个最优美的图案。   
                      """ 
                      import math
                      class PTS:
                          def __init__(self):
                              self.x = 0
                              self.y = 0
                      points = []
                      def LineToDemo():
                          from Tkinter import *
                          screenx = 400
                          screeny = 400
                          canvas = Canvas(width = screenx,height = screeny,bg = 'white')
                          AspectRatio = 0.85
                          MAXPTS = 15
                          h = screeny
                          w = screenx
                          xcenter = w / 2
                          ycenter = h / 2
                          radius = (h - 30) / (AspectRatio * 2) - 20
                          step = 360 / MAXPTS
                          angle = 0.0
                          for i in range(MAXPTS):
                              rads = angle * math.pi / 180.0
                              p = PTS()
                              p.x = xcenter + int(math.cos(rads) * radius)
                              p.y = ycenter - int(math.sin(rads) * radius * AspectRatio)
                              angle += step
                              points.append(p)
                          canvas.create_oval(xcenter - radius,ycenter - radius,
                                             xcenter + radius,ycenter + radius)
                          for i in range(MAXPTS):
                              for j in range(i,MAXPTS):
                                  canvas.create_line(points[i].x,points[i].y,points[j].x,points[j].y)
                          canvas.pack()
                          mainloop()
                      if __name__ == '__main__':
                          LineToDemo()
                      

                      题目23:菱形打印

                      题目23:打印出如下图案(菱形):
                         *
                        ***
                       *****
                      *******
                       *****
                        ***
                         *
                      """ 
                      def pic(n):
                          for i in range(0,n):
                              a = abs(i - int(n/2))
                              b = n - abs(i - int(n/2))
                              print(" "*a+"*"*(b-a))
                      pic(7)
                      

                      七、算法与数据结构

                      题目6:斐波那契数列

                      题目6:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。
                      """
                      从第3个数起,每一个数等于前2个数的和; 
                      num = f(n-1)+f(n-2) (n>=2)
                      def Fibonacci_sequence(n):
                          a, b = 0, 1
                          while n>0:
                              a, b, n = b, a + b, n - 1
                              print(a)
                      Fibonacci_sequence(10)
                      

                      题目12:素数筛选

                      题目12:判断101-200之间有多少个素数,并输出所有素数。    
                      """
                      分析: 
                      判断素数x方法: 从2-->(x-1)之间能有一个数被整除 则非素数; 
                      num = []
                      for a in range(101,200):
                          for b in range(2,a-1):
                              if a%b == 0 :
                                  break 
                          else:            # 这里位置不能写错,不然容易陷入无限循环; 
                              num.append(a)
                      print(num) 
                      

                      题目20:小球弹跳计算

                      题目20:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
                      """ 
                             落下高度 返回高度 落地时经过距离 
                      第一次   100     50     100 
                      第二次    50     25     100 + 100 = 200 
                      第三次    25     12.5   50  + 100 + 100 = 250 
                      第四次    12.5   6.25   25  + 100 + 100 +50 = 275  
                      可以看到规律  
                      第n次   分析找出规律即可  
                      def fall(n):
                          height = 100
                          far = 100
                          for i in range(2, n+1):
                              far = far + height
                              height = height / 2
                          return far,height/2
                      fall(10) 
                      

                      题目22:比赛名单排列

                      题目22:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。
                             a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
                      """ 
                      分析: 直接可以得出答案,c和y, a和z,b和x ,用变成实现则将判断逻辑写下即可; 
                      for a in ['x','y','z']:
                          for b in ['x', 'y', 'z']:
                              for c in ['x', 'y', 'z']:
                                  if(a!=b)and(b!=c)and(c!=a) and (a!='x') and (c!='x') and (c!='z'):
                                      print('a和%s比赛,b和%s比赛,c和%s比赛' %(a,b,c))
                      法2: 
                      m=['a','b','c']
                      n=['x','y','z']
                      L=[]
                      for i in range(0,3):
                          for j in range(0,3):
                              L.append(m[i]+n[j])
                      L.remove('ax')   
                      L.remove('ay')
                      L.remove('by')
                      L.remove('bz')
                      L.remove('cx')
                      L.remove('cz')
                      print(L) 
                      

                      题目61:杨辉三角生成

                      题目61:打印出杨辉三角形(要求打印出10行如下图)。  
                      """ 
                      分析: 首先要理解什么是杨辉三角,这是非常经典的一个题目; 
                      1 
                      1 1 
                      1 2 1 
                      1 3 3 1 
                      1 4 6 4 1 
                      1 5 10 10 5 1 
                      1 6 15 20 15 6 1 
                      1 7 21 35 35 21 7 1 
                      1 8 28 56 70 56 28 8 1 
                      杨辉三角的特性: 
                      1.第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
                      2.每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。
                        即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。
                      def Yh_triangles():
                          L = [1]
                          while True:
                              yield L
                              L = [sum(i) for i in zip([0]+L, L+[0])]
                      def Yh_triangles(num = 10):
                          L = [[1]]
                          for i in range(1,num):
                              L.append([(0 if j== 0 else L[i-1][j-1])+ (0 if j ==len(L[i-1]) else L[i-1][j]) for j in range(i+1)])
                          return L
                      

                      题目76:分段函数计算

                      题目76:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n
                      """ 
                      # 比较简单,直接上代码 
                      def num(n):
                          sum = 0
                          if n%2 == 0 :
                              for i in range(1,int(n/2)+1):
                                  sum += 1/(2*i)
                              return sum 
                          if n%2 != 0 :
                              for i in range(1,int((n+1)/2)+1):  
                                  sum += 1/(2*i-1) 
                              return sum 
                      num(5)  
                      # 同理,应用range()的步长会更高效; 
                      def num(n):
                          sum_tmp = [1/i for i in range(n,0,-2)]
                          return sum(sum_tmp) 
                      num(4) 
                      

                      题目77:循环输出列表

                      题目77:循环输出列表
                      """ 
                      ls = ['Kobe','24','8']
                      for i in range(len(ls)):
                          print(ls[i])
                      

                      题目78:最大年龄查找

                      题目78:找到年龄最大的人,并输出。请找出程序中有什么问题。
                      """ 
                      person_age = {"li":18,"wang":50,"zhang":20,"sun":22}
                      def get_max(dict):
                          max_age = 0
                          for key, value in dict.items():
                              if value > max_age:
                                  max_age = value
                                  name = key
                          print(name)
                          print(max_age)
                      get_max(person_age)
                      

                      题目84:列表极值交换

                      题目84:连接字符串。
                      """ 
                      list1 = ['Kobe','8','24']
                      list2 = ['Iverson','3']
                      print(list1 + list2)
                      

                      题目8:九九乘法表

                      题目8:输出 9*9 乘法口诀表。
                      """
                      1*1=1
                      2*1=2 2*2=4
                      3*1=3 3*2=6  3*3=9
                      4*1=4 4*2=8  4*3=12 4*4=16
                      5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
                      6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
                      7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
                      8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
                      9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
                      for a in range(1,10):
                          for b in range(1,10):
                              print( str(a),"*",str(b),"=",a*b )
                      

                      题目9:延时输出

                      题目9:暂停一秒输出。
                      程序分析:使用 time 模块的 sleep() 函数。
                      """
                      # 没有具体要求,能实现延迟即可; 
                      import time 
                      id = [1,2,3]
                      for i in range(len(id)):
                          print(i)
                          time.sleep(2)
                      

                      题目14:质因数分解

                      题目14:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
                      """
                      分析:
                      要找出全部因数比较容易,第一次写输出的是[2,3,5],没有考虑到重复因子的情况,所以要加while判断的逻辑;
                      def get_factor(n):
                          print ('{} = '.format(n), end=" ")
                          if not isinstance(n, int) or n =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
                      """
                      def score(n):
                          if n>=90:
                              print("A")
                          elif 60=7位,然后取右端开始的4-7位, 考核截取字符串; 
                      num = input("输入整数: ")
                      num = list(num)[-7:-3]
                      举一反三: 
                      str = '0123456789'
                      print(str[:])        # 截取字符串的全部字符
                      print(str[0:3])      # 截取第1位到第3位的字符
                      print(str[6:])       # 截取第7个字符到结尾
                      print(str[:-3])      # 截取从头开始到倒数第3个字符之前
                      print(str[2])        # 截取第3个字符
                      print(str[-1])       # 截取倒数第1个字符
                      print(str[::-1])     # 创造1个与原字符串顺序相反的字符串
                      print(str[-3:-1])    # 截取倒数第3位到倒数第1位之前的字符
                      print(str[-3:])      # 截取倒数第3位到结尾
                      print(str[:-5:-2])   # 逆序截取==> 先截取,再进行逆序.逆序为下标 https://blog.csdn.net/weixin_41613094/article/details/122325983?spm=1001.2014.3001.5501
                      value: 
                      012
                      0123456789
                      6789
                      0123456
                      2
                      9
                      9876543210
                      78
                      789
                      97
                      逆袭截取解释: 
                      str = 'abcdefghijklmn'
                      位置编号: 012345678910111213
                      对应编号: -14-13-12-11-10-9-8-7-6-5-4-3-2-1
                                      
                      # 官方方法
                      分析: 
                      (1)先使a右移4位。
                      (2)设置一个低4位全为1,其余全为0的数。可用~(~0
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码