• python 练习题


    for 循环 和 while 循环

    1. 判断101-200之间有多少个素数,并输出所有素数。
      (什么是素数(质数): 除了1和它本身,不能被其他的数整除)
    方法1:
    count = 0                       # 设定素数的初始个数为0
    for num in range(101,201):      # 第一个循环:从101-200之间的数中依次取一个数,来判断它是不是素数
        # 判断取出来的数能不能被(2~本身-1)的数整除,如果能被整除,就不是素数。
        for x in range(2,num):
            if num % x == 0:
                break
            count +=1
        else:
            print(num,'是素数')
    print('素数的个数:',count)     # 打印出素数总的个数
    """
    如果取出来的数都不能被整除,那么就是素数
    (即说明if条件语句为Flase,if中的语句块不能被执行),count就会加上1,else中的也会被执行一次
    如果取出来的数能被整除,那么不是素数,会被break掉,进行取下一个数的循环,不会执行count 和else
    """
    
    
    方法2:
    count = 0
    for num in range(101,201):
        isprime = True              # 取出一个数,就假定它是素数,然后再验证假设是否正确
        for x in range(2,num):
            if num % x ==0:         # 如果 num 能够被(2,num)中的任意个数整除,说明假设是错误的,终止
                isprime = False
                break
            count += 1
        if isprime == True:         # 循环结束之后,找出是素数的
            print(num,'是素数')
    print('素数的个数:',count)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    1. 求斐波那契数列中第n个数的值:1,1,2,3,5,8,13,21,34, 55…

    规律: 从第三个数开始,后面每个数结果都是前两个数的和 ;如果想知道第三位数是什么,需要知道第1、2位数什么

    n = int(input('你想知道第几个数的值:'))
    # 当前的数:current = s1+s2
    s1 = 1
    s2 = 1
    i = 3     # 位数的起始值是3,假设前两位都知道了:s1,s2=1
    for i in range(3,n+1):
        # 根据前两个数的值,求出当前数的值
        current = s1+s2
        # 挪一次,为下次循环求下个值
        s1,s2 = s2,current
    print(current)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    1. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列列的第20个分数
      规律:后面的分数的分母 == 前一个分数的分子 后面的分数的分子 = 前一个分数的分母 + 分子
    n = 20
    fen_zi = 2
    fen_mu = 1
    for i in range(2,n+1):
        fen_zi,fen_mu = fen_mu+fen_zi,fen_zi
    print(fen_zi,'/',fen_mu)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。
    例如:153是一个水仙花数,因为153 = 1^3 + 5^3 + 3^3

    for num in range(100,1000):   # 从所有三位数中依次取出一个数
        gei_wei = num % 10        # 算出这个三位数的个位、十位、百位数分别是什么
        shi_wei = num // 10 % 10
        bai_wei = num // 100
        if gei_wei **3 + shi_wei**3 + bai_wei **3 == num:    # 如果num满足水仙数的条件,就打印出来
            print(num)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    #5.给一个正整数,要求:1、求它是几位数 2.逆序打印出各位数字
    规律: 一个整数是几位数,就看这个数整除10,除几次后会变成0

    #234 23 2 0
    #1234 123 12 1 0

    num = int(input('请输入一个正整数:'))
    num2 = num
    length = 0
    while True:
        num //= 10
        length +=1
        if num == 0:
            break
    print(length)
    
    # 123410:取余:4  取整:123    12310:取余3 取整12  1210:取余2 取整1   110:取余1 取整0.1
    for _ in range(length):
        print(num2%10,end='')
        num2 //= 10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    1.一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
    规律:n=1(折一次):厚度为0.08 * 21 ;n=2:厚度为0.08*22 ; n=n:厚度为0.08*2**n

    n = 1   # 第一次循环的初始值设为1,代表折第一次
    while True:
        sum1 = 0.08 * (2**n)   # 折n次的高度,比如:折一次的高度为 0.08*2**1
        if sum1>=8848130:      # 如果总的高度>8848130mm,就终止循环,否则,继续算sum1 = 0.08 * (2**n)
            break
        n += 1
    print(n)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
      小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
    num = 10 # 求第20个月有几对兔子
    m1 = 1  # 第一个月有1对兔子
    m2 = 1  # 第二个月有1对兔子
    i = 3   # 从第三个月起,兔子有几对
    for i in range(3,num+1):
        current = m1 + m2
        print('第',i,'个月','有',current,'对兔子')
        m1,m2 = m2,current
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
    list1 = [] #创建一个空列表
    num = int(input('请输入一个正整数:'))
    # 判断 num 能否被2~它本身-1(i)的数整除,如果能i就是它的质因数,
    # 随着循环的过程num不断减小,所以不用担心出现重复录入的情况
    for i in range(2,num):
        while True:
            if num % i == 0:
                list1.append(i)
                num = num / i
            else:
                break
    print(list1)
    
    
    """
    num = 12
    i = (2,3,4,5,6,7,8,9,10,11)
    i = 2, 12 % 2 == 0  true  list1.append(2)  num=12/2=6
    i = 2, 6 % 2 == 0   true  list1.append(2)  num=6/2=3 
    i = 2, 3 % 2 != 0   false      break   
    i = 3, 12 % 3 == 0  true  list1.append(3)  num=12/3=4
    i = 3, 4 % 3 !=0   false      break
    i = 4, 4 % 4 ==0   true  list1.append(4)  num=4/4=1
    i = 4, 1 % 4 !=0   false     break
    i = 5, 1 % 5 !=0   false     break
    i = 6, 1 % 6 !=0   false     break
    ....
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    4.输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利用辗除法。
    (最大公约数:num1 % num2 =x ;如果x==0,那么num2为最大公约数,如果x!=0,那么num1=num2,num2=x,再循环; 最小公倍数:两个数之积除以最大公约数)

    num1 = int(input('请输入一个正整数:'))
    num2 = int(input('请输入另一个正整数:'))
    a = num1
    b = num2
    if num1>num2:
        while True:
            x = num1 % num2
            if x ==0:
                break
            num1 , num2 = num2 , x
        print('最大公约数是:', num2)
        print('最小公倍数:',(a*b)/num2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    1. 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3. 编程 找出1000以内的所有完数
    for num in range(1,1000):   # 从1-1000中取出一个数
        sum = 0                 # 设定sun的初始值为0
        # 先判断取出的num值,再找出num的因子们(1~num-1的数是否能够被num整除),如果能整除sum就加上因子
    
        for i in range(1,num):
            if num % i ==0:
                sum += i
        # 循环完之后,如果num==sum 就说明是完数
        if sum == num:
            print(num,'是完数')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    6.输入某年某月某日,判断这一天是这一年的第几天? 程序分析:以3月5日为例,应该先把前两个月的加起来,

    # 然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
    
    year = int(input('请输入年份:'))
    month = int(input('请输入月份:'))
    day = int(input('请输入号数:'))
    
    # 第一步:判断年份是否是闰年
    isleap_year = True   # 假定输入的年份是闰年
    if (year % 4 ==0 and year % 100 !=0) or year % 400==0:
        isleap_year = True       # 满足条件即为闰年,假设成立,2月是29天
        months_list = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    else:                      # 假设的条件不成立,2月是28天
        months_list = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    
    # 第二步:计算天数
    # 如果month ==i ,就加上列表中的月份对应的天数
    days_sum = 0
    for i in range(1,13):
        if i == month:
            for x in range(i-1):      # 对month_list列表中输入月份的前几个月份天数相加(循环列表,循环一次加一次)
                days_sum = days_sum + months_list[x]  #从索引0开始循环
            print('这是',year,'年的第',days_sum+day,'天')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    1. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:
      #每位数字都加上5,然后用每个数字的和除以10的余数代替该数字,
      #再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值
    num = int(input('请输入一个四位数:'))
    # 第一步:取出num的个位、十位、百位、千位
    num_list=[]  # 定义一个空列表
    num_list.append(num // 1000)          # 将千位上的数字添加进列表
    num_list.append(num // 100  % 10)     # 将百位上的数字添加进列表
    num_list.append(num % 100 // 10)      # 将十位上的数字添加进列表
    num_list.append(num % 10)             # 将个位上的数字添加进列表
    # num_list[个,十,百,千]
    
    # 第二步:加密
    # i 分别取列表中的值进行加5和取余(i 的值代表列表中的索引值)
    for i in range(4):
        num_list[i] +=5
        num_list[i] %=10
    # x分别取列表中的值进行交换
    for x in range(2):
        num_list[x],num_list[3-x] = num_list[3-x],num_list[x]
    print(num_list)
    
    # 第二个for循环分解详情:(例如:现在的列表是[6,7,8,9])
    """
    x = 0   num_list[0],num_list[3] = num_list[3],num_list[0]   # 第一位,第四位 = 第四位,第五位
    x = 1   num_list[1],num_list[2] = num_list[2],num_list[1]   # 第二位,第三位 = 第三位,第二位
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    读者福利:知道你对Python感兴趣,便准备了这套python学习资料

    👉[[CSDN大礼包:《python兼职资源&全套学习资料》免费分享]]安全链接,放心点击

    对于0基础小白入门:

    如果你是零基础小白,想快速入门Python是可以考虑的。
    一方面是学习时间相对较短,学习内容更全面更集中。
    二方面是可以找到适合自己的学习方案

    包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等习教程。带你从零基础系统性的学好Python!

    零基础Python学习资源介绍

    • ① Python所有方向的学习路线图,清楚各个方向要学什么东西
    • ② 600多节Python课程视频,涵盖必备基础、爬虫和数据分析
    • ③ 100多个Python实战案例,含50个超大型项目详解,学习不再是只会理论
    • ④ 20款主流手游迫解 爬虫手游逆行迫解教程包
    • 爬虫与反爬虫攻防教程包,含15个大型网站迫解
    • 爬虫APP逆向实战教程包,含45项绝密技术详解
    • ⑦ 超300本Python电子好书,从入门到高阶应有尽有
    • ⑧ 华为出品独家Python漫画教程,手机也能学习
    • ⑨ 历年互联网企业Python面试真题,复习时非常方便

    👉Python学习路线汇总👈

    Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)
    在这里插入图片描述

    👉Python必备开发工具👈

    在这里插入图片描述

    温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

    👉Python学习视频600合集👈

    观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
    在这里插入图片描述

    👉实战案例👈

    光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
    在这里插入图片描述

    👉100道Python练习题👈

    检查学习结果。
    在这里插入图片描述

    👉面试刷题👈

    在这里插入图片描述

    在这里插入图片描述

    python副业兼职与全职路线

    在这里插入图片描述

    上述这份完整版的Python全套学习资料已经上传CSDN官方,朋友们如果需要可以微信扫描下方CSDN官方认证二维码 即可领取↓↓↓

    👉[[CSDN大礼包:《python安装包&全套学习资料》免费分享]]安全链接,放心点击

  • 相关阅读:
    【SpringBoot】静态资源的访问
    用进程和线程完成TCP进行通信操作及广播和组播的通信
    金仓数据库KingbaseES客户端应用参考手册--2. clusterdb
    CAP 7.0 版本发布通告 - 支持延迟消息,性能炸了?
    Vue项目登录界面
    Mockplus Cloud updated传达设计意图的新方法
    Bean的生命周期及演示
    .NET 7 性能改进 -- 至今为止最快的.NET平台
    减少Spring Boot的JVM内存占用的Docker三种配置
    linuxnfs服务安装与配置实践
  • 原文地址:https://blog.csdn.net/weixin_55154866/article/details/128188762