我應該編寫最終像這樣的程序:Python的淨距三角
* *
* *
* *
*
我有一個經常一個編寫的代碼,但我不知道如何將空間進去。
def triangle(i, t = 0):
if i == 0
return 0
else:
print ' ' * (t + 1) + '*' * (i * 2 - 1)
return triangle(i - 1, t + 1)
請教?
我應該編寫最終像這樣的程序:Python的淨距三角
* *
* *
* *
*
我有一個經常一個編寫的代碼,但我不知道如何將空間進去。
def triangle(i, t = 0):
if i == 0
return 0
else:
print ' ' * (t + 1) + '*' * (i * 2 - 1)
return triangle(i - 1, t + 1)
請教?
嘗試:
def triangle(i, t = 0):
if i == 0:
print (t+1) *' '+ '*'
else:
print ' ' * (t + 1)+ '*' + ' ' * (i * 2 - 1) + '*'
triangle(i - 1, t + 1)
triangle(5)
這段代碼打印:
* *
* *
* *
* *
* *
*
您實際上不需要返回語句因爲你沒有使用遞歸函數的結果。只要將'return triangle(i - 1,t + 1)'改成'triangle(i - 1,t + 1)'並且移除'return 0',同時將i == 0改爲i <= 0,以防止無限循環如果你傳遞一個負值 – 2013-05-03 23:18:39
謝謝!我編輯這個 – 2013-05-03 23:21:50
讓我們在標籤一行一些地區:
startSpaces * middleSpaces * endSpaces
對於要startSpaces
+ 1 + middleSpaces
+ 1 + endSpaces
等於恆定的給定線路。這個常量是2*(i+t) + 1
1號線將有t=0
空格前的*
線下決賽將有t=i
空格*
(這裏我用原來的i
,我知道它的變化通過遞歸)
前所以你能找到startSpaces
,middleSpaces
和endSpaces
的模式,它會給你正確的模式嗎?
請記住,您將需要一個額外的else if
案例i==1
,這樣就可以只用一個*
處理行這應該足以讓你更接近了很多解決您的問題。我假設它是作業,所以我不會爲你解決它,如果你陷入困境,要求更多的線索。
另外,您在第一個'if'語句中缺少冒號,而您的else語句位於錯誤的縮進處 – James 2013-05-03 22:43:36
大廈@哈拉齊的答案(因爲這讓我想起了我早期的GWBASIC編程這是什麼讓我興奮的節目作爲一個孩子的):
def triangle(i, leftShape='*', rightShape='*', bottomShape='*', spaceShape=' ', t = 0):
if i <= 0:
print ((t+1)*spaceShape)+bottomShape+((t+1)*spaceShape)
else:
print (spaceShape*(t + 1))+leftShape+(spaceShape*(i*2-1))+rightShape+(spaceShape*(t + 1))
triangle(i-1, leftShape, rightShape, bottomShape, spaceShape, t+1)
if __name__== '__main__':
triangle(3)
triangle(3, '\\', '/')
triangle(3, '\\', '/', '~')
triangle(5, '╚╗', '╔╝', '╚╦╝')
triangle(5, '╚╗', '╔╝', '╚╦╝', '|')
triangle(-2)
產生以下輸出:
triangle(3)
* *
* *
* *
*
triangle(3, '\\', '/')
\ /
\ /
\/
*
triangle(3, '\\', '/', '~')
\ /
\ /
\/
~
triangle(5, '╚╗', '╔╝', '╚╦╝')
╚╗ ╔╝
╚╗ ╔╝
╚╗ ╔╝
╚╗ ╔╝
╚╗ ╔╝
╚╦╝
triangle(5, '╚╗', '╔╝', '╚╦╝', '|')
|╚╗|||||||||╔╝|
||╚╗|||||||╔╝||
|||╚╗|||||╔╝|||
||||╚╗|||╔╝||||
|||||╚╗|╔╝|||||
||||||╚╦╝||||||
triangle(-2)
*
你應該爲此循環使用for循環,但它始終不是最好的使用方法。這是我做過什麼:
def GioTri(i):
foo = i - 1
bar = 0
for i in range(i-1):
print ' ' * bar + "*" + " " * (foo*2 - 1) + "*" + " " * bar
foo = foo - 1
bar = bar + 1
print " " * bar + "*" + " " * bar
這樣做的結果是這樣的:
* *
* *
* *
*
你能不同的編輯?我根本無法分辨你在問什麼。 – James 2013-05-03 22:34:05
不要乘以'\ *',否則你會得到很多......把另一組空間放在這樣的地方:''\ *(t + 1)+'\ *'+''\ *(i \ * 2 - 3)+'\ *'然後您只需要另一個條件來檢查當您位於底部並打印1星而不是2 – David 2013-05-03 22:43:53