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.斐波那契数列
- 一般用for来迭代生成器,当list来处理,不是直接生成一个列表(数据过大),我们保存的是算法,通过算法一个个推导
f=(i**2 for i in range(1,10))
- 函数实现生成器(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)