5道Python 练习题,领略编程方法的魅力!

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

第1题

有 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)

以下为输出结果:

第2题

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

“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如: 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)

输出结果如下:

第3题

求 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)

输出结果如下:

第4题

一个正整数,它加上 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)

得到结果如下:

第5题

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

判断这是一年的第几天,首先要判断闰年、平年,然后计算天数。这里我们使用一个列表存放平年每月的天数,当输入的是平年,则将当月前面的月数天数相加,再加上剩余天数(即日期);如果是闰年,则将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))

实现效果:

干货分享

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181003B1GPUN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券