题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如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