zoukankan      html  css  js  c++  java
  • PY学习记录#4

    循环里面还要用range(,)函数的屑py

    这个range还不包括最后一个数

    T1

    九九乘法表

    这个题就是循环嵌套的经典应用了

    可以很好的感受一下外层循环是如何影响内层循环的

    内层循环次数随着外层循环次数增加而增加

    最后输出一个三角形的形状

    for i in range(1,10):
       for j in range(1,i+1):
            print(f"{i}*{j}={i*j}",end="	")
       print("
    ")

    T2

     阶乘

    这个没啥好说的

    代码对于老师的来说我做了一点小修改

    直接从2开始循环

    a=int(input())
    n=1
    for i in range (2,a+1):
        n*=i
    print(n)

     T3

    斐波那契数列前20位‘

    斐波那契老经典了,这里用三种方法来做

    先说老师的方法

     这个方法其实不是非常好理解

    主要原因是为了计算下一位

    所以要不断滚动更新前两位的数值

    每算出一个新的就把旧的更新过去

    f,f1,f2=0,1,1
    print(f)
    print(f1)
    print(f2)
    for i in range(3,21):   #从第三位开始循环
        f=f1+f2             #先计算下一位
        f1=f2               #把原先的第二项改为第一项
        f2=f                #把新计算出来的给第二项,向前滚动更新
        print (f)

    滚动更新这个我不喜欢

    我更喜欢开一个列表把每一位都存下来

    真的简洁,但是费存储空间(但是多存几十个字节也没啥)

    f=[0,1,1]
    for i in range(0,3):
        print(f[i])
    for i in range(3,21):               #从第三位开始循环
        f.append(f[i-1]+f[i-2])         #计算下一位
        print (f[i])

    最后这种方法其实是斐波那契数列最经典的解法,递归法

    只不过这个解法时间复杂度非常垃圾,还有爆系统栈的风险并且难以理解

    先不解释,先放着。

    def fib(a):
        if a==0:
            return 0
        if a==1 or a==2:
            return 1
        else:
            return fib(a-1)+fib(a-2)
    for i in range(1,21):
        print(fib(i))

     T4

    最大公约数

    我这个解法比较暴力

    因为最大公约数肯定小于两个数里面较小的那个

    所以就在1和最小数之间挨个试一遍,保存最大的公约数

    import math
    n=int(input())
    m=int(input())
    ans=0
    x=min(n,m)
    for i in range(1,x+1):
        if m%i==0 and n%i==0:
            ans=i;
    print(ans)

    当然有一种方式既高效还优雅

    那就是辗转相除法

    先上代码

    T5

    判断素数

    判断素数这玩意展开讲能tm扯到数论上去

    打印一个最大到n的素数表有最快O(n)的欧拉筛

    还有好几种能做到O(nlogn)的筛法

    然而这些咱都用不到

    我们只需要会写暴力枚举法即可

    枚举比它小的每一个数,只要有能整除的就立即结束循环

    这里我设置了一个判断变量当哨兵用

    也就是所谓的“哨兵循环”

    当这个数不是素数以后就停止循环,打上标记

    a=int(input())
    flag=1
    for i in range(2,a):
        if a%i==0:
            flag=0
            break;
    if(flag==1):
        print("Yes")
    else:
        print("No")
  • 相关阅读:
    svn出现黄色感叹号怎么办
    数据库设计三大范式
    windows server2008R2 64位 配置 mysql-8.0.15-winx64
    sqlquerystress
    锁表操作
    微软专用消息队列msmq的简单使用
    数据库上移和下移
    mvc全局时间输出格式化处理
    webapi jsonp处理
    泛型处理ToEntity
  • 原文地址:https://www.cnblogs.com/SpeedZone/p/15378627.html
Copyright © 2011-2022 走看看