1、无重复数字的三位数

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

import itertools

ret = []
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
if i != j and i != k and j != k:
ret.append(int('{}{}{}'.format(i, j, k))) print("for循环:{}\r\n总共有{}个数".format(ret, len(ret))) ret = list(map(lambda x: 100 * x[0] + 10 * x[1] + x[2], itertools.permutations([1, 2, 3, 4], 3)))
print("排列组合循环:{}\r\n总共有{}个数".format(ret, len(ret)))

输出:



for循环:[123, 124, 132, 134, 142, 143, 213, 214, 231, 234, 241, 243, 312, 314, 321, 324, 341, 342, 412, 413, 421, 423, 431, 432]

总共有24个数

排列组合循环:[123, 124, 132, 134, 142, 143, 213, 214, 231, 234, 241, 243, 312, 314, 321, 324, 341, 342, 412, 413, 421, 423, 431, 432]

总共有24个数

其实这个问题考的是初中的排列组合。

2、企业发放的奖金根据利润提成

利润低于或等于10万元时,奖金可提10%;

利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提 成7.5%;

20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;

60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数。

money = int(input("请输入当月利润:"))
bonus1 = 100000 * 0.1
bonus2 = bonus1 + 100000 * 0.075
bonus3 = bonus2 + 200000 * 0.05
bonus4 = bonus3 + 200000 * 0.03
bonus5 = bonus4 + 400000 * 0.015
if money <= 100000:
jiangjin = money * 0.1
elif money <= 200000:
jiangjin = bonus1 + (money - 100000) * 0.075
elif money <= 400000:
jiangjin = bonus2 + (money - 200000) * 0.05
elif money <= 600000:
jiangjin = bonus3 + (money - 400000) * 0.03
elif money <= 1000000:
jiangjin = bonus4 + (money - 600000) * 0.01
else:
jiangjin = bonus5 + (money - 1000000) * 0.015
print('当月利润是{}元,提成为:{}'.format(money, jiangjin))

​ 嗯,意思就是你帮公司挣了一百万,公司应当给你提成差不多4万块,可实际是老板只会请你去一趟海底捞,然后鼓励你加油干,扎心。

3、完全平方数

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

完全平方数:可以拆分成一个数的方,如121 = 11^2

import math

def find_num(n):
if (math.sqrt(n + 100)).is_integer() and (math.sqrt(n + 100 + 168)).is_integer():
return True
return False if __name__ == '__main__':
print('这样的数有:{}'.format(list(filter(find_num, range(7000000000)))))

​ 大家请注意,我使用的数字范围是0到70亿,为了得出下面这个结果,让电脑跑了一个晚上,大家猜猜这样的数有几个?答案在下文揭晓哦。

4、这一天是这一年的第几天

题目:输入某年某月某日,判断这一天是这一年的第几天?

程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。

def is_a_leap_year(year):
# 判断是否闰年
if year % 100 != 0 and year % 4 == 0:
return True
if year % 100 == 0 and year % 400 == 0:
return True
return False def which_day(date):
# 输入的日期是一年中的第几天
time_str = date.split("-")
leap_year = is_a_leap_year(int(time_str[0]))
if leap_year:
day_list = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
else:
day_list = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
day = 0
for i in range(0, int(time_str[1])):
day += day_list[i] print("这一天是{}年的第{}天".format(time_str[0], day + int(time_str[2]))) if __name__ == '__main__':
which_day(input("请输入年月日 格式如2000-1-1\n"))

大家猜猜今天是今年的第几天?

是不是感觉时间过得很快。

5、三个数排序

题目:输入三个整数x,y,z,请把这三个数由小到大输出。

def min_order(x, y, z):
if x < y:
x, y = y, x
if x < z:
x, z = z, x
if y < z:
y, z = z, y
return x, y, z if __name__ == '__main__':
print(min_order(1, 2, 3))

6、输出9*9口诀

for i in range(1, 10):
for j in range(1, i + 1):
print("{}*{}={}".format(j, i, j * i), end='\t')
print()

7、兔子数列、斐波那契数列

古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

程序分析:兔子的规律为数列1,1,2,3,5,8,13,21…

def rabbit_count(n):
if n == 1 or n == 2:
return 1
return rabbit_count(n - 1) + rabbit_count(n - 2) for i in range(1, 20):
if i % 4 == 0:
print(rabbit_count(i))
else:
print(rabbit_count(i), end='\t')

这是一个斐波那契数列,解法有很多,这个是比较简单的递归求解。

8、输出101~200之间的素数

题目:判断101-200之间有多少个素数,并输出所有素数。

程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。(sqrt是求平方根的意思)

import math

def is_prime_number(n):
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True if __name__ == '__main__':
prime_numbers = list(filter(is_prime_number, range(101, 201)))
print(prime_numbers)
print(len(prime_numbers))

9、正整数分解质因数

题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

(2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n, 重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

def fact(n):
print('%d=' % n, end='')
for i in range(2, n + 1):
while n != i:
if n > i and n % i == 0:
print(i, end='*')
n = n // i
else:
break
else:
print(n)
break if __name__ == '__main__':
while True:
num = input("输入一个合数:\r\n")
if not num.isdigit():
break
fact(int(num))

10、伪三目运算实现成绩分级

题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,

60分以下的用C表示。

1.程序分析:x if x > y else y这是条件运算符的基本例子。

score = int(input("请输入成绩:"))
print('A' if score >= 90 else ('B' if score >= 60 else 'C'))

11、最大公约数和最小公倍数

输入两个正整数m和n,求其最大公约数和最小公倍数。

1.程序分析:利用辗除法

最大公约数的公式:

m % n = r ,m = n n = r ,r == 0 输出m ,若不为0则继续循环

最小公倍数的公式:

最小公倍数 = 两个正数的乘积/最大公约数。

def max_common_divisor_and_common_multiple(m, n):
# 求解最大公约数、公倍数
list1 = [m, n]
while True:
r = list1[0] % list1[1]
list1[0], list1[1] = list1[1], r
if r == 0:
max_common_divisor = list1[0]
break
max_common_multiple = m * n // max_common_divisor
return (max_common_multiple, max_common_divisor) if __name__ == '__main__':
print(max_common_divisor_and_common_multiple(2, 1))
print(max_common_divisor_and_common_multiple(6, 5))
print(max_common_divisor_and_common_multiple(27, 24))

12、字符统计

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

def char_count(str1):
alpha = space = num = other = 0
for i in str1:
if (i >= 'A') and (i <= 'Z') or (i >= 'a') and (i <= 'z'):
alpha += 1
elif i == ' ':
space += 1
elif (i >= '0') and (i <= '9'):
num += 1
else:
other += 1
return {'alphabet': alpha, 'spacing': space, 'number': num, 'other': other} if __name__ == '__main__':
str1 = input('请输入一行字符:')
print(char_count(str1))

13、叠数相加

题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。

程序分析:关键是计算出每一项的值。

def sum(a, n):
if a == 0:
return 0
s = 0
num = 0
for i in range(1, n + 1):
num += a
s += num
a *= 10
print(num, '+', end=' ')
print('=', s)


if __name__ == '__main__':
a = input('请输入数字:')
n = input('以及相加次数:')
sum(int(a), int(n))

14、完数

题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程 找出1000以内的所有完数。

def sum(a, n):
if a == 0:
return 0
s = 0
num = 0
for i in range(1, n + 1):
num += a
s += num
a *= 10
print(num, '+', end=' ')
print('=', s) if __name__ == '__main__':
a = input('请输入数字:')
n = input('以及相加次数:')
sum(int(a), int(n))

15、高度反弹

题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

def func(n, h=100):
sum = h
for i in range(1, n + 1):
h = h // 2
if h == 0:
return sum, h
sum += h
return sum, h if __name__ == '__main__':
n = int(input("请输入第几次落地:"))
result = func(n)
print('第%d次落地,共经过%d米,第%d次反弹%d米' % (n, result[0], n, result[1]))

16、时间格式

import datetime

time1 = datetime.datetime.now()
# Y:年-m:月 d:日 H:小时 M:分钟 S:秒 W:今年的第几周 w:星期几
time2 = time1.strftime("%Y-%m-%d %H:%M:%S %W %w")
print(time2)

【后记】

第3题的完全平方数答案是,3个:

其实,我们可以提出一个大胆的猜想:

加上100后是一个完全平方数,再加上168又是一个完全平方数,这样的整数有且只有3个,它们分别是【21,261,1581】。这三个数多么特殊啊,以至于在70亿这么庞大的数字中也只有3个。

注:完全平方数:可以拆分成一个数的方,如121 = 11^2

tw0JgXnR-1587267841817)]

16、时间格式

import datetime

time1 = datetime.datetime.now()
# Y:年-m:月 d:日 H:小时 M:分钟 S:秒 W:今年的第几周 w:星期几
time2 = time1.strftime("%Y-%m-%d %H:%M:%S %W %w")
print(time2)

【后记】

第3题的完全平方数答案是,3个:

其实,我们可以提出一个大胆的猜想:

加上100后是一个完全平方数,再加上168又是一个完全平方数,这样的整数有且只有3个,它们分别是【21,261,1581】。这三个数多么特殊啊,以至于在70亿这么庞大的数字中也只有3个。

注:完全平方数:可以拆分成一个数的方,如121 = 11^2

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

关注我,我们一起成长~~

python实现非常有趣的数学问题的更多相关文章

  1. 详解Python编程中基本的数学计算使用

    详解Python编程中基本的数学计算使用 在Python中,对数的规定比较简单,基本在小学数学水平即可理解. 那么,做为零基础学习这,也就从计算小学数学题目开始吧.因为从这里开始,数学的基础知识列位肯 ...

  2. python实现有趣的数学逻辑程序

    1.无重复数字的三位数 题目:有1.2.3.4个数字, 能组成多少个互不相同且无重复数字的三位数? 都是多少? for i in range(1,5): for j in range(1,5): fo ...

  3. python中的有趣用法

    本文给除了python中几个有趣的用法,可以给我们不一样的启发 1: Python中模拟使用C++ 中的   cout << import sys  class ostream: def  ...

  4. 这10个Python项目超有趣!

    前言: Python可谓是现在很多人正在学或者想学的一个脚本语言了,提到学习自然就少不了拿项目练手,可是一般的项目根本提不起兴趣嘛,这10个项目可是非常有趣的,不信你看看. [Python 图片转字符 ...

  5. $用python玩点有趣的数据分析——一元线性回归分析实例

    Refer:http://python.jobbole.com/81215/ 本文参考了博乐在线的这篇文章,在其基础上加了一些自己的理解.其原文是一篇英文的博客,讲的通俗易懂. 本文通过一个简单的例子 ...

  6. Python的常见几道数学运算题

    一 python 相关数学函数及使用示例 常用的数学函数: ceil(x) 取顶 floor(x) 取底 fabs(x) 取绝对值 factorial (x) 阶乘 hypot(x,y)  sqrt( ...

  7. python 数字系列-复数的数学运算

    复数的数学运算 问题 你写的最新的网络认证方案代码遇到了一个难题,并且你唯一的解决办法就是使用复数空间. 再或者是你仅仅需要使用复数来执行一些计算操作. 解决方案 复数可以用使用函数 complex( ...

  8. 《x的奇幻之旅》:有趣的数学科普

    本书是相对比较少见的数学方面的科普书.从最简单的阿拉伯数字.加减法,一直到概率统计.微积分.群论.拓扑.微分几何,每个主题都用几千字做一些深入浅出的介绍.写的相当的有趣. 在书中又一次看到这个有趣的事 ...

  9. 【Python】【有趣的模块】tqdm | inspect

    tqdm """ [tqdm] 显示循环的进度条,再也不用担心程序跑到哪里还要跑多久了 tqdm 可以直接包裹iterable对象 from tqdm import tq ...

随机推荐

  1. safari 浏览器版本升级后提示“此网页出现问题,已重新载入网页” 解决办法

    safari回退条件 版本回退的前提是关闭电脑的SIP机制,命令行 csrutil status 检测状态.Mac os 10.14以下版本回退Safari后插件还是可以用的,升了新系统退了也没法用了 ...

  2. 《To C产品经理进阶》

    我所说的,都是错的. To C产品设计和To B产品设计对一个优秀的产品经理的洞察能力.架构能力有共通的要求. 实际产品设计过程中,To C产品往往是从商业思维思考,侧重用户研究,思考用户心智,由产品 ...

  3. Tensorflow学习笔记No.6

    数据的批标准化 本篇主要讲述什么是标准化,为什么要标准化,以及如何进行标准化(添加BN层). 1.什么是标准化 传统机器学习中标准化也叫做归一化. 一般是将数据映射到指定的范围,用于去除不同维度数据的 ...

  4. 字节码暴力破解censum(老版本)

    声明 事先声明,本文仅提供破解方法以供个人及读者们学习Java字节码,不提倡破解程序. 本文是个人学习掘金小册张师傅的<JVM字节码从入门到精通>后,作为一个实践的记录,并无恶意. 关于c ...

  5. thinkphp5.1 阿里云短信接口

    1.首先声明,我个人是没有,accessKeyId    accessKeySecret   SignName     TemplateCode这些参数是需要自己去,阿里云注册,生成的. 我用的密钥( ...

  6. mysql物理优化器代价模型分析【原创】

    1. 引言 mysql的sql server在根据where condition检索数据的时候,一般会有多种数据检索的方法,其会根据各种数据检索方法代价的大小,选择代价最小的那个数据检索方法. 比如说 ...

  7. SDN实验 3: Mininet 实验——测量路径的损耗率

    验 3:Mininet 实验--测量路径的损耗率 一.实验目的 在实验 2 的基础上进一步熟悉 Mininet 自定义拓扑脚本,以及与损耗率相关的设定:初步了解 Mininet 安装时自带的 POX ...

  8. 一个故事看懂AI神经网络工作原理

    我是一个AI神经元 我是一个AI神经元,刚刚来到这个世界上,一切对我来说都特别新奇. 之所以叫这个名字,是因为我的工作有点像人类身体中的神经元. 人体中的神经元可以传递生物信号,给它输入一个信号,它经 ...

  9. 左叶子之和(sum-of-left-leaves)

    LeetCode题目--左叶子之和(sum-of-left-leaves) 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 ...

  10. 55.Qt-将界面程序封装成静态库

    1.生成dll 然后选择创建静态链接库: 创建的时候,记得勾选QtGui,并且修改pro文件,添加下面1句(这样就可以创建界面了): 修改staticlib.cpp: #include "s ...