来源:异步社区
网上曾流传着这样的段子,戏说程序员中的等级:
程序员靠数学,二流靠算法,三流靠逻辑,四流靠SDK,五流靠Google和StackOverFlow,六流靠百度和CSDN。低端的看高端的就是黑魔法!
玩笑里藏的是残忍的现实,异步君不禁流下泪水。虽然整个大学就在被高等数学、离散数学、微积分、线性代数等数学课支配的恐惧中度过,但还是总在挂科的边缘徘徊,根本没有重视数学。
在管理学上有一个的“木桶理论”,是指用一个木桶来装水,如果组成木桶的木板参差不齐,那么、这个木桶能装多少水,只能由这个木桶中短的木板决定。
对普通编程来说,高中数学成绩不错就可以了。但涉及到高端编程就吃力了,比如算法、深度学习等。不得不说,数学这块“木板”往往决定了程序员能否往更高层次进阶。
年少不知数学重要,长大方悔没学好。
当然,只要肯学习,未来一切皆有可能。今天异步君给大家分享几个数学计算程序,帮助大家理解数学在编程中的应用。
生成乘法表
考虑三个数字 a、b 和 n,其中 n 是整数,使得 a×n = b。此处我们可以说,b是 a 的第 n 个倍数。例如,4 是 2 的第二个倍数,1024 是 2 的第 512 个倍数。
一个数字的乘法表列出了该数字的所有倍数。例如,2 的乘法表是这样的(这里给出了 2 的前三个倍数):
2×1=2
2×2=4
2×3=6
我们的下一个程序就是为用户输入的任何数字生成大到乘数 10 的乘法表。
在这个程序中,我们将使用 format()函数与 print()函数来使程序的输出看起来更友好、更可读。下面简要介绍一下它的工作原理。
format()函数可以插入标签并对其进行设置,以获得一个友好的、可读的字符串
输出。例如,假设我们有在杂货店购买的所有水果的名称,并为每种水果创建了单独的标签,现在想输出一个连贯的句子,可以使用 format()函数:
>>>item1='apples'
>>>item2='bananas'
>>>item3='grapes'
>>>print('Atthegrocerystore,Iboughtsome{0}and{1}and{2}'.format(item1,item2,item3))
Atthegrocerystore,Iboughtsomeapplesandbananasandgrapes
首先,我们创建了三个标签(item1、item2 和 item3),每个标签指代不同的字符串(苹果、香蕉和葡萄)。然后,在 print()函数中,我们键入字符串,它包含了三个在大括号中的占位符,分别为{0}、{1}和{2}。接下来是.format(),它的参数为之前创建的三个标签,这会告诉 Python 按照列出的顺序,用这些标签保存的值来填充这三个占位符,因此,在 Python 的输出文本中,个标签的内容替换了{0},第二个标签的内容替换了{1},依此类推。
使用标签指向我们要输出的值并非必要,我们可以在.format()中直接键入值,
如下例所示:
>>>print('Number1:{0}Number2:{1}'.format(1,3.578))Number1:1Number2:3.578
请注意,占位符的数量和标签(或键入值)的数量必须相等。
了解了 format()的工作原理之后,接下来让我们看看生成乘法表的程序:
Multiplicationtableprinter
defmulti_table(a):
?foriinrange(1,11):
print('{0}x{1}={2}'.format(a,i,a*i))
if__name__=='__main__':
a=input('Enteranumber:')
multi_table(float(a))
multi_table()函数实现程序的主要功能,它将输出 a 的乘法表(a 也是参数)。
因为我们要输出从 1 到 10 的乘法表,所以在?处有一个 for 循环,它将迭代这些数字中的每一个数字,输出它本身和数字 a 的乘积。
当你执行程序时,它会让你输入一个数字,然后该程序输出其乘法表:
Enteranumber:5
5.0x1=5.0
5.0x2=10.0
5.0x3=15.0
5.0x4=20.0
5.0x5=25.0
5.0x6=30.0
5.0x7=35.0
5.0x8=40.0
5.0x9=45.0
5.0x10=50.0
看到这张清晰又有秩序的乘法表了吗?这正是我们使用了.format()函数,根据
可读、统一的模板输出的内容。
你可以使用 format()函数来进一步控制数字输出的形式。例如,如果希望数字
只有两位小数,可以参考下面的例子:
Enteranumber:5
>>>'{0}'.format(1.25456)
'1.25456'
>>>'{0:.2f}'.format(1.25456)
'1.25'
个 format 语句将我们输入的数字原封不动地输出。在第二个语句中,我们
将占位符修改为{0:.2f},这意味着我们只需要小数点后面的两个数字,其中 f 表示一个浮点数。如你所见,在下一个输出中,小数点后只有两个数字。请注意,如果数字小数点后的位数多于你指定的位数,则该数字将四舍五入,例如:
>>>'{0:.2f}'.format(1.25556)
'1.26'
在这里,1.25556 向上取整到接近的百分位,并输出为 1.26。如果将.2f 应用
到整数上,则会在小数点后面添加零:
>>>'{0:.2f}'.format(1)
'1.00'
添加两个零是因为我们指定在小数点后输出两个数字。
计算整数因子
当非零整数 a 除另一个整数 b,余数为 0 时,a 称为 b 的因子。例如,2 是所有 偶数整数的因子。我们可以编写下面的函数来确定非零整数 a 是否是另一个整数 b 的因子:
>>>defis_factor(a,b):
ifb%a==0:
returnTrue
else:
returnFalse
我们使用%运算符来计算余数。如果你发现自己在问“4 是不 是 1024 的因子”这类问题,可以使用 is_factor()函数得到答案:
>>>is_factor(4,1024)
True
对于任何正整数 n,如何找到其所有的正因子?对于 1 和 n 之间的每个整数, 我们检查 n 除以该整数后的余数。如果余数为 0,那么这个整数就是一个因子。使 用 range()函数来编写一个程序,它将遍历 1 到 n 之间的每个数字。
在编写完整的程序之前,先来看看 range()如何工作。range()函数的典型用法如下所示:
>>>foriinrange(1,4):
print(i)
1
2
3
在这里,我们设置了一个 for 循环,并给 range()函数传入了两个参数。range() 函数从个整数参数(起始值)开始,一直到第二个整数参数(停止值)截止。 在这个例子中,我们告诉 Python 输出该范围内的数字,从 1 开始,到 4 停止。注意, 这意味着 Python 不会输出 4,所以后输出的数字是停止值之前的数字 3。同时也 要注意,range()函数只接收整数作为参数。
你也可以不指定 range()函数的起始值,在这种情况下,起始值被假定为 0。 例如:
>>>foriinrange(5):
print(i)
1
2
3
4
由 range()函数产生的两个连续整数之间的差称为步长值(step value)。默认情 况下,步长值为 1。要定义其他的步长值,请将其指定为第三个参数(这时,需指 定起始值)。例如,下面的程序将输出 10 以下的奇数:
>>>foriinrange(1,10,2):
print(i)
1
3
5
7
9
我们已经了解了 range()函数是如何工作的,接下来考虑一个因子计算程序。因 为我们将要编写一个相当长的程序,所以在 IDLE 编辑器里编写,而不是在交互式 的 IDLE 界面中。你可以在 IDLE 中选择 File->New Window(或者 New File)来启 动编辑器。请注意,我们首先用三个单引号(')来注释代码,这些引号之间的文本 不会被 Python 作为程序的一部分执行,它们只是我们对程序的注释。
'''
Findthefactorsofaninteger
'''
deffactors(b):
foriinrange(1,b+1):
ifb%i==0:
print(i)
if__name__=='__main__':
b=input('YourNumberPlease:')
b=float(b)
ifb>0andb.is_integer():
factors(int(b))
else:
print('Pleaseenterapositiveinteger')
factors()函数定义了一个 for 循环,在n处,该循环使用 range()函数对 1 和输入 的数字之间的每个整数迭代一次。这里,我们要迭代到用户输入的整数 b,所以停 止值被设置为 b+1。对于每个整数 i,程序检查输入数字 b 除以 i 后是否没有余数, 如果没有余数,就输出 i。
当你运行此程序(选择 Run->Run Module)时,它会要求你输入一个数字。如 果你输入的数字是正整数,程序会输出其因子,例如:
YourNumberPlease:25
1
5
25
如果输入的是非整数或负整数,程序会输出一条错误信息,并要求你输入一 个正整数:
YourNumberPlease:15.5
Pleaseenterapositiveinteger
在这个例子中,我们通过检查程序的输入,使程序对用户更加友好。因为 我们的程序仅用于查找正整数的因子,所以要检查输入的数字是否大于 0 并且 使用 is_integer()函数检查输入的数是否是整数,以确保输入有效。
如果输入的数不是正整数,程序将输出一个用户友好的指令,而不是一长串的错误信息。
-END-
后,异步君给大家推荐一本书,可以将程序设计和数学巧妙地结合起来,从简单的项目开始,应用Python解决高中和大学低年级的数学问题,比如几何、概率、统计以及微积分等,为进一步学习更复杂的数学内容以及Python编程语言打下坚实的基础。