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