python学习1

菜鸟教程例题

在其中我有些算了一下运行时间,方法如下:

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())))

你可能感兴趣的:(python学习1)