PY学习记录#5

while else循环真是个好东西

某些时候就不用加特判强制结束了

 

.pyc文件代表C语言解释器

 

print函数后面加end=' '就能输出空格了

还有一个元素竟然能乘以N次输出

 

素数表的暴力写法把第二层循环只用判断到根号N即可

直接优化到O(nsqrt(n))

 

T1

水仙花数

经典老题了属于是

这个题实际是想让你写一个分解三位数的程序

对三位数除以10取余数,然后把余数保存下来

我个人比较喜欢用列表来干活

a=[]
for i in range(100,1000):
    x=i
    for j in range(3):
        a.append(int(x%10))
        x/=10
   # print(a[0:3])
    if a[0]*a[0]*a[0]+a[1]*a[1]*a[1]+a[2]*a[2]*a[2]==i:
        print(i)
    a.clear()

 

T2

统计1、2、3、4的数字能组成互不相同且没有重复数字的三位数的数量

这个题我只想说

我是sb

之前刚学搜索的时候写过一个排列组合

我就把枚举的方法给忘了

把每一位从1-4都枚举一个遍就行了

这样也是不会有重复的

ans=0
for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):
            if i!=j and i!=k and j!=k:
                ans+=1
print(ans)

 

T3

计算自然对数

这个题上课的时候讲过类似的

如果你把这个问题分开考虑

这个题可以看作是两个题合并的产物

在一个能够计算累加和的循环里面套一个阶乘就行了

import math
e=1
a=1
while "YYF is handsome":
    con=1
    for i in range(1,a+1):
        con*=i
    e+=1/(con)
    if math.fabs(1/(con)<0.00001):
        break
    a+=1
print(e)

 

T4

分解质因数

我这个做法是用递归写的

效率比较低还难理解

不好

ans=[]
def find (x):
    #print(x)
    for i in range (2,x):
        if x%i==0:
            break
    else:
        ans.append(x)
        return
    for i in range (x-1,2,-1):
        if x%i==0:
            find(i)
            ans.append(int(x/i))
            break
a=int(input())
find(a)
ans.append(1)
for i in range(0,len(ans)):
    print(ans[i])

 T5

输出金字塔

这个没啥好说的

T1的乘法表的写法就够这一道题了

我这里提供一个简洁的做法

开一个变量表示这一行的一半有多少个空格

每一次外层循环结束就减一

co=3
for i in range(1,5):
    for j in range(1,8):
        if j<=co or j>=8-co:
            print(" ",end=" ")
        else:
            print(i,end=" ")
    print("\n")
    co-=1

 

posted @ 2021-10-15 10:24  JS_Pierre  阅读(98)  评论(0编辑  收藏  举报