1. 程式人生 > >python練手小程式之二

python練手小程式之二

判斷是否為完全數

題目:一個數如果恰好等於它的因子之和,這個數就稱為“完數”。例如6=1+2+3.程式設計    輸入一個數,判斷是否是“完數”。

程式分析:對輸入的數j進行因子分解(這裡的因子不是質因數): (1)初始化一個s變數,將j賦值給s,使用迴圈和取餘來判斷1-j中的i是否能被j整除,如是則使用增量賦值s-=I ,即s = s-i。 (2)最後判斷s是否等於0,6-1-2-3 = 0 和1+2+3 = 6同理,如果是,則返回True,不是,則返回False。 (3)定義一個函式要使用def語句,依次寫出函式名,括號,括號中的引數和冒號,然後在縮寫塊中編寫函式體,函式的返回值用return語句返回。

使用到的基本知識有函式,迴圈,輸入輸出,判斷,取餘。

# -*- coding:utf-8 -*-

def judge_perfect_num(j):   #寫函式的好處是方便我們重複呼叫相同的一段程式
    s = j
    for i in range(1, j):
        if j % i == 0:
            s -= i
    if s == 0:
        return True
    else:
        return False

if __name__ == '__main__':
    num = input("請輸入需要判斷的數字:")
    result = judge_perfect_num(num)
    if result:
        print "%d是完數"%num
    else:
        print "%d不是完數"%num

小球下落

題目:一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在第10次落地時,共經過多少米?第10次反彈多高?

程式分析: 第一次落地經過100(半個來回) 第二次100+100/22(半程為100/2)=100+100 第三次100+100(第二個上升和落下)+100/2/22(第三次高度減半變成了100/2)

第n次100+100+100/2+100/4+…+100/pow(2,n-2) 第n次距離加上100/pow(2,n-2)等於300 第n次距離=300-100/pow(2,n-2)

使用到的基本知識有迴圈,增量賦值。

Sn = 100.0
Hn = Sn / 2

for n in range(2,11):
    Sn += 2 * Hn
    Hn /= 2

print 'Total of road is %f' % Sn
print 'The tenth is %f meter' % Hn

判斷天數

題目:輸入某年某月某日,判斷這一天是這一年的第幾天?

程式分析:以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊情況,閏年且輸入月份大於3時需考慮多加一天。

使用到的基本知識有列表,取餘,輸入輸出,判斷。

year = int(raw_input('year:\n'))
month = int(raw_input('month:\n'))
day = int(raw_input('day:\n'))

months = (0,31,59,90,120,151,181,212,243,273,304,334)
if 0 <= month <= 12:
    sum = months[month - 1]
else:
    print 'data error'
sum += day
leap = 0
if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):
    leap = 1
if (leap == 1) and (month > 2):
    sum += 1
print 'it is the %dth day.' % sum