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))
Python【每日一问】28的更多相关文章
- [python每日一练]--0012:敏感词过滤 type2
题目链接:https://github.com/Show-Me-the-Code/show-me-the-code代码github链接:https://github.com/wjsaya/python ...
- Python每日一练(1):计算文件夹内各个文章中出现次数最多的单词
#coding:utf-8 import os,re path = 'test' files = os.listdir(path) def count_word(words): dic = {} ma ...
- python每日一函数 - divmod数字处理函数
python每日一函数 - divmod数字处理函数 divmod(a,b)函数 中文说明: divmod(a,b)方法返回的是a//b(除法取整)以及a对b的余数 返回结果类型为tuple 参数: ...
- 每日一问:Android 消息机制,我有必要再讲一次!
坚持原创日更,短平快的 Android 进阶系列,敬请直接在微信公众号搜索:nanchen,直接关注并设为星标,精彩不容错过. 我 17 年的 面试系列,曾写过一篇名为:Android 面试(五):探 ...
- 每日一问:谈谈 volatile 关键字
这是 wanAndroid 每日一问中的一道题,下面我们来尝试解答一下. 讲讲并发专题 volatile,synchronize,CAS,happens before, lost wake up 为了 ...
- 每日一问:讲讲 Java 虚拟机的垃圾回收
昨天我们用比较精简的文字讲了 Java 虚拟机结构,没看过的可以直接从这里查看: 每日一问:你了解 Java 虚拟机结构么? 今天我们必须来看看 Java 虚拟机的垃圾回收算法是怎样的.不过在开始之前 ...
- 每日一问:你了解 Java 虚拟机结构么?
对于从事 C/C++ 程序员开发的小伙伴来说,在内存管理领域非常头疼,因为他们总是需要对每一个 new 操作去写配对的 delete/free 代码.而对于我们 Android 乃至 Java 程序员 ...
- 每日一问:LayoutParams 你知道多少?
前面的文章中着重讲解了 View 的测量流程.其中我提到了一句非常重要的话:View 的测量匡高是由父控件的 MeasureSpec 和 View 自身的 `LayoutParams 共同决定的.我们 ...
- 每日一问:简述 View 的绘制流程
Android 开发中经常需要用一些自定义 View 去满足产品和设计的脑洞,所以 View 的绘制流程至关重要.网上目前有非常多这方面的资料,但最好的方式还是直接跟着源码进行解读,每日一问系列一直追 ...
- python每日一练:0007题
第 0007 题: 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但是要分别列出来. # -*- coding:utf-8 -*- import os def count ...
随机推荐
- C#反射_两合并更新实体
#region 更新实体模型 /// <summary> /// 更新实体模型 /// </summary> /// <typeparam name="T&qu ...
- docker部署angular和asp.net core组成的前后端分离项目
最近使用docker对项目进行了改进,把步骤记录一下,顺便说明一下项目的结构. 项目是前后端分离的项目,后端使用asp.net core 2.2,采用ddd+cqrs架构的分层思想,前端使用的是ang ...
- Go函数篇
1 定义格式 函数构成代码执行的逻辑结构.在Go语言中,函数的基本组成为:关键字func.函数名.参数列表.返回值.函数体和返回语句. Go 语言函数定义格式如下: func FuncName(/*参 ...
- Winform中设置ZedGraph的曲线为折线、点折线、散点图
场景 Winform中设置ZedGraph的曲线为散点图: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102465399 在上 ...
- Class.forName() 与 ClassLoader.loadClass()的区别
看到一个面试题,说说Class.forName() 与 ClassLoader.loadClass()的区别,特意记录一下,方便后续查阅. 在我们写java代码时,通常用这两种方式来动 ...
- win中Oracle简易客户端和plsql的配置
连接数据库有2种方式:在本机安装Oracle数据库或者是安装一个oracle简易客户端 当然,简易客户端跟oracle数据库比较少了一些功能 连接方式: 1)简易连接 sqlplus scott/ti ...
- JavaScript Timing 事件及两种时钟写法
JavaScript 可以在时间间隔内执行. 这就是所谓的定时事件( Timing Events). ------------------------------------------------- ...
- rhel7 学习第二天
参加<Linux就该这么学>在线培训的第二天,学习了虚拟环环境的搭建和红帽7的安装,同时也学习了rhel7的基本命令格式,以及systemctl的使用.
- mac下sourcetree创建git分支和合并分支
git默认创建的分支为:master主分支 要实现的效果:新建和合并分支. 1.在master基础上创建分支v1.0.1并切换至v1.0.1然后推送分支到远程服务器 确定即可!! 然后查看远端已经发现 ...
- Linux操作系统的压缩、解压缩工具介绍
Linux操作系统的压缩.解压缩工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.compress/uncompress命令常用参数 Linux compress命令: ...