
感覺終于有時間來補作業(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é)安康