Python第二次作业

何必想太多,直接上路

感觉终于有时间来补作业了,漫长的六天工作日迎来了短暂的休息。
闲话不多说,直接写心得。没有时间敲代码的时候就在本子上写逻辑。这个是一个非常好的办法,思路是关键。有了思路之后要让思路落地,这个就需要自己爬坑了。大家都知道看代码与写代码是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的,好想赶紧进入爬虫的学习啊。
赶紧赶下一篇作业。
最后大家端午节安康


各位端午安康
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容