完成這兩題花費了很長時間。主要在萬年歷的分析上,剛開始思路不是很明朗,如何計算一個月的1號是星期幾,想來很長時間。下面就對這兩題的解決過程做個記錄。
一、 求1000以內的完全數有哪些
這一題的解題思路與統計100以內的素數相同。
代碼如下:
#!/usr/bin/python
# -*- coding:utf-8 -*-
# __author__: Captain_mj
#題目:打印萬年歷
'''
打印萬年歷條件:
1、閏年條件:能被4整除且不能被100整除,或能被400整除
2、1900年1月1日 是周一
3、不使用系統函數或庫;一個函數實現一個功能
打印萬年歷的功能步驟:
*判斷閏年
*判斷當月有多少天
*這個月的1號是從周幾開始的
*格式化打印日歷
'''
#判斷閏年(366天)
def is_leap_year(year):
if year%4 == 0 and year%100 != 0 or year%400 == 0:
return True
else:
return False
#判斷每月的天數
def get_month_days(year, month):
bimonth = (4, 6, 9, 11)
if month == 2:
if is_leap_year(year):
days = 29
else:
days = 28
elif month in bimonth:
days = 30
else:
days = 31
return days
#判斷從1900年到輸入年月的天數
def total_days(year, month):
tot_days = 0
for i in range(1900, year):
if is_leap_year(i):
tot_days =+ 366
else:
tot_days += 365
for i in range(1, month):
tot_days += get_month_days(year, i)
return tot_days
#主函數
def main():
year = input("請輸入年份:")
month = input("請輸入年份:")
print('\t'*3+month+'月','\t'+year+'年')
print("Sun\t Mon\t Tue\t Wed\t Thu\t Fir\t Sat")
year = int(year)
month = int(month)
'''
weekday = (total_days(year, month)%7)+1 #判斷給定月份1號是星期幾
print('\t'*weekday, end='')
if weekday%7 == 0:
print('')
for i in range(1,get_month_days(year, month)+1): #判斷給定月份天數并格式化輸出
print(i, '\t', end='')
if (weekday+i)%7 == 0:
print('')
'''
count = 0
for i in range(total_days(year, month)%7+1):
print('\t', end='')
count += 1
if count%7 == 0:
print('')
for i in range(1, get_month_days(year, month)+1):
print(i, end='')
print('\t', end='')
count += 1
if count%7 == 0:
print('')
if __name__ == '__main__':
while True:
main()
print('')
'''
weekday = (total_days(year, month)%7)+1 #判斷給定月份1號是星期幾
print('\t'*weekday, end='')
for i in range(1,get_month_days(year, month)+1): #判斷給定月份天數并格式化輸出
print(i, '\t', end='')
if (weekday+i)%7 == 0:
print('')
'''
count = 0
for i in range(total_days(year, month)%7+1):
print('\t', end='')
count += 1
for i in range(1, get_month_days(year, month)+1):
print(i, end='')
print('\t', end='')
count += 1
if count%7 == 0:
print('')
if __name__ == '__main__':
while True:
main()
print('')
分析過程中邏輯思維應該是沒有問題的,但是在格式化輸出的時候遇到了問題。格式化輸出寫了兩個方法都有同樣的問題,輸出的格式有誤導致整個日期顯示錯誤,參考了幾個答案,對比發現是差不多的,不知道問題出在什么地方,先發出來,各位大神幫我看看什么地方有問題,萬分感謝!
下面是輸出的結果:
萬年歷輸出結果.png