2016-09-22 65 views
0

我首先想說,這可能被歸類爲重複後,根據我目前的研究:造就了一批金字塔

How to do print formatting in Python with chunks of strings?Number Pyramid Nested for Looppyramid of numbers in python

[編輯:因爲我不能用這些以前的問題得出的結論與我的非常相似,因爲除了我們班上到目前爲止所講的內容之外,我不能使用任何其他的東西。我不允許使用諸如len,map,join等解決方案。我僅限於基本格式和字符串轉換。]

我正在爲我的Python類(使用3.0+),我已經達到了一個被卡住的地步。這個程序的目的是讓用戶輸入從1號到15作爲行計數並輸出基於其選擇一個號碼金字塔,如下面的例子中,用戶將輸入5:

   1 
      2 1 2 
      3 2 1 2 3 
     4 3 2 1 2 3 4 
     5 4 3 2 1 2 3 4 5 

所以遠遠達到了我可以成功打印輸入1到9的程度,但碰到了兩個問題。

  • 從10到15的輸入數字變得不對齊(上述帖子中的用戶似乎也有)。
  • 我似乎無法正確地格式化打印的號碼在他們之間的空間,如我上面的例子

我對程序當前的代碼是:

print("This program creates a number pyramid with 1 to 15 lines") 

lines = eval(input("Enter an integer from 1 to 15: ")) 

if lines < 16: 
    for i in range(1, lines + 1): 
     #Print leading space 
     for j in range(lines - i, 0, -1): 
     print(" ", end = '') 
     #Print left decreasing numbers  
     for j in range(i, 0, -1): 
      print(j, end = '') 
     #Print right increasing numbers 
     for j in range(2, i + 1): 
      print(j, end = '') 
     print("") 

else: 
    print("The number you have entered is greater than 15.") 

我的電流輸出:

Enter an integer from 1 to 15: 15 
       1 
      212 
      32123 
      4321234 
      543212345 
     65432123456 
     7654321234567 
     876543212345678 
     98765432123456789 
    109876543212345678910 
    1110987654321234567891011 
    12111098765432123456789101112 
    131211109876543212345678910111213 
1413121110987654321234567891011121314 
15141312111098765432123456789101112131415 

我在問你們有沒有學習的慾望,不是爲了任何人爲我編碼。我想了解我做錯了什麼,所以我可以修復它。謝謝大家!

+0

這將是與兩位數字相當困難的空間。當它變得那麼遠時,你希望它看起來像什麼? –

+0

[python中的數字金字塔]可能的重複(http://stackoverflow.com/questions/13077491/pyramid-of-numbers-in-python) – gabra

+0

Gabra,你是對的,這也是我看過的東西之一在。意思是將此添加到此問題中,現在添加它。它有一個解決方案,但不是我可以使用的東西。 – Norr

回答

0
  1. 您需要爲10到15之間的數字打印更多的空格,因爲您必須考慮額外的字符。如果您將最大數量更改爲100,則需要另一個空間(總數爲3),依此類推。這意味着,相反,如果print(" ")您必須使用print(" " * len(str(j))),其中*重複的空間len(str(j))次和len(str(j))計數從j的位數。另外,如果你想讓金字塔正確對齊,你必須打印另一個空格,即數字之間的空格。
  2. 要添加數字之間的空間,你必須打印
    print(j, end=' ')
+0

謝謝玩世不恭。問題是我不能使用len(str(j)),因爲我們還沒有在我的課程中介紹它(編輯我原來的帖子來解決這個問題),你知道解決這個問題的方法嗎? – Norr

+0

這幫助我意識到如何解決間距問題。我不得不在原始的'print(「,end ='')'之間增加一個額外的空間,並且在print(j,end ='')' – Norr

+0

而不是len(str j)),你可以if..elif。 'noOfDigits = 0如果我<10 noOfDigits = 1 elif我<100 noOfDigits = 2等' – CynicalSection