python打印完数_Python作业2-求完全数及打印万年历

第二次交作业了,很是惭愧,过了这么久,总是被各种琐事耽误,努力吧0 0.

一、 求1000以内的完全数有哪些

求1000以内的完全数有哪些

如果一个数恰好等于它的因子之和,则称该数为“完全数”,又称完美数或完备数。

例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6。第二个完全数是28,它有约数1、2、4、7、14、28,

除去它本身28外,其余5个数相加,1+2+4+7+14=28。

代码如下:

num = 1000

for i in range(1, num + 1):

total = 0

for k in range(1, i + 1):

if k == i:

break

elif i % k == 0:

total += k

else:

continue

if total == i:

print i,

运行结果:

6 28 496

二 打印万年历

打印万年历的条件:

1)闰年条件:能被4整除且不能被100整除,或者能被400整除

2)1900年1月1日 是周一

注意:这个题不要调用系统函数或库

代码注意封装,一个函数实现一个功能。注意分析实现打印万年历的功能步骤:

判断闰年;

判断当月有多少天;

这个月的1号是从周几开始的;

格式化打印日历。

代码如下:

def isLeap(year):

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

return True

else:

return False

def getMonth_days(year,month):

if month in [1,3,5,7,8,10,12]:

return 31

elif month == 2:

if isLeap(year):

return 29

else:

return 28

else:

return 30

#1900年1月1日 是周一

def getWeek_day(curYear,curMonth,curDay):

days=0

for year in range(1900,curYear+1):

if year != curYear:

for month in range(1,13):

days += getMonth_days(year,month)

else:

for month in range(1,curMonth):

days += getMonth_days(year, month)

days += curDay

return days%7

def printCal(year,month):

print ' %s %s'%(month,year)

print ' 日 一 二 三 四 五 六'

days = getMonth_days(year,month)

weekday = getWeek_day(year,month,1)

n = weekday

for i in range(1, days + 1):

if i == 1:

print ' '*(n+1) + ' ',

if n == 7:

print '\n',

n = 0

if i < 10:

print ' %s'%(i),

else:

print i,

n += 1

return ''

print printCal(2017,6)

运行结果:

6 2017

日 一 二 三 四 五 六

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

058cfa66dbab

image.png

总结:打印万年历发生了一个问题,在每月的最后一天总会多打一个None,搞了半天才发现是函数printCal没写返回值所以导致每次打印到最后还要再打一个None,添加一个return后即可解决问题.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值