page contents

python基础编程100例:第11期-计算阶乘

本文讲述了python基础编程100例:第11期-计算阶乘!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2022-03-Ar1tOf9N622abc9e4fc47.png

本文讲述了python基础编程100例:第11期-计算阶乘!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

第11期-计算阶乘

1 问题描述

阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号。

一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,通俗的讲也就是按顺序从1乘到n,所得的那个数就是n的阶乘。

0的阶乘为1,自然数n的阶乘写作n!。

即:

0!= 1

1!= 1

2!= 2 × 1!= 2 × 1

3!= 3 × 2!= 3 × 2 × 1

n!= n × (n - 1)!= n × (n - 1) × (n - 2) ×...× 2 × 1

输入一个整数n,求其阶乘n!

2 解题思路

用input函数请用户输入一个整数,因为负数无阶乘,需使用户输入的数为自然数

根据阶乘的特点:n!= n × (n - 1)!= n × (n - 1) × (n - 2) ×...× 2 × 1,可用for循环、递归等方法求解

需考虑特殊情况:0!= 1

3 解题方法

方法一:for循环

a = int(input('请输入一个自然数:'))

result = 1

if a < 0:

    print('负数没有阶乘')

elif a == 0:

    print('0的阶乘为1')

else:

    for i in range(1, a + 1):

        result *= i

    print(f"{a}的阶乘为{result}")

第1行: 定义变量a,用input函数使用户输入数字,int函数将其转换为整型

第2行: 创建一个存储阶乘运算结果的变量result,变量初始值为1

第3-10行: 用if...elif...else语句对用户输入的数值进行判断。

若用户输入的数值小于0,输出“负数没有阶乘”;

若用户输入的数值等于0,输出“0的阶乘为1”;

否则用for循环遍历1 至 a 的整数,在每轮循环中,result都会与循环变量 i 相乘并将乘积结果再赋值给result,当for循环结束时,result的值就是自然数n阶乘的运算结果,最后用print函数输出阶乘结果


方法二: 递归法

def factorial(n):

    assert n >= 0, "请输入自然数"

    if n == 0:

        return 1

    return n * factorial(n - 1)

a = int(input('请输入一个自然数:'))

print(factorial(a))

第1行: 定义函数factorial,传入参数n

第2行: 用assert断言函数限定参数n大于或等于0,若大于或等于0,执行后面的代码,否则报错“AssertionError: 请输入自然数!​

assert断言函数的用法在第9期—最大公约数与最小公倍数 (opens new window)中有讲解,大家可以查看哦~​

第3-5行: 设定递归的结束条件,当 n 为 0时,返回值为1,否则返回值为n * factorial(n - 1)

第8行: 定义变量a,用input函数使用户输入数字,int函数将其转换为整型

第9行: 为参数n赋值为a,用print函数打印计算结果


方法三: reduce()函数

from functools import reduce


def factorial(n):

    assert n >= 0, "请输入自然数"

    if n == 0:

        return 1

    return reduce(lambda x, y: x * y, range(1, n + 1))

a = int(input('请输入一个自然数:'))

print(factorial(a))

第1行: 从functools模块中导入reduce()函数

第4行: 定义函数factorial,传入参数n

第5行: 用assert断言函数限定参数n大于或等于0,若大于或等于0,执行后面的代码,否则报错“AssertionError: 请输入自然数!”

第6-7行: 设定递归的结束条件,当 n 为 0时,返回值为1

第8行: 调用reduce函数,使用lambda 表达式输出前n项的积

第11行: 定义变量a,用input函数使用户输入数字,int函数将其转换为整型

第12行: 为参数n赋值为a,用print函数打印计算结果​

reduce() 函数

reduce() 函数是functools模块中的一个函数,其作用是对参数序列中元素进行累积。

语法:

reduce(function, iterable[, initializer])

参数说明:

function:是包含两个参数的函数

iterable :可迭代对象

initializer :初始参数


def prod(x, y):    

    return x + y

print(reduce(prod, [1, 2, 3, 4, 5]))  # 15

函数prod有两个参数x和y,迭代对象是[1,2,3,4,5],计算过程为((((1+2)+3)+4)+5),在函数function的两个参数中,左边的参数x是被累积的值,而右边的参数y是依次从序列中获取的值。

可以使用lambda表达式来简化代码:

print(reduce(lambda x, y: x + y, [1, 2, 3, 4, 5]))   # 15

lambda 表达式

Lambda 函数是Python中的匿名函数,也就是没有具体名称的函数,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用 。​

lambda 表达式的两个要点:

lambda 表达式必须使用 lambda 关键字定义。

在 lambda 关键字之后、冒号左边为参数列表,可不带参数,也可有多个参数。若有多个参数,则参数间用逗号隔开,冒号右边为 lambda 表达式的返回值。

方法四: factorial()函数

import math

a = int(input('请输入一个自然数:'))

result = math.factorial(a)

print(f"{a}的阶乘为{result}")

第1行: 导入模块math

第2行: 定义变量a,用input函数使用户输入数字,int函数将其转换为整型

第3行: 创建变量result,调用math模块中的factorial函数,传入参数a

第4行: print函数输出结果

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-1wGESwWe62919b64285b1.jpeg

  • 发表于 2022-03-11 13:39
  • 阅读 ( 1045 )
  • 分类:Python开发

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1738 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章