美文网首页python热爱者
五道python练习题,领略编程方法的魅力!

五道python练习题,领略编程方法的魅力!

作者: 48e0a32026ae | 来源:发表于2018-09-30 13:43 被阅读2次

    本文将通过5个小练习,来体会程序编写的思路,领略编程方法的魅力。

    有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

    使用枚举法我们也能解决该问题,在Python中我们用循环和判断来实现。三个数互不相同数学中这样表示:

    从1到4分别取出4个数字,当满足以上条件时输出:

    """

    有 1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多

    少?

    """

    for i in range(1,5):

    for j in range(1,5):

    for k in range(1,5):

    if i != j and i != k and j !=k:

    print(i,j,k)

    以下为输出结果:

    打印出所有的“水仙花数”

    “水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如: 153 是一个“水仙花数” ,因为满足这个条件:

    只要能分别取到这个数的百位、十位、个位的数字,分别进行立方运算后再相加,如果结果等于这个数,那么这个就是水仙花数。

    实现代码如下:

    """

    打印出所有的“水仙花数” ,所谓“水仙花数”是指一个三位数,其各位数字立

    方和等于该数本身。例如: 153 是一个“水仙花数” ,因为 153=1 的三次方+5 的三次方

    +3的三次方。

    """

    for i in range(100,1000):

    # 将数字转换成字符串

    digit_str = str(i)

    # 分别取出百位,十位,个位数字,由于字符串不能进行数值运算,eval函数作用为去除最外层的引号,得到数字

    bai = eval(digit_str[0])

    shi = eval(digit_str[1])

    ge = eval(digit_str[2])

    if bai ** 3 + shi ** 3 + ge ** 3 == eval(digit_str):

    print(digit_str)

    输出结果如下:

    求 1+2!+3!+...+20! 的和

    这个是一个累乘在累加的过程,首先我们可以先算各个整数阶乘的值,然后逐一相加。Python中的累加或者累乘可以理解为拿个篮子取装苹果,刚开始是空篮子,然后一个一个地往里面放苹果,每次放苹果进去之前,篮子内都放在之前已经装好地苹果;当结束往里面放苹果时,这个篮子就存放着累加后地总苹果数。

    实现代码如下:

    """

    求 1+2!+3!+...+20! 的和

    """

    # 定义s用于存放累加总和,t为每个数字阶乘

    s = 0

    t = 1

    # 从1到21(不包括21)循环20次,每次循环t都存放着上一次循环阶乘结果,s则存放上一次循环的各个阶乘之和

    for i in range(1,21):

    t *= i

    s += t

    print(s)

    输出结果如下:

    一个正整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?

    我们先用数学的知识分析下这个题目:

    这里我们可以用程序循环遍历得到x的值:

    """

    一个正整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,

    请问该数是多少?

    """

    for i in range(2,85):

    # i要能被168整除

    if 168 % i == 0:

    # 得到j得值

    j = 168 / i

    # 根据之前判断i,j都时偶数,设置i>j是为了防止重复

    if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 :

    m = (i + j) / 2

    n = (i - j) / 2

    x = n * n - 100

    print(x)

    得到结果如下:

    输入某年某月某日,判断这一天是这一年的第几天

    判断这是一年的第几天,首先要判断闰年、平年,然后计算天数。这里我们使用一个列表存放平年每月的天数,当输入的是平年,则将当月前面的月数天数相加,再加上剩余天数(即日期);如果是闰年,则将2月的天数改为29,再执行月数的天数相加的操作。

    以下为实现代码:

    """

    输入某年某月某日,判断这一天是这一年的第几天?

    四年一闰,百年不闰,四百年再闰。其简单计算方法:

    1、能被4整除而不能被100整除。(如2004年就是闰年,1800年不是。)

    2、能被400整除。(如2000年是闰年)

    """

    day_str = input('请输入日期(格式:yyyy-mm-dd):')

    # 字符串分隔,获取年月日,eval用于取出最外层引号

    year = eval(day_str.split('-')[0])

    month = eval(day_str.split('-')[1])

    day = eval(day_str.split('-')[2])

    # 平年每月的天数

    days_per_month = [31,28,31,30,31,30,31,31,30,31,30,31]

    # 判断是否为闰年,是则将2月份天数修改为29

    if (year % 400 == 0) and (year % 4 == 0) and (year % 100 != 0):

    days_per_month[1] = 29

    # 计算总天数

    days = sum(days_per_month[:month-1]) + day

    print('{}是今年的第{}天'.format(day_str,days))

    实现效果:

    相关文章

      网友评论

        本文标题:五道python练习题,领略编程方法的魅力!

        本文链接:https://www.haomeiwen.com/subject/mkrwoftx.html