经典问题:
1、输入某年某月某日,判断这是这一年的第几天
提示:注意闰年且输入月份大于2时需要考虑多加一天
year = int(input('year:\n'))
month=int(input('month:\n'))
day=int(input('day:\n'))
print('-'*20)
day +=(month-1)*30
if month<9:
dday += month //2
else:
day += (month+1) //2
if month >2:
if year % 400 ==0 or year % 4 ==0 and year % 100 != 0:
day -= 1
else:
day -=2
print('今天是今年的第%d天'%day)
输出如下:
2、猴子吃桃问题:
猴子第一天摘了若干个桃子,当即吃了一半,还闲不过瘾,又多吃了一个,以后每天吃前一天剩余的一半零一个,到第十天的时候发现只有一个桃子了,问一共摘了多少桃子
分析:逆向思维,从后面向前推
x2=1
for day in range(9,0,-1):
x1=(x2+1)*2
x2=x1
print (x1)
输出如下:
3、输入一行字符串,统计其中的字母、数字、空格
import string
s=input('input a string :\n')
letters=0
space=0
digit=0
others=0
for c in s:
if c.isalpha():
letters+=1
elif c.isspace():
space+=1
elif c.isdigit():
digit+=1
else:
others+=1
print('char=%d,space=%d,digit=%d,others=%d'%(letters,space,digit,others))
输出如下:
4、打印爬楼梯
'''
打印楼梯,同时在楼梯上方打印两个笑脸
分析:
用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数
'''
import sys
sys.stdout.write(chr(1))
sys.stdout.write(chr(1))
print('')
for i in range(1,11):
for j in range(1,i):
sys.stdout.write(chr(219))
sys.stdout.write(chr(219))
print('')
输出如下:
5、一个球从一百米的高空落下,问第十次它可以弹起的高度,以及走过路程
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)
输出如下:
6、计算2/1,3/2,5/3,8/5.,13/8。。。前20项的和
分析提示:抓住分子分母的变化规律
方法一:
a=2.0
b=1.0
s=0
for n in range(1,21):
s+=a/b
t=a
a=a+b
b=t
print(s)
方法二:
s=0.0
a=2.0
b=1.0
for n in range(1,21):
s+=a/b
b,a=a,a+b
print(s)
'''
输出结果:
扩展思考:计算1!+2!+3!+....+20的和
方法一:
n=0
s=0
t=1
for n in range(1,21):
t*=n
s+=t
print('1!+2!+...+20!=%d'%s)
方法二:
s=0
l=range(1,21)
def op(x):
r=1
for i in range(1,x+1):
r*=i
return(r)
s=sum(map(op,l))
print('从一到二十的阶乘之和为:%d'%s)
输出如下:
7、用递归的方法计算5!
def fact(j):
sum=0
if j==0:
sum=1
else:
sum=j*fact(j-1)
return(sum)
for i in range(5):
print('%d!=%d'%(i,fact(i)))
输出如下:
8、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请该数是多少,有多少
分析:假设为x
则:x+100=n^2,x+100+168=m^2
计算等式:m2-n2=(m+n)(m-n)=168
设置:m+n=i,m-n=j, i*j=168,i和j至少一个是偶数
可得:m=(i+j)/2,n=(i-j)/2,i和j都是偶数,要末就是奇数
从上面可以知道,i与j均是大于等于2的偶数
由于i*j=168,j>=2,则1<i,168 /2+1
最后循环
count=0
for i in range(1,85):
if 168 %i == 0:
j=168/i
if i > j and (i+j) % 2 ==0 and (i-j)%2 ==0:
m = (i+j)/2
n = (i-j)/2
x=n*n-100
print(x)
count +=1
print('共计输出结果:',count,'个')
输出如下:
9、斐波那契数列
def num(n):
a,b = 1,1
for i in range (n-1):
a,b = b,a+b
return(a)
print(num(10))
输出结果:
10、暂停一秒输出
分析:
在python中有time模块和calender模块可以用于格式化日期和时间
import time
l=[1,2,3,4,5,6]
for i in range(len(l)):
print(l[i])
time.sleep(5)
输出如下:
这个结果可能不是那么明显,因为我是从中间截取的,因此还没有输出完,在练习的时候结合开发工具可以明显的看到输出的变化情况。
这次的十道题都是比较经典的例题,可以多多练练,我也是看了许多资料,发现在很多地方都是经常出现,比较适合我们做一些练习的,有些程序也许不是最好的方法,如果可以通过自己的想法转化代码,我相信你的收获一定会是特别的巨大。因此,还是多思考,大家一起进步吧。