[英]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.