Python-4.1 条件控制&循环语句-斐波那契数列

1 杂谈

很高兴我有了104名粉丝,感谢你们一直关注我一个初学者的学习之路,希望日后我们可以共同进步。接下来我会对我的更新的内容做一些调整:

  • 删除“数学基础”专栏,一些算法背后的数学原理与基础我会在文章中单独安排出一章;
  • 新增“科研绘图”专栏,目的是为了提高我对Visio、PPT等绘图工具的使用,以及科研绘图的审美。源文件我会放在自己的Github仓库;
  • 开始更新Deep Learning的内容,学习的材料为沐神(李沐,BosonAI联合创始人,曾担任亚马逊首席科学家。)的《动手学深度学习》(课程安排 - 动手学深度学习课程 (d2l.ai))。

今天我给大家带来的是一个关于斐波那契数列的编程问题。

2 问题描述

2.1 文字描述

编写一个程序,输出前n个斐波那契数列的数字。斐波那契数列是一个数列,其中每个数字都是前两个数字的和,起始的两个数字为0和 1用户输入一个正整数n,程序应输出前n个斐波那契数列的数字,以空格分隔。

2.2 斐波那契数列的数学描述

2.2.1 基础条件

  • F ( 0 ) = F 0 F(0)=F_0 F(0)=F0
  • F ( 1 ) = F 1 F(1)=F_1 F(1)=F1

2.2.2 递归定义

对于 n ≥ 2 n≥2 n2,斐波那契数列中的第n项 F ( n ) F(n) F(n) 由以下公式递归定义:
F ( n ) = F ( n − 1 ) + F ( n − 2 ) F(n)=F(n-1)+F(n-2) F(n)=F(n1)+F(n2)

3 问题分析

解决这个问题,我们需要关注几个事项:

  1. 键入数字n的范围:应该满足 n ≥ 2 n≥2 n2数学意义上);
  2. 输出的数列元素以空格分隔;
  3. 同样也要处理数据类型异常的情形,保证代码的稳健。

4 代码实现

try:
    n = int(input("请输入一个正整数:"))  # 用户键入数字

    if n < 1:
        raise ValueError("请输入一个大于等于1的数字")

    f = [0, 1]  # 初始化储存斐波那契数列的列表

    for i in range(2, n):  # 以循环结构的方式添加斐波那契数字
        f.append(f[i-1] + f[i-2])

    print(" ".join(map(str, f[:n])))  # 打印前n个斐波那契数列

except ValueError as e:  # 处理非正整数输入的异常情形
    print(e)

5 补充知识

让我们看看以下语句:

print(" ".join(map(str, f[:n])))  # 打印前n个斐波那契数列

解析一下这个语句:

5.1 f[:n]-列表切片

  • f 是一个列表,包含了斐波那契数列的元素;

  • f[:n] 是列表的切片操作,表示从列表 f 中取出前 n 个元素。

例如,如果 f = [0, 1, 1, 2, 3, 5]n = 4,则 f[:n] 会返回 [0, 1, 1, 2]

5.2 map(str,f[:n]) -映射函数

  • map() 是一个 Python 内置函数,用来将一个函数应用到一个可迭代对象的每个元素上;

  • str 是 Python 的一个内置函数,作用是将输入转换为字符串;

  • map(str, f[:n]) 的作用是将 f[:n] 列表中的每个元素都转换为字符串。

如果 f[:n] 返回 [0, 1, 1, 2],那么 map(str, f[:n]) 的结果将是 ['0', '1', '1', '2']

5.3 " ".join() -字符串连接

  • " ".join(...) 是 Python 字符串的 join 方法,用于将一个可迭代对象中的所有字符串连接成一个新的字符串;

  • " " 是连接符号,在这里是一个空格,意味着在连接时每两个元素之间用一个空格分隔;

  • map(str, f[:n]) 返回 ['0', '1', '1', '2'] 时," ".join(...) 会将它们连接成一个字符串 "0 1 1 2"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值