python实现 回文、杨辉三角、斐波那契数列

1.回文

def sum(a):
    s=len(str(a))
    if s==5:
       sum= int(str(a)[0])+int(str(a)[1])+int(str(a)[2])+int(str(a)[3])+int(str(a)[4])
       return sum
    if s==6:
        sum = int(str(a)[0]) + int(str(a)[1]) + int(str(a)[2]) + int(str(a)[3]) + int(str(a)[4])+int(str(a)[5])
        return sum

def sum_1(a):
    s=len(str(a))
    if s==5:
       sum= a%10+a//10%10+a//100%10+a//1000%10+a//10000
       return sum
    if s==6:
        sum = a%10+a//10%10+a//100%10+a//1000%10+a//10000%10+a//100000%10
        return sum

def sum_2(a):
    sum=0
    for i in range(len(str(a))):
        sum+=int(str(a)[i])
    return sum

n=int(input())
for i in range(10000, 1000000):
    if str(i) == str(i)[::-1] and n == sum_2(i):
        print(i)

2.

在这里插入图片描述

def read(z):
    for i in range(len(z)):
        print(z[i],end='')
    print()

n,m=map(int,input().split())
li=list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
a=[li[i] for i in range(m)]
index=0
index1=1
while index<n:
    read(a)
    a=[a[i] for i in range(m-1)]
    a.insert(0,li[index1])
    index+=1
    index1+=1

3.杨辉三角

法1:通过while,每次生成一个一行列表

def yang(count):
    index=0
    list=[1]
    while index<count:
        bianli(list)
        print()
        list=[list[x]+list[x+1] for x in range(len(list)-1)]
        list.insert(0,1)
        list.append(1)
        index+=1

def bianli(a):
    for i in range(len(a)):
        print(a[i],end=' ')

n=int(input())
yang(n)

法2:先生成一个列表中的列表,两次while,第一次从列表中找出当前行的列表,在while添加数据

n = int(input())

k = 2

triangle_yang = [] # 杨辉三角

for i in range(n): # 定义空的杨辉三角
    triangle_yang.append([0 for j in range(i+1)])

# print(triangle_yang)
# exit()
for i in range(n): # 第一列和每一行的最后一个为1
    triangle_yang[i][0] = triangle_yang[i][-1] = 1

while k < n:
    m = 1
    while m < k: # 两肩数值之和
        triangle_yang[k][m] = triangle_yang[k-1][m-1] + triangle_yang[k-1][m]
        m += 1
    k += 1

for i in range(n): # 输出杨辉三角
    for j in range(i+1):
        print(triangle_yang[i][j], end=' ')
    print()


4.斐波那契数列

  1. 一般用for来迭代生成器,当list来处理,不是直接生成一个列表(数据过大),我们保存的是算法,通过算法一个个推导
f=(i**2 for i in range(1,10))
  1. 函数实现生成器(yield语句),推导算法复杂,用列表生成式for循环无法实现,将return变成yeild
def func():
    print('aaaa')
    print("bbbbb")
    print('ccccc')
    yield 5
    print('zzzzz')
    yield 6
f=func()#生成器,生成的东西当作list理解

next(f)
next(f)
next(f)
# for i in f:
#     print(i)

访问:生成器,生成的东西当作list理解
1.生成器可以通过next(f)来实现访问,每次next到yield停止,下次从yield后继续
2.while 1:
next(f)一直访问但是最后会报错StopIteration
3. for i in f:
print(i)

斐波那契数列
法1:函数的形式

def fib(count):
    index=0
    x,y=0,1

    while index < count:
        print(y)
        x,y=y,x+y
        index+=1
fib(9999)

法2:生成器形式

def fib(count):
    index=0
    x,y=0,1

    while index < count:
        yield y
        x,y=y,x+y
        index+=1
    return 'sunck is a good man'

g=fib(9)##生成器
# for i in g:##for 有个缺点就是执行到yield就停止了,拿不到generator的返回值,如果想拿要捕获StopIteration
#     print(i)

#用while
while 1:
    try:
        ret=next(g)
        print(ret)
    except StopIteration as e:
        print("返回值:",e.value)
        break

法3 递归50次就卡死了

import sys#递归50次就卡死了
sys.setrecursionlimit(1000000)  # 例如这里设置为一百万
def f(n):
    if n==1 or n==2:
       return 1
    else:
        return f(n-1)+f(n-2)
n=int(input())
a=f(n)
print(a%10007)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值