所以我正在学习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
看起来他们的结果会有太多+ 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,因为在两种情况下它都是相同的最终数字。
可能有更有效的方法来做这种事情,但我还在迭代。只是希望能够尝试了解哪些有效,哪些无效,而这一点让我烦恼。
答案 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()')