菜鸟教程例题
在其中我有些算了一下运行时间,方法如下:
import time
start =time.clock()
# 程序
end = time.clock()
# 其中end-start就是程序运行的时间,单位是秒。
print('Running time: %s Seconds'%(end-start))
- 题目:1、2、3、4组成不重复的三位数
def mo_1():
a = []
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if i != j and j != k and k != i:
a.append(i * 100 + j *10 +k)
print(a)
- 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
这道题我最先想到的是if语句,用分支计算。但是答案给出了更加简洁的方法,很棒,可以参考一下这种方法,类似的都可以用这种方法解。
def mo_2():
i = int(input())
a = (1000000,600000,400000,200000,100000,0)
b = (0.01,0.015,0.03,0.05,0.075,0.1)
r = 0
for idx in range(0,6):
if i>a[idx]:
r+=(i-a[idx])*b[idx]
i=a[idx]
print(r)
- 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:
假设该数为 x。
1、则:x + 100 = n^2, x + 100 + 168 = m^2
2、计算等式:m^2 - n^2 = (m + n)(m - n) = 168
3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数
4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。
5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。
6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。
7、接下来将 i 的所有数字循环计算即可。
这道题其实我最先用的是穷举,因为比较简单,我比较了一下1和2两种方法的时间,发现2时间更短
def mo_3(ans = 1):
if ans == 1:
# Running time: 0.015090500000000118 Seconds
for i in range(-100,10000):
if (i + 100) ** 0.5 == int((i + 100) ** 0.5) and (i + 100 + 168) ** 0.5 == int((i + 100 + 168) ** 0.5):
print(i,end='')
elif ans == 2:
# Running time: 0.0014683999999998143 Seconds
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,end='')
- 题目:输入某年某月某日,判断这一天是这一年的第几天?
用split()方法只用一个input就可以解决多个输入
import datetime
def mo_4(ans):
if ans == 2:
year, month, day = [int(i) for i in input().split()]
print("-" * 20)
result = datetime.datetime(year, month, day)
# 用来格式化时间,%j 用来表示天数
print(result.strftime("%j"))
- 题目:输入三个整数x,y,z,请把这三个数由小到大输出。
def mo_5(ans):
print(sorted([int(i) for i in input().split()]))
- 斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。
def mo_6(n,ans):
if ans == 1:
# 当n=1000时Running time: 0.32044379999999983 Seconds
start =time.clock()
a = [0,1]
for i in range(2,n):
a.append(a[i-1] + a[i-2])
print(a)
end = time.clock()
print('Running time: %s Seconds'%(end-start))
elif ans == 2:
# 当n=1000时Running time: 0.02545049999999982 Seconds
start =time.clock()
a,b = 1,1
for i in range(n-1):
a,b = b,a+b
print(a)
end = time.clock()
print('Running time: %s Seconds'%(end-start))
elif ans == 3:
if n ==1 or n ==2:
return 1
else :
return mo_6(n-1,ans = 3) + mo_6(n-2,ans = 3)
- 输出 9*9 乘法口诀表。
def mo_7():
for i in range(1,10):
print()
for j in range(1,i+1):
print('%d * %d = %d'%(j,i,i*j),end=' ')
- 倒计时
def mo_8():
for x in range ( 5,-1,-1 ) : # 生成倒计时秒数
mystr = '倒计时' + str( x ) + '秒' # str()函数强制转化字符型
print ( mystr, end = '' ) # end='' 不换行
print ( "\b"*(len(mystr)*2), end = '' , flush = True )
time.sleep ( 1 )
- 暂停一秒输出,并格式化当前时间。
def mo_9():
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
# 暂停一秒
time.sleep(1)
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
网友评论