【问题标题】:Efficiency for python for loop cs50 pset6python for loop cs50 pset6的效率
【发布时间】:2020-07-19 10:43:35
【问题描述】:

我正在 edx 中参加关于计算机科学的 cs50 介绍的免费在线课程。我的意思是我是这方面的初学者。现在,当他们介绍 python 编程语言时,我已经遇到了问题 6。这是一个非常简单的问题。

问题是我认为我的代码看起来很愚蠢。根据视频课程,python 应该从他们在上一课中教给我们的 c 语言编码中提高我的编码时间效率。现在这不是那么重要。只是我认为我会经常使用这个功能所以我希望有人能帮助我解释如何改进这个代码。

from cs50 import get_int

while True:
    height = get_int("height: ")
    if height > 0 and height < 9:
        break
n = height -1
m = 1
for i in range(height):
    for j in range(n):
        print(" ", end="")
    n -= 1
    for k in range(m):
        print("#", end="")
        if m > height:
            break
    m += 1

    print("")

我应该收到这样的输出:

$ ./mario
Height: 4
   #
  ##
 ###
####

正如您所见,我的 for 循环看起来非常愚蠢,至少在我看来是这样的。我认为我在 c 中的代码比这个更好,因此出现了问题。

【问题讨论】:

  • 确实如此。

标签: python performance loops cs50 edx


【解决方案1】:

当然可以缩短您提供的代码,并可能使其更清晰。例如

from cs50 import get_int

while True:
    height = get_int("height: ")
    if height > 0 and height < 9:
        break

for i in range(1, height + 1):
    print(" " * (height - i), end="")
    print("#" * i)

【讨论】:

    【解决方案2】:

    当您习惯于一种语言和习惯于另一种语言时,您肯定能够用 python 比用 C 更快地编写程序。

    原因是python有更多的抽象。

    你可以在 python 中为这个问题写一个这样的解决方案:

    from cs50 import get_int
    
    while True:
        height = get_int("height: ")
        if height > 0 and height < 9:
            break
    
    print('\n'.join([' ' * (height - i) + '#' * i for i in range(1, height + 1)]))
    

    这比你的代码好吗?可能不是。有时尝试将所有代码压缩在尽可能少的行中并不是最好的主意。

    如果您正在编写一个包含数万行代码的复杂系统,您肯定会注意到与 C 相比,python 如何使编写代码更容易,因为您需要担心的事情更少。但是,当您为一个小练习编写解决方案时,差异不会那么明显。

    【讨论】:

    • 是的,我实际上是在问这个问题,因为我认为如果我要编写数千行代码,编写代码会非常麻烦。那么,您是否建议我即使编写数千行代码也不需要将代码压缩到几行?
    • 是的。当您编写大型、复杂的程序时,更重要的是在编写代码后阅读代码的难易程度。有时行数越少越容易阅读,但并非总是如此。例如,我相信其他答案中的代码比我的更具可读性。
    • @C.5314 大多数代码的读取次数多于写入次数。如果您可以在不牺牲清晰度的情况下压缩代码,那就太好了。但是在牺牲代码的可读性之前你应该仔细考虑。
    【解决方案3】:

    你可以用下面的代码实现你想要的(不需要双循环):

    height = 4
    n = height-1
    m = 1
    
    print("Result")
    for i in range(height):
        print((height-i-1)*" "+(i+1)*"#")
    

    结果:

    Result
       #
      ##
     ###
    ####
    

    请记住,一般来说,C 是一种更快的编程语言。但是,如果您习惯了 Python 的工作方式,您可以在 Python 中获得更高的性能。它也更容易编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-02
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多