2016-01-06 4 views
0

Я пытаюсь получить следующее: я хочу напечатать ряд целых чисел, но если целое число содержит более 10 цифр, «1» в «10» необходимо напечатать на Вверх.Печать целых чисел, чередующихся по горизонтали - Python3

например:

6 -> 123456

13 -> ................... 1111

... ....... 123456789

Примечание. Если в нем содержится менее 10 цифр, печатается «верхняя строка». И «.» должны быть заменены только пробелами, но редактор не позволит мне сделать это

Я попытался следующие:

line10 = '' 
line1 = '' 

if length > 10: 
    for i in range(length): 
     if (i + 1) // 10 == 0: 
      line10 += ' ' 
     else: 
      line10 += str((i + 1) // 10) 


for i in range(length): 
    line1 += str((i + 1) % 10) 

if length > 10: 
    print(line10) 
print(line1) 

И: это работает, но как вы можете заставить его работать на, скажем, 100 или 1000, без необходимости копировать строки кода?

Заранее благодарен.

ответ

0

Там может быть более элегантным решением вашей проблемы, но я считаю, что это делает то, что вам требуется:

def number_printer(n): 

    lines = [[] for m in range(len(str(n)))] 

    for i in range(1, n+1): 
     diff = len(str(n))-len(str(i)) 

     if diff > 0: 
      for z in range(diff): 
       lines[z].append(" ") 
      for x, y in enumerate(str(i)): 
       lines[x+diff].append(y) 
     else: 
      for x, y in enumerate(str(i)): 
       lines[x].append(y) 

    for line in lines: 
     print "".join(line) 

if __name__ == "__main__": 
    number_printer(132) 

По существу, он проверяет длину каждого номера он рассчитывает через против длины числа вы хотите напечатать (в этом примере 132). Где бы он ни находил разницу (где diff> 0), он добавляет соответствующее количество пробелов, поэтому все номера выравниваются (например, для номера 12 он добавит 1 пустое пространство, так как разница в длине между 12 и 132 равна 1) ,

Надеюсь, это то, за чем вы были!

Смежные вопросы