本文将通过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))
实现效果: