2016-10-05 155 views
2

我討厭我必須問這個問題,但是我不能爲我的生活弄清楚如何使這個工作。該程序應該要求輸入一個奇數整數,然後創建一個倒置的金字塔,第一行包含星號的數量作爲數字,最後一行只有一個居中的星號。我已經弄清楚了大部分內容,但是我的星號拒絕排隊,無論我嘗試什麼。我已經看過類似的其他主題,並試圖使用它們,但仍然無法弄清楚。我不確定爲什麼'我'被使用,但在另一篇文章中看到它,它看起來比我之前所做的稍好。在Python中使用for循環創建一個顛倒的星號三角形

這是我的代碼,我用它修飾了很多,但沒有用。

x=input('Enter an odd number width: ') 
x_int = int(x) 
print('Triangle:') 
for i in range(x_int+1, 0, -1) : 
    numwhite = (x_int - i)/2 
    white_int= int(numwhite) 
    print(' '* white_int + '*'*i) 

其輸出(輸入13):

Triangle: 
************** 
************* 
************ 
*********** 
********** 
    ********* 
    ******** 
    ******* 
    ****** 
    ***** 
    **** 
    *** 
    ** 
     * 

我希望它看起來像(輸入7)

******* 
***** 
    *** 
    * 
+0

我不是你的約束是什麼。但是,這裏有兩個提示:(a)使用等寬字體(以便每個字符佔用相同數量的水平空間)。 (b)每個星號使用兩個字符位置,一個空格和一個星號本身。 –

+0

你必須每行刪除**兩個**星 - 這是範圍(x_int + 1,0,-2)'。 – MisterMiyagi

回答

0

我不認爲你可以居中他們因不能在半空間之間放置角色。也許嘗試在所有星星之間插入一個空格,這樣你可以更好地將它們居中併產生類似的東西。

* * * * 
* * * 
    * * 
    * 

相反的:

**** 
*** 
** 
    * 
1

您需要將range的「步」設置爲-2,所以它只能抓住逆向賠率整數。然後需要有一個空白空間,以使+ 1正常工作。

x=input('Enter an odd number width: ') 
x_int = int(x) 
print('Triangle:') 
for i in range(x_int, 0, -2): 
    numwhite = ((x_int - i)/2) + 1 
    white_int= int(numwhite) 
    print(' ' * white_int + '*'*i) 

輸出繼電器:

Enter an odd number width: 7 
Triangle: 
******* 
***** 
    *** 
    * 

與來自設定的步驟的解釋

x_int = int(input('Enter an odd number width: ')) # reducing 

print('Triangle:') 

for i in range(x_int, 0, -2): # -2 means only do every 2nd number in reverse 
    num_white = int(((x_int - i)/2) + 1) # Checking the math here, needed a +1 
    print(' ' * num_white + '*' * i) # Could be changed to .format but works 

輸出

​​
+0

謝謝!覺得這是一個簡單的修復,但非常感謝。 – chillbro

2

除了更多可讀代碼值爲-2,如果使用Python的字符串format方法,則會有更易讀的代碼。您可以通過使用中心對齊即輕鬆置中星號。 ^

x = input('Enter an odd number width: ') 
x_int = int(x) 
print('Triangle:') 

fmt = '{' + ':^{}'.format(x_int) + '}' # Notice the caret^and how the width is set 
for i in range(x_int, 0, -2): 
    stars = '*'*i 
    print(fmt.format(stars)) 

試用:

Enter an odd number width: 15 
Triangle: 
*************** 
************* 
    *********** 
    ********* 
    *******  
    *****  
     ***  
     *  

您可以字符串格式化做多。看一看參考:https://pyformat.info

+0

謝謝,我會研究一下。剛開始編碼。 – chillbro

2

試着這麼做:

x = int(input('Enter an odd number width: ')) 
print('Triangle:') 
for i in range(x_int, 0, -1): 
    print('{:^{str_len}}'.format('* ' * i, str_len= x_int * 2)) 

這應該不僅爲奇數工作。