20170523python作业

作业一:求1000以内的完全数有哪些

如果一个数恰好等于它的因子之和,则称该数为“完全数”,又称完美数或完备数。正如描述所言,要判断一个数是否为完全数,先找出这个数所有的因子,然后比较所有因子之和是否等于此数,若相等,则为完全数。

#encoding=utf-8
list=[]     #存储所求得的完全数
for num in range(2,1000):
    sum=0
    for i in range(1,num):      #寻找num的所有因子
        if num%i==0:
            sum+=i
    if sum==num:    #所有因子之和等于此数加入列表
        list.append(num)
print list

作业二:打印万年历

打印万年历的条件:
1)闰年条件:能被4整除且不能被100整除,或者能被400整除
2)1900年1月1日 是周一

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

20170523python作业_第1张图片
输出样例

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

判断闰年;
判断当月有多少天;
这个月的1号是从周几开始的;
格式化打印日历。
#encoding=utf-8
def is_leap_year(year):
    if year%4==0 and year%100!=0 or year%400==0:#闰年条件:能被4整除且不能被100整除,或者能被400整除
        return True
    else:
        return False
def get_days_of_month(year,month):#获得给定年月对应月份的天数
    if month in (1,3,5,7,8,10,12):
        day=31
    elif month in (4,6,9,11):
        day=30
    elif is_leap_year(year):
        day=29
    else:day=28
    return day
def get_one_day_week(year,month):#获得给定月1日为星期几
    days=0
    for y in range(1900,year):#以19000101是星期一为基准计算
        if is_leap_year(y):
            days+=366
        else:
            days+=365
    for m in range(1,month):
        days+=get_days_of_month(year,m)
    return days%7+1

year=input("please input year:")
month=input("please input month:")

print '   ',month,'   ',year,'    '
print '----------------------------'
print '  日  一  二  三  四  五  六  '

格式化打印再看一看python的语法规则,然后加以修改


20170523python作业_第2张图片
结果显示


增加的代码

year=input("please input year:")
month=input("please input month:")

print '         ',month,' ',year,'    '
print '----------------------------'
print ' 日  一  二  三  四  五  六  '
i=get_one_day_week(year,month)
print '',
print '  '*i,#空出3个空格*i
for m in range(1,get_days_of_month(year,month)+1):
    print '',
    print '%2d'% m,
    m+=1
    if m%7==0:
        print ' '

需要注意的是: print ''本身就有一个空格了,再在单引号里加个空格就变成两个了print ' '。还有就是print ''默认后面换行,而想要不换行继续在其后边输出则为print'',语句。

你可能感兴趣的:(20170523python作业)