关于python常用问题的代码实现:斐波那契,幸运数字,字符串输出三角形,鸡兔同笼类似问题,两个整数之间求和,99乘法表等

1、斐波那契数列

如果给定的是一个数列,比如num = [1,1],如果不想用递归的方式的话,最简单的就可以用列表完成,每一个新产生的数字都是前两项数字之和,得出和值之后,直接添加到原有列表当中,接着遍历即可

# 斐波那契数列,并求和
num = [1, 1]
i = 0
while i < 18:
# 比如,前20项和,由于列表中已经有了两个元素,那么我们只需要补充18个即可,加起来20个
	res = num[-1] + num[-2]
	num.append(res)
	i += 1
print(len(num))
print(num)
# 得出数列之后可以直接调用sum求和∑函数进行加法处理
print(sum(num))
# 也可以使用for循环
sum = 0
for i in num:
	sum += i
print(sum)

在这里插入图片描述
使用递归的话可以这么处理
但是python递归的上限是1000数量级左右
每执行一次递归会重新创建一遍需要的变量,空间的要求是O(n)
如果程序的复杂度比较高,建议不要使用递归

# 递归实现
# 时间复杂度O(2^n),当数据量变大的时候,时间消耗会很大
def fibonacci(n):
	if n <= 2:
		return 1
	return fibonacci(n-1) +fibonacci(n-2)

# 可以使用for循环实现
# 时间复杂度是O(n)
fib = []
def fibonacci_01(n):
	a, b = 0, 1
	for i in range(1, n+1):  # 制作循环效果
		a, b = b, a+b  # 利用序列解包同时赋值
		fib.append(a)
	return a
res = fibonacci_01(15)
print(res)
print(fib)


在这里插入图片描述

2、幸运数字,连续3个数字和为12,称3个数为幸运组合

可以先产生一个随机的数列,按照用户输入的要求进行数据量的产生

import random
num_list = []
count_num = int(input('请输入你想要产生的随机列表元素个数:'))
for i in range(1, count_num+1):
	n = random.randint(1,10)
	num_list.append(n)
# 连续的三个数字要进行比较的话,下标一定要连续
for i in range(len(num_list) - 2):
	res = num_list[i] + num_list[i + 1] + num_list[i + 2]
	if res == 12:
		print('%s\t%s\t%s\t'%(num_list[i], num_list[i+1], num_list[i+2]))

运行结果如下:
在这里插入图片描述

3、画等腰三角形

可以根据用户输入的行数进行三角形绘制

row = int(input('请输入您绘制的行数:'))
for i in range(row):
	print(' '*(row- 1 - i), end = ' ')
	print('* '*(i + 1))

运行结果如下图所示
在这里插入图片描述

4、鸡兔同笼:鸡头兔头一共354,脚一共946只

这是最简单,也是效率最低的一种写法,后期文章做相应优化

for i in range(355):
	for j in range(355):
		if i + j == 354 and 2*i + 4*j == 946:
			print('鸡:%d, 兔:%d'%(i, j))

在这里插入图片描述

5、9*9乘法表

9*9乘法表一直是学编程的时候绕不开的一道题,说简单也简单,说复杂也复杂,用for循环的嵌套可以完成,用列表推导式也可以完成

for i in range(1,10):
	for j in range(1,i+1):
		print('%s * %s = %s'%(i, j , i * j ), end = '\t')
	# 一层循环结束之后,换行一次
	print()
# 列表推导式9*9乘法表
print('\n'.join(['\t'.join(['%s * %s = %s'%(i,j,i*j) for j in range(1, i + 1)]) for i in range(1, 10)]))

在这里插入图片描述

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值