python经典习题,大学生可用|Python 主题月

487 阅读2分钟

本文正在参加「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])

编程想要好,联系少不了。更多经典习题,请移步到公众号:诗一样的代码