2016-09-22 10 views
0

I первый прочь хотел бы сказать, что это может быть классифицирован как дубликат поста, на основе моего текущего исследования:Создание номера пирамиды

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

[Edit: Причина, по которой я не могу использовать выводы по этим предыдущим вопросам, очень похожие на мои, заключается в том, что я не могу использовать ничего, кроме того, что мы до сих пор рассматривали в моем классе. Мне не разрешено использовать такие решения, как: 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

Габра, вы правы, это тоже одна из вещей, которые я искал в. Предложите добавить это в этот вопрос, добавив его сейчас. У этого есть решение, но не то, что я могу использовать. – 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, если i <10 noOfDigits = 1 elif i <100 noOfDigits = 2 и т. д. – CynicalSection