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/2
2(第三次高度减半变成了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

猜你喜欢

转载自blog.csdn.net/sinat_33455447/article/details/83512790