Python全栈工程师

7.3-菲波那锲数列、素数、猴子吃桃问题

2019-08-08  本文已影响1人  BeautifulSoulpy

算法有优劣之分;能写出来记行;

总结:
1.质数问题:记住几个优化的点;
2.fb数列问题;
3.三元表达式的引用会使得代码非常简洁;

质数,fb ,猴子偷桃,计算器的实现
练习1: 求100以内的 菲波那锲数列 fb(笔试/上机题); 后一项 = 前两项的和
#思路1:用循环来写;
a = 0,b = 1
print(0,a)
print(1,b)
i = 2 
while True:
    c = a + b
    if c > 100:
        break
    print(i,c)
    a = b
    b = c
    i +=1
-----------------------------------------------------
0 0
1 1
2 1
3 2
4 3
5 5
6 8
7 13
8 21
9 34
10 55
11 89
变体:求斐波那契数列的101项;

练习5:求10万内的所有素数(质数);prime number 9592个

质数:(经典面试题目)考验一个人的算法能力,关于算法的几个优化点必须掌握;
应用于密码学领域,是因为质数计算难度大;

思路1:先算是否为质数,再看边界问题
m=int(input('>>>'))
print(1)
#n=100
for n in range(2,m):
    for i in range(2,n):
        if n%i == 0:
            break
    else:
        print(n)
--------------------------------------------
>>>100
1
2
3
5
7
.
.
83
89
97

思路2:大大减少循坏次数
# 简化方案
print(2)
for x in range(3,100,2):
    for i in range(3,int(x**0.5)+1,2):
        if x % i == 0:
            break
    else:
        print(x)

总结:
1.加法的中点再正中间;
2.乘除法的重点在开方处;  X**0.5  
3.大于10的质数;个位一定是 1,3,7,9  

思路3:  大于10的质数;个位一定是 1,3,7,9  
print(2)
for x in range(3,100,2):    # 一定要记住左边界都为3,舍弃所有的偶数;
    if x > 10 and x % 5 == 0:
        continue
    for i in range(3,int(x**0.5)+1,2):   #为什么到一个数的一半就行了?
        if x % i == 0:
            break
    else:
        print(x)
一定要记住左边界都为3,舍弃所有的偶数;
为什么到一个数的一半就行了?

#思路3:质数定理:

datetiem模块

导入datetime模块,显示当前日期:

import datetime

x = datetime.datetime.now()

print(x.year)
print(x.strftime("%A")
y = datetime.datetime.now()

#timedelta对象; (datetime.datetime.now()-start)
dalta[0]=(datetime.datetime.now()-start).total_seconds()
计算程序运行的时间;
------------------------

练习6:猴子吃桃子问题;
#练习6:猴子吃桃子问题;

peach = 1

for i in range(9):
    peach = 2*(peach+1)
print(peach)
-------------------------
1534

练习7. 实现一个简易的计算器,效果如下:
(1). 运行后提示让用户输入一个数字
(2). 提示输入操作符(+ - * /)
(3). 再次提示输入一个数字
(4). 打印计算结果
(5). 在不退出程序的前提下,可以允许用户继续输入新一组数据计

###计算器的实现:

flag = True
while flag:
    num1 = int(input('输入first number:'))

    choice = input('输入操作符(+ - * /):')

    num2 = int(input('输入second number:'))

    if choice == '+':
       print(num1,"+",num2,"=", num1+num2)

    elif choice == '-':
       print(num1,"-",num2,"=", num1-num2)

    elif choice == '*':
       print(num1,"*",num2,"=", num1*num2)

    elif choice == '/':
       print(num1,"/",num2,"=", num1/num2)

    else:
       print("非法输入")
    print('是否继续使用计算?')
    idea = input('>>>')
    if idea == 'Y' or idea == 'y':
        continue
    else:
        flag = False
上一篇下一篇

猜你喜欢

热点阅读