Python乘法表的语法差异

时间:2012-05-03 02:58:39

标签: python iteration

所以我正在学习python作为初学者并且一直在使用如何像计算机科学家一样思考python 3.我在关于迭代的章节,从我自己的大脑进行编码而不是复制/粘贴所以我记住它更容易。

当进行乘法表部分的最后一部分时,我得到了与课程相同的输出,但看起来我的更清晰(参数更少)。我仍然试图抓住追踪程序,所以我很难绕过差异。我希望有人能让我知道,如果我的代码效率低下或者比文本的版本更容易出错,并帮助结束这个令人头痛的问题;)。

def print_multiples(n, high):         #This is the e-book version
    for i in range(1, high+1):
        print(n * i, end='   ')
    print()

def print_mult_table(high):
    for i in range(1, high+1):
        print_multiples(i, i+1)       #They changed high+1 to i+1 to halve output

Source

看起来他们的结果会有太多+ 1,因为i + 1会在print_multiples中变为'high',然后在print_multiples循环中再次添加+1。 (我也注意到他们保持结束=''而不是结束='\ t',这使得对齐。

def print_multiples(n):         #n is the number of columns that will be made
    '''Prints a line of multiples of factor 'n'.'''
    for x in range(1, n+1):     #prints n  2n  3n ... until x = n+1
        print(n * x, end='\t')  #(since x starts counting at 0, 
    print()                     #n*n will be the final entry)


def print_mult_table(n):            #n is the final factor
    '''Makes a table from a factor 'n' via print_multiples().
    '''
    for i in range(1, n+1):         #call function to print rows with i
        print_multiples(i)          #as the multiplier.

这是我的。基本的评论是为了我的利益,试图将追踪直接保留在我的脑海中。我的功能对我来说更有意义,但可能会有一些不同。我真的不明白为什么这本书决定为print_multiples()创建两个参数,因为1似乎对我来说足够了...我也改变了大部分变量,因为他们多次使用'i'和'high'来演示本地vs全球。不过,我重新使用了n,因为在两种情况下它都是相同的最终数字。

可能有更有效的方法来做这种事情,但我还在迭代。只是希望能够尝试了解哪些有效,哪些无效,而这一点让我烦恼。

1 个答案:

答案 0 :(得分:1)

(注意:对,你正在运行Python 3.x)
你的代码更简单,对我来说也更有意义 他们是正确的,但其意图并不完全相同,所以它的输出是不同的 仔细比较两者的输出,看看你是否能注意到差异的模式。

您的代码稍微“高效”,但在屏幕上打印内容需要(相对)长时间,并且您的程序打印时间略低于他们的。

要衡量效率,您可以在Python中“分析”代码以查看所需的时间。 以下是我跑到的代码 a)检查源文本和输出的差异
b)描述代码以查看哪个更快 您可以尝试运行它。祝你好运!

import cProfile

def print_multiples0(n, high):         #This is the e-book version
    for i in range(1, high+1):
        print(n * i, end='   ')
    print()

def print_mult_table0(high):
    for i in range(1, high+1):
        print_multiples0(i, i+1)       #They changed high+1 to i+1 to halve output

def print_multiples1(n):        #n is the number of columns that will be made
    '''Prints a line of multiples of factor 'n'.'''
    for x in range(1, n+1):     #prints n  2n  3n ... until x = n+1
        print(n * x, end='\t')  #(since x starts counting at 0,
    print()                     #n*n will be the final entry)

def print_mult_table1(n):            #n is the final factor
    '''Makes a table from a factor 'n' via print_multiples().
    '''
    for i in range(1, n+1):          #call function to print rows with i
        print_multiples1(i)          #as the multiplier.

def test( ) :
     print_mult_table0( 10)
     print_mult_table1( 10)

cProfile.run( 'test()')