本文正在参加「Python主题月」,详情查看 活动链接
hello大家好,今天我又发现了个有趣的小玩意。我是专写有趣小玩意的老诗。
相信很多人是初学python的,自己明明学完了语法,但是感觉还是什么都不会。其实光学不练是不行的。我们必须把代码实实在在地打在屏幕上,运行得到结果,这才算是真的会。
求素数
#先构造一个从3开始的奇数序列
def _odd_iter():
n=1
while True:
n=n+2
yield n
def _not_divisible(n):#定义一个筛选器
return lambda x:x%n>0
def primes():#最后定义个生成器,不断返回下一个素数
yield 2
it=_odd_iter()#初始化序列
while True:
n=next(it)#返回序列的第一个数
yield n
it=filter(_not_divisible(n),it)#构造新的序列
for n in primes():
if n<100:
print(n)
else:
break
杨辉三角
#杨辉三角
# 1
# 1 1
# 1 2 1
# 1 3 3 1
# 1 4 6 4 1
def triangles():
N=[1]
while True:
yield N
N=[1]+[N[i]+N[i+1] for i in range(len(N)-1)]+[1]
n=0
for t in triangles():
print(t)
n=n+1
if n==10:
break
汉诺塔
def move(A,C):
print(A,'--->',C)
def hanoi(n,A,B,C):
if n==1:
move(A,C)
else:
hanoi(n-1,A,C,B)
move(A,C)
hanoi(n-1,B,A,C)
hanoi(3,'A','B','C')
判断回文
#方法1
def f(n):
return str(n)==str(n)[::-1]
print(list(filter(f,range(1,1000))))
#方法2
def is_palindrome(n):
s=str(n)
l=len(s)
i=0
while i<l-i-1:
if s[i]!=s[l-i-1]:
return False
i=i+1
return True
print(list(filter(is_palindrome,range(1,1000))))
求s=a+aa+aaa+aaaa+aa...a的值
其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
#!/usr/bin/python
from functools import reduce
Tn = 0
Sn = []
n = int(input('n = '))
a = int(input('a = '))
for count in range(n):
Tn = Tn + a
a = a * 10
Sn.append(Tn)
print (Tn)
Sn = reduce(lambda x,y : x + y,Sn)
print ("计算和为:",Sn)
求完数
一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from sys import stdout
for j in range(2,1001):
k = []
n = -1
s = j
for i in range(1,j):
if j % i == 0:
n += 1
s -= i
k.append(i)
if s == 0:
print (j)
for i in range(n):
stdout.write(str(k[i]))
stdout.write(' ')
print (k[n])
编程想要好,联系少不了。更多经典习题,请移步到公众号:诗一样的代码