• Python【每日一问】28


    问:

    【基础题】:求 1+2!+3!+...+20! 的和

    【提高题】:两个乒乓球队进行比赛,各出三人。甲队为 a,b,c 三人,乙队为 x,y,z 三人。已抽签决定比赛名单。 有人向队员打听比赛的名单。 a 说他不和 x 比, c 说他不和 x,z 比,请找出三队赛手的名单

    答:

    基础题:求 1+2!+3!+...+20! 的和

    方法1:

    def factorial(n):
        if n == 0 or n == 1:
            return 1
        else:
            return factorial(n - 1) * n
    ​
    ​
    my_sum = sum(factorial(i) for i in range(1, 21))
    print(f"1! + 2! + 3! + 4! + 5! + ... + 20!={my_sum}")

    方法2:

    def recursion(n): #'定义递归函数实现求阶乘功能'
        if n == 1:
            return 1
        else:
            return n*recursion(n-1)
    ​
    ​
    list_recursion = []  # 定义一个空的列表,将调用递归函数生成的阶乘值追加到列表
    for i in range(1,21):
        list_recursion.append(recursion(i))  # 将调用递归函数生成的阶乘值追加到列表
    ​
    ​
    print(sum(list_recursion))

    方法3:

    def recursion(n): #'定义递归函数实现求阶乘功能'
        if n == 1:
            return 1
        else:
            return n*recursion(n-1)
    ​
    ​
    Sum = 0
    for i in range(1, 21):
        Sum += recursion(i)
    print(Sum) 

    方法4:

    def factorial(num):
        if num == 1:
            return 1
        else:
            return num * factorial(num - 1)
    ​
    ​
    def sum_factorial():
        iteration = int(input("Input the max iteration:"))
        result = 0
        for i in range(1, iteration+1):
            result += factorial(i)
        print("Alright, we catch the result:{}".format(result))
    
    ​
    ​
    if __name__ == '__main__':
        sum_factorial()

    方法5:

    def factorial(n):
        f = 1
        for i in range(1, n+1):
            f = f * i
        return f
    ​
    num = int(input("请输入一个数字:"))
    sum = 0
    if num < 0:
        print("抱歉,负数没有阶乘")
    elif num == 0:
        print("0的阶乘为1")
    else:
        for i in range(1, num+1):
            sum += factorial(i)
        print(sum)

    方法6:

    def factorial(number):
        start = 1
        fact = 1
        while start <= number:
            yield fact
            start += 1
            fact *= start
    ​
    ​
    fact = factorial(20)
    sum = 0
    ​
    for i in fact:
        sum += i
    print(sum)

     

    提高题:两个乒乓球队进行比赛,各出三人。甲队为 a,b,c 三人,乙队为 x,y,z 三人。已抽签决定比赛名单。 有人向队员打听比赛的名单。 a 说他不和 x 比, c 说他不和 x,z 比,请找出三队赛手的名单。

     

    from itertools import permutations
    ​
    team_a = ["a", "b", "c"]
    team_b = ["x", "y", "z"]
    ​
    possible_match_lists = []
    ​
    for possible_team_b_sequence in list(permutations(team_b)):
        possible_match_lists.append(dict(zip(team_a, possible_team_b_sequence)))
    ​
    final_match_lists = list(filter(lambda x: x["a"] != "x" and 
                                    x["c"] != "x" and 
                                    x["c"] != "z", possible_match_lists))
    ​
    for index, match_list in enumerate(final_match_lists):
        print(f"solution{index+1}")
        for competitiors in match_list.items():
            print(" vs ".join(competitiors))
  • 相关阅读:
    使用fscanf读取文本文件
    实验室开发机系统结构图
    字符串是否为数字及有效性检查
    winXP系统通过蓝牙在笔记本和手机之间传递数据
    HarborGIS3D场景编辑器速成街区数据
    判断一个浮点数是否为NAN(INF)
    单文档中只是想得到当前View类的指针
    windows控制台中使用不同颜色显示不同类型的日志
    c++中enum 如何使用
    陈佩斯
  • 原文地址:https://www.cnblogs.com/ElegantSmile/p/10895119.html
Copyright © 2020-2023  润新知