j教育互联网:那些数学不好的程序员,最后都怎么样了?

    作者:Java技术虎更新于: 2020-06-05 14:16:19

    网上曾流传着这样的段子,戏说程序员中的等级:对于一般的程序员就是代码的产出和可运行程序(数学在这里面并不是特别重要,更重要的是对各种框架的理解、熟练掌握、设计模式等)。

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

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

    j教育互联网:那些数学不好的程序员,最后都怎么样了?_IT业界_互联网_编程语言_课课家 

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

     

    对普通编程来说,高中数学成绩不错就可以了。但涉及到高端编程就吃力了,比如算法、深度学习等。不得不说,数学这块“木板”往往决定了程序员能否往更高层次进阶。

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

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

     

    生成乘法表

     

    考虑三个数字 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)

     

    0

     

    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编程语言打下坚实的基础。

    数学是基础学科,有丰富的数学基础可以对理解编程中的逻辑有帮助。

    编程对不同的人有不同的意义:

    对于算法工程师来说,数学就很重要了(例如机器学习,密码学,计算机图形学等,当然这个对题主来说还太遥远)。

    题主说的函数实际上就是为了实现目的的一种封装形式,而递归只是在函数中调用自身(当然需要终止条件)。

     

课课家教育

未登录