第二次交作業(yè)了,很是慚愧,過(guò)了這么久,總是被各種瑣事耽誤,努力吧0 0.
一贯城、 求1000以內(nèi)的完全數(shù)有哪些
求1000以內(nèi)的完全數(shù)有哪些
如果一個(gè)數(shù)恰好等于它的因子之和佣渴,則稱該數(shù)為“完全數(shù)”雄坪,又稱完美數(shù)或完備數(shù)。
例如:第一個(gè)完全數(shù)是6椭员,它有約數(shù)1雨涛、2、3赶么、6肩豁,除去它本身6外,其余3個(gè)數(shù)相加辫呻,1+2+3=6清钥。第二個(gè)完全數(shù)是28,它有約數(shù)1放闺、2祟昭、4、7怖侦、14篡悟、28,
除去它本身28外匾寝,其余5個(gè)數(shù)相加搬葬,1+2+4+7+14=28。
代碼如下:
num = 1000
for i in range(1, num + 1):
total = 0
for k in range(1, i + 1):
if k == i:
break
elif i % k == 0:
total += k
else:
continue
if total == i:
print i,
運(yùn)行結(jié)果:
6 28 496
二 打印萬(wàn)年歷
打印萬(wàn)年歷的條件:
1)閏年條件:能被4整除且不能被100整除艳悔,或者能被400整除
2)1900年1月1日 是周一
注意:這個(gè)題不要調(diào)用系統(tǒng)函數(shù)或庫(kù)
代碼注意封裝急凰,一個(gè)函數(shù)實(shí)現(xiàn)一個(gè)功能。注意分析實(shí)現(xiàn)打印萬(wàn)年歷的功能步驟:
判斷閏年;
判斷當(dāng)月有多少天;
這個(gè)月的1號(hào)是從周幾開(kāi)始的;
格式化打印日歷猜年。
代碼如下:
def isLeap(year):
if (year%4 ==0 and year%100 != 0) or (year%400 == 0):
return True
else:
return False
def getMonth_days(year,month):
if month in [1,3,5,7,8,10,12]:
return 31
elif month == 2:
if isLeap(year):
return 29
else:
return 28
else:
return 30
#1900年1月1日 是周一
def getWeek_day(curYear,curMonth,curDay):
days=0
for year in range(1900,curYear+1):
if year != curYear:
for month in range(1,13):
days += getMonth_days(year,month)
else:
for month in range(1,curMonth):
days += getMonth_days(year, month)
days += curDay
return days%7
def printCal(year,month):
print ' %s %s'%(month,year)
print ' 日 一 二 三 四 五 六'
days = getMonth_days(year,month)
weekday = getWeek_day(year,month,1)
n = weekday
for i in range(1, days + 1):
if i == 1:
print ' '*(n+1) + ' ',
if n == 7:
print '\n',
n = 0
if i < 10:
print ' %s'%(i),
else:
print i,
n += 1
return ''
print printCal(2017,6)
運(yùn)行結(jié)果:
6 2017
日 一 二 三 四 五 六
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
image.png
總結(jié):打印萬(wàn)年歷發(fā)生了一個(gè)問(wèn)題,在每月的最后一天總會(huì)多打一個(gè)None,搞了半天才發(fā)現(xiàn)是函數(shù)printCal沒(méi)寫(xiě)返回值所以導(dǎo)致每次打印到最后還要再打一個(gè)None,添加一個(gè)return后即可解決問(wèn)題.