赣州新闻网

首页 / 科技

那些数学不好的程序员,最后都怎么样了?

2020-02-13 · 赣州新闻网 · 科技


那些数学不好的程序员,最后都怎么样了?

网上曾流传着这样的段子,戏说程序员中的等级:

一流程序员靠数学,二流靠算法,三流靠逻辑,四流靠SDK,五流靠Google和StackOverFlow,六流靠百度和CSDN。低端的看高端a ( ^的就是黑魔法!

玩笑里藏的是残忍的现实,O % h B &异步君不禁流下泪水。虽然整个大学就在被高等数学、离散数学、微积分、线性代数等数学课支配的恐惧中度过,但还是总在] & : / ? 7 o挂科的边缘徘徊,根本没有重视数学。

那些数学不好的程序员,最后都怎么样了?

在管理学上有一个著名的“木桶理论”,是指用一个木桶来装水,如果组成木桶的木板参差不齐,那么、这个木桶能装多少水,只能由这个木桶中最短的木板决定。

那些数学不好的程序员,最后都怎么样了?

对普通编程来说,高中数学成绩不错O u . a 3 e ]就可以了。但涉及到高端编程就T L 8 z吃力了,比如算法、深度学习等。不得不说,数学这块“u d & n J b - b x木板”往往决定了程序员能否往更高层次进阶。

年少不知数学重要,长大方悔没学好。

当然,只要肯学习B { ; j @ -,未来一切皆有可能。今天异步君给大家分享几个数学计算程序,帮助大家理解数学在编程中的应用。


生{ 6 H i O L a v c成乘法表


考虑三个数字 a、bd E ` & C 和 n,其中 n 是整数,使得 an = b。此处我们可以说,b是 a 的第 n 个倍数。例如,4 是j L N ; # 8 5 h 2 的第二个倍数,1024 是 2 的第 512 个倍数。

一个数字的乘法表列出了该数字的所有倍数。例如,2 的乘法表是这样的(这里给出了 2 的前三个倍数):

21=2

22=4

23=6

我们的下一个程序就是为用户输入的任何数字生成最大到乘数 10 的乘法表。

在这个程序中,我们将使用 format()函数与 print()函数来使程序的输出看起来更友好、更可读。下面简{ Z $ i (要介绍一下它的工作原理。

format()函数可以插入标签并对其进行设置,以获得一个友好X z H 9 ` Z V B 3的、可读的字符串

输出。例如,假设我们有在杂货店购买的所有水果的名称,并为每种水果创建了单独的标签,现在想输出一个连贯的句子,可以使用 format()函数:

>>>item1=\'apples\'
>c ! u Y * l u 7 Z>>item2=\'bananas\'
>>>item3=\'grapes\'
>>>print(\'Atthegrocerystore,Iboughtsome{0}and{1}and{2N K a}\- ! O s 4 a'.format(item1,item2,item3))
Atthegroced I 3 u E * V Trystore,Iboughtsomeapplesandbananasandgri ~ - d ) Wapes


首先,我们创建P l )了三J b j a B ,个标签(item1、item2 和 item3),每个标签指代不同的字符串(苹果、香蕉和葡萄)。然后,在 print()? o ( f u k O ~函数中,我们键入字符串,它包含了三个在大括号中的占位符,分别为{_ j J0}、{1}和{2}。接下来是.format| E O(),它的参数为之前创建的三个标签,这会告诉 Python 按照列出的顺序,d ! | ] ? L T ymat()中直接键入值,
如下例所示:

>{ 9 n W %>>print(\'Number1:{0}Number2:{1}\'.format(1,3.578))Number1:1Number2:3.578

请注意,占位符的数量和标签(或w * % B d }键入值)的数量必须相等。
了解W 1 u了 format()的工作原理之后,接下来让我们看看生成乘法表的程序:

Multiplicatio5 u / 6ntable2 d Y x 0 s MprX t B = _ q L M _inter
defmulti_table(a):
?foriinrange= R .(1,11):
print(\'{0}x{1}={2}\'.format(a,i,a*i))
if__name__==\'__main__\/ { F r':
a=7 @ @ ;input(N 5 ? 5 p\'w ` HEnteranumber:\. x a')
multi_taX 1 s J 1 ` S lble(float(a))

multi_table()w w = w函数实现程序的主要功能,它将输出 a 的乘法表(a 也是参数y g ))。
因为我们要输出从 1 到 10 的乘法表,所以在?处有一个 for 循环,它将迭代这些数字中的每一个数字,输出它本身和数字 a 的乘积。
当你执行程序时,它会让你输入一个数字,然后该程序输出其乘法表:

Enteranumber:5
5.0x1=5.n q N0
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

看到这张清晰又有秩序的乘T 4 h C q v法表了吗?这正是我们使用了.format()函数3 4 H e 8,根据
可读p 3 A P、统一的模板输出的内容。
你可以使用$ S & b b l R format()函数来进一步d 7 - ( ( o a I控制数字输出的形式。例如,如果希望数字
只有_ x C两位9 K o ? V N c Y #小数,可以参考下面的例子:

Enteranumber:5
>>>\'{0}\'.format(1.25456)
\'1.25456\'
>>>\'{0:.^ V K S ?2f}\'.format(1.25456)
\'1.25\'

第一个 format 语句将我们输入的数字原封不动地输出。在第二个语句中,我们
将占位符修改为{0:.2f},这意味着我们只需要小数点后面的两个数字,其中 f 表示一个浮点数。如你所见,在下一个输出中,小数点后只有两个数J } . , 6 ] [ 7 k字。请注意,如i c D 9 6 $ z Z果数字小数点后的位数多于你指定的位数,则该数字将四舍五入,例如:

>>>\'{0:.2f}\'.& . c * D $ C S ?format(1.25556)
\'1.26\'

在这里,1.22 k F c 0 j c N5556 向上取整到最接近的百分位,并输出为 1.26。如果将.2f 应用
到整数上,则会在小数点后面添加N $ V零:

>>>\'{0:.2f}\'.format(1)
\'1.00\'

添加两个零9 N H ; x是因为我们指定在小数点后输出两个数字。


计算整数因子


当非零0 $ ) % Y整数 a 除另一个整数 b,余数为 0 时,a 称为 b 的因子。例如,F v h Q d 8 7 )2 是所有 偶数整数的因O p _ R , =子。我们可以编写下面的函数来确定非零整数 a 是否. - k是另一个整数 b 的因子:

>>>defis_factor(a,b):
ifb%a==0:
returnTrue
else:
returnFalse

我们使用%运算符来W c / 9 + . ^ q 8计算余数。如果你发现自己在问“4 是不 是 1024 的因子”这类问题,可以使用 i9 = D h +s_factor()函数得到答案:

>>>is_facto4 ~  V 7 g hr(4,102Q C v A4)
True

对于任何正整数 n,如何找到j d n 0 F a其所有的正因子?对于 1 和 n 之间的每个整数, 我们检查 n 除以该整数后的余数。如果余数为 0,那么这个整数就是一个因子。使 用 rangA g _ 2 e Z | 3e()函数来编写一个程序,它将遍历 1 到 n 之间的每个数字。

在编写完整的程序之前,先来看看 rU _ & V 0 O;>foriinrange(1,10,2):
print(i8 X l K `)
1
3
5
7
9

我们已经了解了 range()函数是如何工$ 5 . # # $作的,接下来考虑一个因子计算程序。因 为我们将要编写一个相当长的程序,所以= # -在 IDLE 编辑器里编写,而不是在交互式 的 IDLE 界面中。你可以在 IDLE 中选择 File->NewQ L A Z { ^ v 2 V Window(或者 New File)来启 动编辑器。请注意,我们首先用三个单引号(\')来注释代码,这些引号之间的文本 不会被 Python 作为程序的一部分执行,它们只是我们对程序的注释。

\'\'\'
Findthefactorsofaninteger
\'\R K + ~'\'


deffactors(b):

foriinrange(1,b+1):
ifb%i==0:
print(i)

if__name__==\'__main__\':


b=input(\'YourNumberPlease:\')
b=float(b)

ifb>0andb.is_i= m G D $ w ; @ Ynteger():
factors(int(b))
else:
print(\'Pleaseenterapositiveint` - f k G P z @ 4eger\')

factors()函数定义3 U | f _了一个 for 循环,在n处,该循环使用 ranE R _ J jge()函数对 1 和输入 的数字之间的每个整数迭代一次。这里,我们要迭代到用户输Z h ~入的整数 b,所以停 止值被设置为 b+1。对于每个整数 i,程序检查输入数字 b 除以 i 后是否没有余数, 如果没有余数,就输出 i。

当你运行此程序(选M 1 / n l择 Run->RuE / ~ } 5 P (n Module)时,它会要求你输入一个数字。如 果你输入的数字是正整数,程序会输出其因子,例如o w j { 2 P X I:

YourNumberPlease:25
1
5
25

如果输入的是非整数或负整数,程序会输出一条错误信息,并要求你输入一 个正整数:

YourNumberPlease:15.5
Pleaseent z ` xerapositiveinteger

在这个例子中,我们通过检查程序T 1 W E h的无效Z G k 5输入,使程序对用户更加友好。因为 我们的程序仅用于查找正整数的因子,所以* l t @ L U : 2 C要检查输入的数字是否大于 0 并且 使用 is_integer()函数检查输入的数是否是整数,以确保输入有效。

如果输入的数不是正整数,程序将输出一个用户友好的指令,而不是一长串的错误信息。

-I 3 6 ( h x V +END-

最后,异8 z m Z ,步君给大家推荐一本书,可以将程序设计和数学巧妙地结合起来,从简单的项目开始,应用Python解决高中和大学低年级的数学问题,比如几何、概率、统计以及微积分等,为进一步学习更复杂的数学内t u 8 & w容以及Python编程语言打下坚实的基础。

本书也可作为Python初学者的入门读物,通过学习书中的示例程K } } b A _ h -序和完成那些编程挑战,读者可以提高自己的编程能力和技巧。


那些数学不好的程序员,最后都怎么样了?



关注“异步图书”微信公e ( k W b 1 7 1众号,回复“52271” 9 8领取本书配套源代码;


回复 \"VIP\" 免费领D o q F ~ v Y w t取VIP会员卡,畅读近千门电子书。


今日福利


那些数学不好的程序员,最后都怎么样了?

《Python数学编程》

阿米特萨哈(Amit Saha) 著

许杨毅,9 ~ d刘旭华 译


如何获得:8 y ! d 5 Y 9 a T关注公众号:异步图书4 v A 0 E H,在看+参与话题留言+转发本文至朋友圈,2月20日,异步君将抽取2名读者赠送《Python数学编程》。


今日互动话题:

“你认为数学对编程有哪些好处呢?”

大学确保项目工作设置秩序数学程序员本地新闻