2012-07-04 14 views
0

解決此問題有一些困難。該程序應該從用戶那裏得到一個數字。這將是三角形的數量。第一個三角形應該有兩排。每個新的三角形都會比上一個三角形多出一行。 這是我的:我在做什麼錯?添加1以使用輸入

numTri = input('Please umber of triangles: ') 
numTri = eval(numTri) 
numRow = 2 
x = 0 
while j<numTri: 
    y = '*' 
    z = 0 
    while z<numRow: 
     print y 
     y = y + * 
     z += 1 
    x += 1 
    numRow += 1 

在打印行上獲取無效的語法錯誤。不知道我是否做錯了什麼。任何人有任何想法?

+6

'numTri = EVAL(numTri)'NOOOOOOO –

+0

@Jakob鮑耶:打我吧! –

+1

y = y + *也是可疑的 –

回答

0
numTri = int(raw_input('Please umber of triangles: ')) 

或Python 3.x都有

numTri = int(input('Please umber of triangles: ')) 
1

但我認爲,語法錯誤(從而回答你的問題)是因爲你使用Python 3,其中print需要圓括號。所以:

print (y) 

如果你只是想檔次最高的爲你的編程任務:

print('\n'.join('*'*y for x in range(int(input('Please umber of triangles: '))) for y in range(1,x+3))) 
1

j到達while循環之前是從來沒有定義。也許你的意思是while x < numTri:

此外,

x = 0 
while x < numTri: 
    # do something 
    x += 1 

構建體不是很符合Python;嘗試

for x in range(numTri): 
    # do something 

改爲。

+0

然後你也應該在範圍內使用'for z(numRow):' –

6

假設您使用的是Python 3,則代碼中會出現很多錯誤。讓我們來看看他們:

主要問題

j變量

您使用j變量,在環情況下,未設置任何地方都不使用。這將導致一個錯誤:

while j<numTri: 

我相信你想使用的x變量:

while x<numTri: 

print()

在Python 3,你應該把參數的函數括號之間的一個print()函數,但並非如此:

  print y 

太容易解決:

  print(y) 

注意,括號在Python 2可選。

'*'字符不帶引號:

您嘗試將'*'字符的字符串從y追加,但不與引號括起來的字符:

  y = y + * 

的解釋會看到這個星號乘法運算符會產生錯誤。只需用引號括起來(單層或雙層,這並不重要):

 y = y + '*' 

壓痕問題

代碼中的一個特別緻命的問題是,第二while循環之後,你的代碼完成不會返回到循環的相同縮進級別。我換成下面open boxes的空間,所以我們可以指望他們:

␣␣␣while z<numRow: 
␣␣␣␣␣␣␣␣␣print y 
␣␣␣␣␣␣␣␣␣y = y + * 
␣␣␣␣␣␣␣␣␣z += 1 
␣␣␣␣x += 1 
␣␣␣␣numRow += 1 

唉,當與while線相比有在最後兩行一個更大的空間。你應該刪除那些虛假的空間。

所產生的代碼將是:

numTri = input('Please umber of triangles: ') 
numTri = eval(numTri) 
numRow = 2 
x = 0 
while x<numTri: 
    y = '*' 
    z = 0 
    while z<numRow: 
     print(y) 
     y = y + '*' 
     z += 1 
    x += 1 
    numRow += 1 

小問題

也有在你的代碼中的一些其他細節將被視爲陋習。這些對你來說無關緊要還有,既然你是真的是新手,但是我們可以探索其中的一些。

避免eval()

eval()是一個功能強大且有風險的功能,所以我們避免使用它。這是特別容易在你的情況做,因爲int()將讀取字符串轉換爲整數沒有問題:

numTri = input('Please umber of triangles: ') 
numTri = int(numTri) 

非標準縮進

有時候,你縮進你有什麼循環裏面四個空格:

␣␣␣y = '*' 
␣␣␣z = 0 
␣␣␣while z<numRow: 

然後用六個空格

␣␣␣␣␣␣print(y) 
    ␣␣␣␣␣␣y = y + '*' 
    ␣␣␣␣␣␣z += 1 

,甚至與四個空格,這將導致一個錯誤:

␣␣␣␣x += 1 
␣␣␣␣numRow += 1 

做的最好的事情是要始終使用相同的縮進大小。PEP 8(一組適用於所有的Python程序員建議)建議使用四個空格爲每一個凹陷:

␣␣␣␣y = '*' 
␣␣␣␣z = 0 
␣␣␣␣while z<numRow: 
    ␣␣␣␣print(y) 
    ␣␣␣␣y = y + '*' 
    ␣␣␣␣z += 1 
␣␣␣␣x += 1 
␣␣␣␣numRow += 1 

while而不是for

這一個是硬的東西新手,但它可能會有所幫助儘管如此。您的代碼會更好,如果你使用for循環與range()功能:

for x in range(0, numTri+1): 
    y = '*' 
    for z in range(0, numRow+1): 
     print(y) 
     y = y + '*' 
    numRow += 1 

然而,當你是一個學生,我相信你會了解此功能在未來的一段時間,所以把它簡單: )

生成的代碼:

numTri = input('Please umber of triangles: ') 
numTri = int(numTri) 
numRow = 2 
for x in range(0, numTri+1): 
    y = '*' 
    for z in range(0, numRow+1): 
     print(y) 
     y = y + '*' 
    numRow += 1 
+0

在「小問題」下放置「避免用'eval'評估用戶輸入」可能會導致很多人畏縮;) – Voo