簡體   English   中英

python for loop cs50 pset6 的效率

[英]Efficiency for python for loop cs50 pset6

我正在 edx 上參加 cs50 計算機科學介紹的免費在線課程。 我的意思是我是這方面的初學者。 現在,當他們介紹 python 編程語言時,我已經遇到了問題 6。 它非常簡單的問題。

問題是我認為我的代碼看起來很愚蠢。 根據視頻課程,python 應該可以提高我在 c 中編碼的編碼時間效率,這是他們在上一課中教我們的語言。 現在這不是那么重要。 只是我認為我會經常使用這個 function 所以我希望有人能幫我解釋如何改進這個代碼。

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("")

我應該收到這樣的 output :

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

正如你所看到的,我的 for 循環看起來非常愚蠢,至少在我看來是這樣的。 我認為我在 c 中的代碼比這個更好,因此是問題所在。

在 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)]))

這比你的代碼好嗎? 可能不是。 有時嘗試將所有代碼壓縮在盡可能少的行中並不是最好的主意。

如果您正在編寫具有數萬行代碼的復雜系統,您肯定會注意到 python 與 C 相比如何使編寫代碼更容易,因為您需要擔心的事情更少。 但是,當您為一個小練習編寫解決方案時,差異不會那么明顯。

當然可以縮短您提供的代碼,並可能使其更清晰。 例如

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)

您可以使用以下代碼實現您想要的(不需要雙循環):

height = 4
n = height-1
m = 1

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

結果:

Result
   #
  ##
 ###
####

請記住,一般來說,C 是一種更快的編程語言。 但是,如果您習慣了在 Python 中的工作方式,您可以在 Python 中獲得更高的性能。 它也更容易編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM