感觉终于有时间来补作业了,漫长的六天工作日迎来了短暂的休息。
闲话不多说,直接写心得。没有时间敲代码的时候就在本子上写逻辑。这个是一个非常好的办法,思路是关键。有了思路之后要让思路落地,这个就需要自己爬坑了。大家都知道看代码与写代码是2个完全不同的概念。
一,编写寻找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。
思路比较简单:
- 设置约束条件筛选判断
- 打印结果
直接上代码了
prefect__number = []
for x in xrange(1,1000):
common_divisor = []
for y in xrange(1,x):
if x%y == 0:
common_divisor.append(y)
if sum(common_divisor)==x:
prefect_number.append(x)
print prefect_number
设置2个数组,prefect_number存放完全数,common_divisor存放公约数。
1.先for循环获得除了自己的以外的公约数。
2.判断所有的获得的公约数之和是否等于本身。
3.打印出满足条件的完全数。
二,打印万年历
打印万年历的条件:
1)闰年条件:能被4整除且不能被100整除,或者能被400整除
2)1900年1月1日 是周一注意:这个题不要调用系统函数或库。
代码注意封装,一个函数实现一个功能。注意分析实现打印万年历的功能步骤:
- 判断闰年;
- 判断当月有多少天;
- 这个月的1号是从周几开始的;
- 格式化打印日历。
其实这个题目的思路已经写的很清楚了,下面就是根据模块开始写功能就可以了。也是直接上代码,不要小看这个麻烦事情多着呢。
# -*- coding:utf-8 -*-
def is_leap_year(year):
if year%4==0 and year%100==0 or year%400==0:
return True
def howmany_dayinthe_mouth(year, month):
month_31day = [1, 3, 5, 7, 8, 10, 12]
month_30day = [4, 6, 9, 11]
if month == 2:
if is_leap_year(year):
return 29
else:
return 28
for x in month_30day:
if x == month:
return 30
for x in month_31day:
if x == month:
return 31
def which_week(year, month):
total_day = 0
leap_year_num = 0
for x in xrange(1990,year):
if is_leap_year(year):
leap_year_num = leap_year_num + 1
total_day = (year-1990)*365 + leap_year_num
for x in xrange(1,month):
total_day = total_day + howmany_dayinthe_mouth(year, x)
# print 'total day is %d'%(total_day)
return total_day%7 + 1
def print_cal(year, month):
# print title year and month
print (' %d-%d')%(year, month)
# print week
print 'Mon Tue Wen Thu Fri Sta Sun'
# search month beginning
for x in xrange(1,which_week(year, month)):
print ' ',
# print date
n = which_week(year, month)
for x in xrange(1,howmany_dayinthe_mouth(year, month)+1):
if n < 7:
if x < 10:
print ' %d'%(x),
else:
print ' %d'%(x),
n=n+1
else:
if x < 10:
print ' %d'%(x)
else:
print ' %d'%(x)
n=1
# print 'week is %d'%(which_week(2017, 6))
print_cal(2017, 5)
说下里面的坑吧:
环境:win10(不高兴开虚拟机了)
IDE:Sublime(我反正是喜欢这个)
Python V2.7
- 中文显示的问题,windows上面这个我真不想纠结了。python都是默认UTF-8的,想显示正常的转成GBK,懒。
- python2.7的print函数换行问题,在调整万年历格式的时候,默认是换行。我不要换行啊,怎么办
end=‘’
好赞,可惜报错,这是python3.0的方法。在2.7的环境下
print x,
#print 后面带一个逗号,就是不换行了。
再跟着打印的结构,调整下格式就好。
又学到一个print的技巧,我这么调整空格实在是太low了/
#如何使整数,保证print固定为4个位置
print '%4d'%x
总结一下
编程关键在于思路。
但是基本功也很重要。
思路清晰,语法简洁。一切都会OK的,好想赶紧进入爬虫的学习啊。
赶紧赶下一篇作业。
最后大家端午节安康