Python第二次作業(yè)

何必想太多,直接上路

感覺終于有時間來補作業(yè)了,漫長的六天工作日迎來了短暫的休息。
閑話不多說,直接寫心得。沒有時間敲代碼的時候就在本子上寫邏輯。這個是一個非常好的辦法,思路是關(guān)鍵。有了思路之后要讓思路落地,這個就需要自己爬坑了。大家都知道看代碼與寫代碼是2個完全不同的概念。

一,編寫尋找1000以內(nèi)的完全數(shù)

如果一個數(shù)恰好等于它的因子之和,則稱該數(shù)為“完全數(shù)”,又稱完美數(shù)或完備數(shù)。
例如:第一個完全數(shù)是6,它有約數(shù)1、2、3、6,除去它本身6外,其余3個數(shù)相加,1+2+3=6。第二個完全數(shù)是28,它有約數(shù)1、2、4、7、14、28,除去它本身28外,其余5個數(shù)相加,1+2+4+7+14=28。

思路比較簡單:

  • 設(shè)置約束條件篩選判斷
  • 打印結(jié)果
    直接上代碼了
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

設(shè)置2個數(shù)組,prefect_number存放完全數(shù),common_divisor存放公約數(shù)。
1.先for循環(huán)獲得除了自己的以外的公約數(shù)。
2.判斷所有的獲得的公約數(shù)之和是否等于本身。
3.打印出滿足條件的完全數(shù)。

二,打印萬年歷

打印萬年歷的條件:
1)閏年條件:能被4整除且不能被100整除,或者能被400整除
2)1900年1月1日 是周一

注意:這個題不要調(diào)用系統(tǒng)函數(shù)或庫。
代碼注意封裝,一個函數(shù)實現(xiàn)一個功能。注意分析實現(xiàn)打印萬年歷的功能步驟:

  • 判斷閏年;
  • 判斷當(dāng)月有多少天;
  • 這個月的1號是從周幾開始的;
  • 格式化打印日歷。

其實這個題目的思路已經(jīng)寫的很清楚了,下面就是根據(jù)模塊開始寫功能就可以了。也是直接上代碼,不要小看這個麻煩事情多著呢。

# -*- 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)

萬年歷

說下里面的坑吧:
環(huán)境:win10(不高興開虛擬機了)
IDE:Sublime(我反正是喜歡這個)
Python V2.7

  • 中文顯示的問題,windows上面這個我真不想糾結(jié)了。python都是默認(rèn)UTF-8的,想顯示正常的轉(zhuǎn)成GBK,懶。
  • python2.7的print函數(shù)換行問題,在調(diào)整萬年歷格式的時候,默認(rèn)是換行。我不要換行啊,怎么辦end=‘’好贊,可惜報錯,這是python3.0的方法。在2.7的環(huán)境下
print x,
#print 后面帶一個逗號,就是不換行了。

再跟著打印的結(jié)構(gòu),調(diào)整下格式就好。

又學(xué)到一個print的技巧,我這么調(diào)整空格實在是太low了/

#如何使整數(shù),保證print固定為4個位置
print '%4d'%x

總結(jié)一下

編程關(guān)鍵在于思路。
但是基本功也很重要。
思路清晰,語法簡潔。一切都會OK的,好想趕緊進入爬蟲的學(xué)習(xí)啊。
趕緊趕下一篇作業(yè)。
最后大家端午節(jié)安康


各位端午安康
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容